2014-02-19 5 views
1
[DllImport("user32.dll")] 
public static extern IntPtr PostMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam); 

public void keyPress(){ 
     const uint WM_KEYDOWN = 0x100; 
     const uint WM_KEYUP = 0x0101; 
     PostMessage(Process, WM_KEYDOWN, (int)Keys.Q, (IntPtr)Convert.ToInt32("00100001", 16)); 
     Thread.Sleep(1000); 
     PostMessage(Process, WM_KEYUP, (int)Keys.Q, (IntPtr)Convert.ToInt32("C0100001", 16)); 
} 

Я пытаюсь вызвать PostMessage с Keydown и keyup. Я знаю, что процесс получает сообщение, потому что я смотрю сообщения со шпионом ++, и я отправляю те же wParam и lParams, которые вызывают, когда я сам нажимаю кнопку на окне. Я попытался использовать SendKeys.sendwait вместе с setforeground, но та же проблема возникает, когда одно и то же сообщение появляется в spy ++, но активного окна в нем нет.Windows PostMessage Issue C#

+2

«Обработайте» ручку окна? – Jumpei

+0

О, извините, процесс - это IntPtr, захваченный из Processes.MainWindowHandle. – vifs

+0

Итак, разрешено? :) – Jumpei

ответ

0

SendInput - лучшая альтернатива правильному моделированию входов.

PostMessage может не всегда работать, потому что приложение может проверить, какое сообщение окна получено, и обработать вход соответствующим образом. Например. когда WM_KEYDOWN получен, всплывающее окно сообщения вместо того, чтобы делать что-либо с помощью клавиш ввода.

Смежные вопросы