Windows API,自动按键 VB.Net

Windows API, Automate keypress VB.Net

我正在尝试使用 vb.net 中的 windows API 自动执行 "ctrl+c" 按键。我试过使用 SendKey() 命令,但它不起作用。显然它针对活动 window ,由于某种原因在这种情况下不起作用。所以我正在寻找 windows API 替代方案。这是我目前所拥有的:

 Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hWnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Integer) As Integer

 Sub example()
        SendMessage(&HFFFF, 256, &H43, 0) ' Keydown
        '   SendMessage(0, 257, &H43, 65539) ' Keyup
 End Sub

它应该为 "C" 自动执行一个简单的按键操作,但它不起作用。任何帮助将不胜感激

附加说明:我想做的只是自动化 "ctrl +c"。我正在尝试从游戏中复制内容。

当 "ctrl+C" 被调用时,window 处于活动状态并位于所有其他 windows 之上,并且所需的文本被选中。在这种情况下,当我手动按 "ctrl+c" 时,它会复制所需的文本,但是当我使用 sendkey(^{C}) 时,什么也没有发生。所以我正在寻找 API 替代方案。

'SendMessage' API 调用使用 Window 消息来调度由按键生成的事件。如果您的目标是 "Console Window",这将不起作用。此外,依赖 GetKeyboardState and/or DINPUT 的游戏很可能不会遵守通过 SendKeys/SendMessage.

发送的控制状态

您可能需要更多类似于 SendInput 的东西来模拟硬件事件,而不是发送通用的 Window 消息,这将适用于您的特定情况。

还有事件路由(和拒绝)规则基于:

  1. 目标是前景吗window?
  2. 目标是否有焦点,是否处于活动状态?

对于鼠标事件:

  1. 目标和目标区域是否被另一个window遮挡?

此外,由于您的目标是游戏:

  1. 有些游戏依赖于 GetKeyboardState 和类似的 API 调用,因此它们不遵守指定 control/alt/shift 键状态的 Window 消息。同样,您可能希望使用模拟硬件事件的 API(例如 SendInput),在这种情况下,您可能还希望使用 SetKeyboardState 来设置 Control/Alt/Shift 键(等等。)

您也许可以从 Mubox 中提升一些 code/ideas,这能够完全按照您的尝试进行。

希望对您有所帮助。

参考文献: