【问题标题】:Windows PostMessage Issue C#Windows PostMessage 问题 C#
【发布时间】:2016-03-10 21:17:18
【问题描述】:
[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,这些 wParam 和 lParams 是我自己点击窗口上的按钮时引起的。我已经尝试将 SendKeys.sendwait 与 setforeground 一起使用,但同样的问题发生在 spy++ 中出现相同消息但窗口中没有活动响应的情况下。

【问题讨论】:

  • Process 是窗口句柄吗?
  • 抱歉,Process 是从 Processes.MainWindowHandle 抓取的 IntPtr。

标签: c# sendkeys postmessage


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 2015-11-20
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    • 2011-10-19
    相关资源
    最近更新 更多