使用 SendMessage() 的鼠标单击未移交给 window

Mouse click using SendMessage() not getting handed over to the window

简单来说:

我有 2 个模拟器,我正在使用 SendMessage() 模拟点击


我可以发送的模拟器是 Nox

window 层次结构和 window 句柄 我将消息传递给:

它按照预期的方式工作 (使用spy++监听消息)

代码:

SendMessage(NoxPlayer, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(width, height));
SendMessage(NoxPlayer, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(width, height));
SendMessage(NoxPlayer, WM_MOUSEMOVE, 0, MAKELPARAM(width, height));

我在末尾添加了 WM_MOUSEMOVE,因为 noxplayer 认为我在按住 L_Mouse 不加它的情况下单击。


现在我的问题出在这里...我有另一个模拟器叫 "MEmu player"

window 层次结构和 window 句柄 我将消息传递给:

但是当传递与之前相同的代码时:

SendMessage(MEmu, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(width, height));
SendMessage(MEmu, WM_LBUTTONUP, MK_LBUTTON, MAKELPARAM(width, height));
SendMessage(MEmu, WM_MOUSEMOVE, 0, MAKELPARAM(width, height));

我没有得到应用程序的模拟点击。我尝试收听我传递的任何消息,但在使用 spy++ 遍历所有可见 windows 时发现 none。


然后我尝试使用 spy++ 聆听正常的鼠标点击作为消息的样子,并得到了这个:

作为参考,这是没有模拟的相同点击在 Nox Player 上的样子:


我是否使用了错误的代码来发送模拟的鼠标点击,或者我是否将其传递给了错误的 window?

好吧...

通过做一件简单的事情设法解决了我遇到的问题。

运行我的程序有管理员权限

因为我使用 Microsoft Visual Studio 进行所有编程,所以我只需要在管理员模式下启动 Visual Studio。

修复了问题,同时仍然保留了鼠标单击模拟的原始 SendMessage() 方法