[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));
}
我试图用Keydown和keyup调用PostMessage。我知道这个过程正在收到消息,因为我正在用spy ++观看消息,并且我发送的是当我自己点击窗口上的按钮时导致的相同的wParam和lParams。我已经尝试过使用SendKeys.sendwait和setforeground但是同样的问题发生在spy ++中出现相同的消息但是窗口中没有活动的响应。
答案 0 :(得分:0)
SendInput
是正确模拟输入的更好选择。
PostMessage
可能并不总是有效,因为应用程序可以检查收到的窗口消息并相应地处理输入。例如。收到WM_KEYDOWN后,弹出一个消息框,而不是用输入键做任何事情。