【问题标题】:Mouse click using SendMessage() not getting handed over to the window使用 SendMessage() 的鼠标单击未移交给窗口
【发布时间】:2018-04-25 18:27:50
【问题描述】:

简单地说:

我有 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 播放器上没有模拟的相同点击的样子:


我是否使用了错误的代码来发送模拟的鼠标点击,或者我是否将它传递到了错误的窗口?

【问题讨论】:

  • 据我记得,您不应该尝试使用 WM_LBUTTONDOWN、WM_LBUTTONUP 等来模拟鼠标点击。这些消息是由 Windows 操作系统生成的,供您的应用程序处理,而不是让您尝试伪造。通常使用的函数是(据我记得,SendInput 或类似的)。
  • @PaulMcKenzie 我刚刚看到这个:stackoverflow.com/a/12363393/7346067 我设法获得了让我的鼠标右键单击的代码,但它并没有移动我的鼠标,它只是右键单击。同样从我读到的,它说它会将我的鼠标指针移到屏幕上?不过我不希望这种情况发生

标签: c++ windows sendmessage


【解决方案1】:

好吧……

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-11-24
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2010-10-21
    • 2018-10-27
    • 1970-01-01
    • 2013-08-12
    • 2012-11-19
    相关资源
    最近更新 更多