如何模拟后台鼠标点击功能? SendMessage 和PostMessage 都无效。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何模拟后台鼠标点击功能? SendMessage 和PostMessage 都无效。相关的知识,希望对你有一定的参考价值。

有谁知道如何模拟后台鼠标点击功能? SendMessage 和PostMessage 都无效。 不知道为什么。 mouse_event有效。 但是 mouse_event 控制了鼠标的正常使用。 所以想做个太后模拟的 ,如果是网上的COPY 就请不要浪费时间了。我找了很多网上的资料,API是不太详细。SendMessage 和PostMessage 发送后 GetLastError 都返回的是0。

SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELPARAM(x, y));
SendMessage(hWnd, WM_LBUTTONUP, NULL, MAKELPARAM(x, y));
hWnd 是发送的目标控件句柄,比如是按钮那就按钮句柄。x、y 是鼠标相对于该控件客户区左上角的坐标,比如 0、0 就表示在按钮的最左上角点击。
参考技术A SendInput
详见MSDN
参考技术B 制作flash追问

什么叫 制作FLASH? 我不是刚入门的编程新手,谢谢。如果你是说 嵌入式的 FLash 的话。那就不可能呢。请高手解答。谢谢

使用 SendMessage 模拟用户鼠标点击

【中文标题】使用 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 和PostMessage 都无效。的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 SendMessage 模拟用户鼠标点击

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

SendMessage, postmessage模拟鼠标左键

vb后台模拟鼠标点击网页

如何写一个脚本模拟鼠标左键连续点击后台网页链接