【问题标题】:Intercepting mouse events in windows在窗口中拦截鼠标事件
【发布时间】:2012-04-08 06:00:39
【问题描述】:

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

有什么建议吗?

【问题讨论】:

  • 使用 SendInput() winapi 函数。
  • 但是怎么做呢?那么程序必须在窗口外运行的情况呢?
  • 您没有指定您需要它来处理最小化的应用程序。你的目标是游戏吗?如果是这样,它可能对这类事情有保护。
  • 其实是个机器人。我想创建一个简单的机器人,让鼠标在给定时间间隔内点击指定位置。

标签: windows mouse routines


【解决方案1】:

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

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

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

我将提到的最后一种自动化方法——遗憾的是最不可能工作的方法——是Microsoft UI Automation 框架。该框架旨在允许残疾和/或特殊需要用户使用应用程序。遗憾的是 - 很少有软件提供商会费心在他们的产品中实现这个 API。

【讨论】:

    猜你喜欢
    • 2011-08-28
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多