Win32将同步事件发送到其他进程

时间:2013-11-17 16:49:36

标签: c++ winapi d

我正在尝试编写一个程序,允许我更直观地在Dota 2中移动相机。在保持空间的同时,它模拟鼠标中键,当光标到达屏幕边框时,它会跳回到中心。使光标居中看起来像这样(简化):

PostMessage(w, WM_KEYUP, VK_MBUTTON, 0);
PostMessage(w, WM_MOUSEMOVE, 0, MAKELPARAM(screenWidth/2, screenHeight/2));
SetCursorPos(screenHeight/2, screenHeight/2)
PostMessage(w, WM_KEYDOWN, VK_MBUTTON, 0);

w是Dota 2的窗口句柄。问题是,当发生这种情况时,Dota仍然认为按钮已关闭,因此相机会跳转。我通过使用SendInput模拟关键事件而不是直接发送消息来部分工作,但这需要在事件之间暂停10ms,这不是我想要的。有没有办法查看消息是否已被其他进程处理?

2 个答案:

答案 0 :(得分:1)

游戏通常使用DirectInput进行鼠标输入,这将为他们提供鼠标按钮的真实状态。 GetAsyncKeyState也会检查实际的鼠标按钮状态。

如果游戏使用其他鼠标处理机制,您的消息将不会有太多(或任何)效果。

您可以尝试使用SendInput,这会更改Windows向应用程序报告的一些内部状态。

答案 1 :(得分:0)

SendMessage(和SendMessageTimeout)在其返回值中指示消息是否已被处理。