WinAPI鼠标单击无法正常工作

时间:2016-01-25 23:11:14

标签: c++ windows winapi mouse

我正在用C ++(Windows 7)创建程序,它通过读取屏幕并发回鼠标信号(仅左键单击)来控制一个特定窗口。我明显使用WinAPI。问题在于鼠标信号。我的目标是在实际光标位置上独立发送鼠标事件。 (即它可以在背景上运行"并且窗口不必是可见的)。

我使用SendMessage(或PostMessage)尝试了明显的解决方案:

PostMessage(hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y));
this_thread::sleep_for (std::chrono::milliseconds(100));
PostMessage(hwnd, WM_LBUTTONUP  , MK_LBUTTON, MAKELPARAM(x, y));

我认为命令工作正常但是应用程序如何处理点击事件存在一些问题。它似乎没有考虑参数x,y,而是在调用WM_LBUTTONUP时,它询问操作系统光标所在的位置并点击该位置。所以最后点击始终发生在光标的位置(如果它在窗口内)。

我还尝试在WM_MOUSEMOVE之前发送WM_LBUTTONUP事件,但它没有帮助。

这种行为真的很奇怪,我完全责怪应用程序而不是WinAPI。任何想法如何解决这个问题?我可以以某种方式欺骗窗口,以便它认为光标在其他地方吗?

1 个答案:

答案 0 :(得分:1)

如果这是您唯一需要的use SendInput MOUSEINPUT结构。

如果您想了解原因,请继续阅读。你正在做什么不起作用,因为鼠标消息是特殊的。它们不是在消息队列中到达并等待您的常规消息。当您致电GetMessage时,它们会根据需要合成,因此他们会从隐藏的秘密地点获取数据。事实上,一般而言,输入消息的处理方式与发布的消息不同。 Heresome reading材料。