在Windows中拦截鼠标事件

时间:2012-04-08 06:00:39

标签: windows mouse routines

好的标题似乎很清楚我想做什么。 更确切地说:我想创建一个以两种方式操作鼠标的程序(首选c ++或java),例如:改变其位置和进行点击。 我正在考虑使用allegro(它有鼠标例程来操纵上面引用的东西)或sdl(我不知道是否有那种常规)。我成功地尝试了快板。我的问题在于我无法实现“点击”。我也无法将我的程序更改的内容重定向到其他窗口。

任何提示?

1 个答案:

答案 0 :(得分:1)

有几种方法可以尝试在Windows上自动化其他应用程序......

在最简单的级别,可以使用PostMessage将键盘和鼠标消息发布到另一个应用程序的窗口。这样做的好处是,即使其他应用程序最小化,也可以工作。不幸的是,这种方法会跳过大多数输入处理逻辑,因此使用GetAsyncKeyState直接访问密钥状态的应用程序将无法看到(例如)控制密钥为'down',无论您有多少WM_KEYDOWN, vk=VK_CONTROL条消息发送。

正如Hans Passant评论的那样,SendImput将输入事件放在较低级别的输入事件队列中,因此可以完全模拟修改键。然而,这些输入事件不会发布到窗口,因此要成功传递输入事件,需要遵循正常的激活和焦点窗口规则。也就是说,这是大多数测试自动化软件使用的方法(这也是大多数测试自动化软件要求被测试的应用程序是活动应用程序的原因。)

最后提到的自动化方法 - 遗憾的是最不可取的工作 - 是Microsoft UI Automation框架。此框架旨在允许禁用和/或特殊需求用户使用应用程序。可悲的是 - 很少有软件提供商愿意在他们的产品中实现这个API。