Windows API,Automate keypress VB.Net

时间:2015-02-10 21:32:25

标签: vb.net winapi

我试图自动化" ctrl + c"在vb.net中使用windows API的keypress。我尝试过使用SendKey()命令但是没有用。显然它是针对活动窗口,在这种情况下由于某种原因它不起作用。所以我正在寻找一个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"正在调用,窗口处于活动状态,并且在所有其他窗口之上,并且选择了所需的文本。当我手动按" ctrl + c"在这种情况下,它会复制所需的文本,但是当我使用sendkey(^ {C})时,没有任何反应。所以我正在寻找API替代方案。

1 个答案:

答案 0 :(得分:0)

“SendMessage”API调用使用“窗口消息”来分派按键生成的事件。如果您的目标是“控制台窗口”,则无法使用。此外,依赖于GetKeyboardState和/或DINPUT的游戏很可能不会尊重通过SendKeys / SendMessage发送的控制状态。

你可能想要更多类似于SendInput的东西来模拟硬件事件,而不是发送一个通用的窗口消息,它将在你的特定情况下工作。

还有基于以下内容的事件路由(和拒绝)规则:

  1. 目标是前景窗口吗?
  2. 目标是否具有焦点,是否有效?
  3. 对于鼠标事件:

    1. 目标和目标区域是否被另一个窗口遮挡?
    2. 此外,由于您的目标是游戏:

      1. 某些游戏依赖于GetKeyboardState和类似的API调用,因此它们不尊重指定控制/ alt / shift键状态的Window Messages。同样,您可能希望使用模拟硬件事件的API(例如SendInput),在这种情况下,您可能还想使用SetKeyboardState来设置Control / Alt / Shift键的状态(除其他外。)
      2. 您可以从Mubox中提取一些代码/想法,这些代码/想法可以完全按照您的尝试进行操作。

        希望有所帮助。

        参考文献: