Windows PostMessage问题C#

时间:2014-02-19 04:37:19

标签: c# sendkeys postmessage

[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 ++中出现相同的消息但是窗口中没有活动的响应。

1 个答案:

答案 0 :(得分:0)

SendInput是正确模拟输入的更好选择。

PostMessage可能并不总是有效,因为应用程序可以检查收到的窗口消息并相应地处理输入。例如。收到WM_KEYDOWN后,弹出一个消息框,而不是用输入键做任何事情。