使用SendMessage模拟用户鼠标单击

时间:2009-04-27 02:58:27

标签: winapi mouse automated-tests user-input user32

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

干杯

罗斯

1 个答案:

答案 0 :(得分:2)

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

  

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

因此,使用WH_JOURNALRECORDWH_JOURNALPLAYBACK看起来您可能不得不采用某种类似宏录制器的功能进行自动化测试?