在我的项目中,我使用inputsimulator,当以Visual Studio作为管理员运行Visual Studio时效果很好,但是当我将其构建为.exe时,即使以管理员身份运行它也无法正常工作.这是我的代码
In my project im using inputsimulator and it works great when visual studio is ran as an administrator, but when i build it into a .exe it doesn't work even when i run it as administrator. here's my code
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click AutoSaveTimer.Enabled = True Try System.Threading.Thread.Sleep(50) GameConnection.SendKeyTo(Keys.OemSemicolon) System.Threading.Thread.Sleep(2000) GameConnection.SendKeyTo(Keys.K) System.Threading.Thread.Sleep(50) GameConnection.SendKeyTo(Keys.Enter) Catch AutoSaveExeption As GameException If AutoSaveExeption.GameErrorCode = GameError.GAME_ERR_SENDMSG Then ' Send message error - connection to Game lost. ' MessageBox.Show("cant make a connection.... can't autosave sadly", AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) SimConnectionBar.BackColor = Color.Red End If End Try End Sub它确实将焦点发送到我指定的窗口,但不发送键击
it does send focus to the window i specify but it doesn't send the keystrokes
推荐答案在发送任何输入之前尝试使用SetForegroundWindow,以确保您的游戏确实具有焦点.应该在发送输入之前在您的方法中调用SetForegroundWindow.
Try using SetForegroundWindow before sending any input to ensure your game does in fact have focus.The call to SetForegroundWindow should be made in your method just before sending the input.
<DllImport("user32.dll")> _ Public Shared Function SetForegroundWindow(hWnd As IntPtr) As Boolean End Function Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ` AutoSaveTimer.Enabled = True Try 'Find the handle to the game. This can do it by searching for the process. Dim p As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("notepad") 'search for process notepad If p.Length > 0 Then 'check if window was found 'bring notepad to foreground SetForegroundWindow(p(0).MainWindowHandle) End If System.Threading.Thread.Sleep(50) GameConnection.SendKeyTo(Keys.OemSemicolon) System.Threading.Thread.Sleep(2000) GameConnection.SendKeyTo(Keys.K) System.Threading.Thread.Sleep(50) GameConnection.SendKeyTo(Keys.Enter) Catch AutoSaveExeption As GameException If AutoSaveExeption.GameErrorCode = GameError.GAME_ERR_SENDMSG Then ' Send message error - connection to Game lost. ' MessageBox.Show("cant make a connection.... can't autosave sadly", AppTitle, MessageBoxButtons.OK, MessageBoxIcon.Exclamation) SimConnectionBar.BackColor = Color.Red End If End Try end sub更多推荐
InputSimulator在调试时有效,但在构建程序时无效
发布评论