使用 SendMessage 模拟用户鼠标点击

Posted

技术标签:

【中文标题】使用 SendMessage 模拟用户鼠标点击【英文标题】:Using SendMessage for Simulating User Mouse Clicks 【发布时间】:2010-10-21 23:37:51 【问题描述】:

我需要使用 SendMessage 来模拟目标程序中的用户点击,因为 SendMessage 会阻塞,直到它触发的事件完成处理。这样做的原因是,这种阻止提供了检测是否有任何对话框因单击而打开的机会。我目前的问题是,虽然我可以在打开模型对话框的模拟表单中的按钮上连续使用 WM_LBUTTONDOWN 和 WM_LBUTTONUP 消息进行点击工作,但我无法让它在标准 Windows 应用程序中的菜单和菜单项上工作(记事本)。任何有助于以一种可行的方式执行对菜单项的点击的帮助都会受到赞赏。我已经可以检测它是否是一个菜单项,只需要能够使用 SendMessage 来模拟点击它并阻止它。

干杯

罗斯

【问题讨论】:

不确定我是否完全理解问题:你想阻止还是不想阻止?您是否尝试过使用 SendInput - 这是模拟鼠标/键盘输入的常用方法。您通常需要将其与检测输入结果的其他方式配对 - 例如。使用 WinEvents 检测是否出现了对话框或菜单。还有一些测试框架可以为您完成大部分工作。 【参考方案1】:

不幸的是,win32 hooks 上的这个页面说

模拟鼠标和键盘输入 (WH_JOURNALPLAYBACK)。 Hooks 提供了唯一可靠的方法来模拟这些活动。如果您尝试通过发送或发布消息来模拟这些事件,Windows 内部不会更新键盘或鼠标状态,这可能会导致意外行为。如果使用挂钩来回放键盘或鼠标事件,则这些事件的处理方式与真实的键盘或鼠标事件完全相同。

所以看起来您可能不得不通过使用WH_JOURNALRECORDWH_JOURNALPLAYBACK 来使用某种类似于宏记录器的功能来进行自动化测试?

【讨论】:

链接已过期,这是一个较新的链接:msdn.microsoft.com/en-us/library/windows/desktop/…

以上是关于使用 SendMessage 模拟用户鼠标点击的主要内容,如果未能解决你的问题,请参考以下文章

SendMessage, postmessage模拟鼠标左键

模拟鼠标点击

delphi中有模拟发送鼠标按键sendmessage的疑问

在后台窗口中模拟鼠标点击

delphi 后台模拟鼠标点击

C# sendmessage详解,键盘 鼠标 求给力 拜托