首页 > 解决方案 > 使用 SendMessage() 的鼠标单击未移交给窗口

问题描述

简单地说:

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


我可以将其发送到的模拟器是 Nox

我将消息传递给的窗口层次结构和窗口句柄:

窗口层次结构

它按预期工作(使用 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”的模拟器

我将消息传递给的窗口层次结构和窗口句柄:

逍遥等级

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

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++ 遍历所有可见窗口时没有发现任何消息。


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

逍遥

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

Nox玩家留言


我是使用错误的代码发送模拟鼠标点击还是将其传递到错误的窗口?

标签: c++windowssendmessage

解决方案


好的,所以...

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

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

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

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


推荐阅读