【问题标题】:How can I fire a key press or mouse click event without touching any input device at system level?如何在不触摸系统级别的任何输入设备的情况下触发按键或鼠标单击事件?
【发布时间】:2010-10-30 07:58:15
【问题描述】:

当屏幕上出现颜色时,如何触发自动按键或鼠标单击事件 在其他应用程序或浏览器上?

【问题讨论】:

  • 您会接受不在 C#、C++ 或 VB 中的答案吗?
  • 是的,任何语言都可以......请告诉......

标签: windows events


【解决方案1】:

这很大程度上取决于你想要什么。你想把钥匙寄到

  • 您的应用程序
  • 另一个固定的应用程序
  • 模拟全局按键

全局模拟键

所有这些都会导致针对特定应用程序的问题以及活动窗口的变化。

  • SendKeys 向活动应用发送消息。这是一个高级函数,采用一个对一系列键进行编码的字符串。

  • keybd_event 级别非常低,会注入全局按键。在大多数情况下,SendKeys 更易于使用。

  • mouse_event 模拟鼠标输入。

  • SendInput 取代了这些功能。它更灵活,但使用起来有点困难。

发送到特定窗口

使用固定目标窗口时,根据窗口的工作方式向其发送消息。但是由于这个doesn't update all states 它可能并不总是有效。但是你没有改变窗口焦点的竞争条件,这很有价值。

  • WM_CHAR在基本多语言平面(16位)中发送一个字符
  • WM_UNICHAR 发送支持整个 unicode 范围的字符
  • WM_KEYDOWN 和 WM_KEYUP 发送将由键盘布局转换为字符的键。

我的建议是在针对特定窗口/应用程序时首先尝试使用消息,并且只有在失败时才尝试使用较低级别的解决方案之一。

【讨论】:

    【解决方案2】:

    当一种颜色出现在其他应用程序或浏览器的屏幕上时

    我使用 OpenCV 和 C++ 编写了一个程序,用于通过手指手势操作鼠标。我用了 3 个色条来实现 3 个鼠标功能。

    • 左键单击为黄色
    • 右键单击为蓝色
    • 控制光标位置的粉红色

    每当相机检测到这些颜色时,相关功能就会发生,我使用mouse_event 来执行鼠标功能。 欲了解更多信息,您可以阅读我的code、blog、video。

    【讨论】:

      【解决方案3】:

      我不是 100% 确定你想要什么,但如果你只是在运行链接 button.Clicked 事件的方法,那么你可以像任何其他方法一样手动运行该方法。

      【讨论】:

        【解决方案4】:

        您可以使用 .NET SendKeys 类发送击键。 模拟鼠标点击需要 P/Invoke。 我不知道如何检测屏幕上的颜色。

        【讨论】:

          猜你喜欢
          • 2014-03-31
          • 2012-03-15
          • 1970-01-01
          • 2010-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-03
          相关资源
          最近更新 更多