如何模擬遊戲窗口中的按鍵(在Windows中使用任何編程語言)?如何將鍵盤輸入發送到OpenGL/DirectX遊戲窗口?
AutoHotKeys腳本和.NET的SendKeys功能不起作用......
如何模擬遊戲窗口中的按鍵(在Windows中使用任何編程語言)?如何將鍵盤輸入發送到OpenGL/DirectX遊戲窗口?
AutoHotKeys腳本和.NET的SendKeys功能不起作用......
任何編程語言?我的建議是用C或C++編寫一個小應用程序(儘管你也可以在.NET應用程序中使用P/Invoke)。
具體而言,您正在尋找Win32 API中的SendInput
function,它可以將低級鍵盤和鼠標輸入發送到應用程序。它根據包含您要發送的信息的INPUT
structure來執行此操作。
當然,此功能的使用受到UIPI的約束,這意味着您注入的應用程序必須以與執行注入的應用程序相同或較低的完整性級別運行。
但是,由於此功能通常是SendKeys
在封面下使用的內容,因此最後一點警告可能是它不起作用的原因。很難準確地說出來;你不要告訴我們你的意思是「不工作」。
使用的AutoIt!3(這是相當類似AutoHotKeys),你會使用Send()
(http://www.autoitscript.com/autoit3/docs/functions/Send.htm),但一定要具有遊戲窗口活動(WinActivate()
)在此之前。
我已經用它與第二人生(使用OpenGL)成功交互。您可能需要模擬按鍵之間的時間段,因爲並非所有遊戲都實現了良好的鍵盤緩衝區。
如果這不起作用,遊戲可能會直接訪問硬件驅動程序,而您唯一的選擇是掛鉤鍵盤驅動程序。
如果遊戲輪詢asynchonously,你要使用的down
和up
修飾符標誌:
Send("{left down}") ; hold down the LEFT key
Sleep(10) ; keep it pressed for 10 milliseconds
Send("{left up}") ; release the LEFT key
搞清楚如何長時間保持按下的鍵完全取決於如何頻繁地你想程序控制輪詢鍵盤;無法確切知道。
此鍵盤wrapper將允許您在遊戲或任何其他使用C#的應用程序中模擬鍵盤事件。
使用AutoIt3,它幾乎可以工作,但是如果我直接發送一個命令,如「{LEFT}」。它不是由遊戲處理的。我必須在循環中重複發送(「{LEFT}」)十次,即使在這種情況下,遊戲也不會處理命令。 – user1026187 2011-12-17 13:05:33