我试图自动化" 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替代方案。
答案 0 :(得分:0)
“SendMessage”API调用使用“窗口消息”来分派按键生成的事件。如果您的目标是“控制台窗口”,则无法使用。此外,依赖于GetKeyboardState和/或DINPUT的游戏很可能不会尊重通过SendKeys / SendMessage发送的控制状态。
你可能想要更多类似于SendInput
的东西来模拟硬件事件,而不是发送一个通用的窗口消息,它将在你的特定情况下工作。
还有基于以下内容的事件路由(和拒绝)规则:
对于鼠标事件:
此外,由于您的目标是游戏:
GetKeyboardState
和类似的API调用,因此它们不尊重指定控制/ alt / shift键状态的Window Messages。同样,您可能希望使用模拟硬件事件的API(例如SendInput
),在这种情况下,您可能还想使用SetKeyboardState来设置Control / Alt / Shift键的状态(除其他外。)您可以从Mubox中提取一些代码/想法,这些代码/想法可以完全按照您的尝试进行操作。
希望有所帮助。
参考文献: