PostMessage не работает в Windows 7 x64

Мне нужно имитировать нажатие клавиши в окне игры. Я пытаюсь отправить ключ «А», но это не работает:

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);

[DllImport("user32.dll")]
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

private void button1_Click(object sender, EventArgs e)
{
    IntPtr hWnd = FindWindow(null, "Game Name");  // it's work!

    if (hWnd == IntPtr.Zero)
    {
        MessageBox.Show("Game is not running");
        return;
    }

    SetForegroundWindow(hWnd);  // it's work too and now I have active window of game
    System.Threading.Thread.Sleep(3000);

    const int WM_KEYDOWN = 0x0100;
    PostMessage(hWnd, WM_KEYDOWN, (IntPtr)Keys.A, IntPtr.Zero);     // don't work ;-(
}

person alexfv    schedule 09.07.2011    source источник


Ответы (1)


Какая у вас ошибка? Игра запускается от имени администратора? Вы можете быть заблокированы UIPI.

person Ben Voigt    schedule 09.07.2011
comment
Я не получаю никакой ошибки. В журнале Spy++ для клавиатуры пусто. Я не думаю, что это какая-то блокировка, потому что другие подобные программы работают с этой игрой без проблем. - person alexfv; 10.07.2011
comment
Извини, чувак, это моя ошибка. Я забыл запустить Visual Studio с правами администратора - person alexfv; 10.07.2011