Vb.net 窗户上的钥匙

Vb.net 窗户上的钥匙,vb.net,sendkeys,Vb.net,Sendkeys,我正在用Visual basic为一个游戏编程,我想用以下代码模拟一个按键: Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick SendKeys.Send("a") End Sub 在我的窗口中,游戏不起作用,但在其他窗口(如chrome或测试文本框)中,为什么会起作用?如果这不是flash游戏,您可以通过以下方式获得游戏过程: Dim TheGame as Process =

我正在用Visual basic为一个游戏编程,我想用以下代码模拟一个按键:

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    SendKeys.Send("a")
End Sub

在我的窗口中,游戏不起作用,但在其他窗口(如chrome或测试文本框)中,为什么会起作用?

如果这不是flash游戏,您可以通过以下方式获得游戏过程:

 Dim TheGame as Process = Process.GetProcessesByName("YourGame")(0)

获取游戏窗口的句柄:

Dim Handle As IntPtr = TheGame.MainWindowHandle
然后使用sendmessage功能将按键发送到窗口:


例如,输入:
&H41(为“A”)
您可以在此处找到密钥列表:

user32.dll sendmessage函数:


编辑:
如果代码不起作用,则将sendmessage中的258(wm_字符)更改为256(wm_keydown) 注意:sendkeys将键发送到当前活动窗口,您应该首先尝试使用pinvoke函数,如果您没有任何选择,则使用sendkeys。 建议:
探索函数:postmessage、sendmessage、setforegroundindow以及explore spy++工具:)。

我使用了您的代码,当我编译此消息时,如果游戏未运行,您将得到此异常,您可以在“Process.GetProcessesByName”之前添加if条件,如果Process.GetProcessesByName(“您的游戏”).length>0,但游戏正在运行这就是问题所在
SendMessage(Handle, 258, PUT KEY HERE, 0)
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
                 (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As IntPtr