【发布时间】:2019-02-11 20:36:51
【问题描述】:
我在使用 PostMessage() 的参数 LPARAM 时遇到问题。
这是使用 PostMessage() 键入字母 z 的一个广泛可用的示例:
PostMessage(handle, WM_KEYDOWN, 0x5A, 0x002C0001) // key down for z
PostMessage(handle, WM_KEYUP, 0x5A, 0xC02C0001) // key up for z
到达LPARAM“0x002C0001”键按下和“0xC02C0001”键按下的公式是什么?我想为所有键复制它。 是否可以创建两个函数,例如 CreateLPARAM_KeyDown() 和 CreateLPARAM_KeyUp(),您只需传递扫描码——或者更好的是,独立于设备的虚拟键码——然后它们返回 LPARAM?
使用 keybd_event() 更容易,您只需将 dwFlags 参数 0 用于按键按下,并使用 KEYEVENTF_KEYUP 按键向上,但窗口必须具有焦点,并且我要发送到的窗口在后台,所以 keybd_event () 和 SendInput() 在我的情况下没有用。
【问题讨论】:
-
您不能通过发布此类消息来可靠地伪造输入。 SendInput 是您所需要的。无论这个问题在这里被问多少次,这始终是答案。
-
David Heffernan 这是一个普遍的观点,但它是一个有缺陷的概括。我发布到的窗口接收消息没有问题,我测试过,你甚至可以发送组合键,例如shift 键向下,字母向下/向上,shift 键向上,您将获得所需的输出。如果这些 API(PostMessage 和 SendMessage)没用,它们就不会存在。同样,这取决于接收消息的应用程序。
标签: c++ winapi postmessage