我想將鍵盤事件發送到另一個應用程序,更具體地說,一個遊戲模擬器。控制第三方應用程序
我嘗試過使用User32.dll的許多不同方法。沒有工作,因爲我想。
我有以下窗口:
我試圖與代碼發送數據:
var p = Process.GetProcessesByName("VisualBoyAdvance-M").FirstOrDefault();
if (p != null)
{
IntPtr h = p.MainWindowHandle;
SetForegroundWindow(h);
}
while (true)
{
SendKeys.SendWait("{DOWN}");
Console.WriteLine("DOWN");
Thread.Sleep(3000);
}
「向下」是對遊戲的向下的命令。當我這樣做時,模擬器應該向下移動箭頭。 當我運行上面的代碼時,模擬器變成活動窗口。但唯一的動作是菜單項,如果我點擊一個。選擇上下移動。例如:
我自己也嘗試(沒有成功):
var p = Process.GetProcessesByName("VisualBoyAdvance-M").FirstOrDefault();
if (p == null) return;
IntPtr Hwnd = p.MainWindowHandle;
SetForegroundWindow(Hwnd);
while (true)
{
SendMessage(Hwnd, WindowsAPI.WM_KEYDOWN, uint.MinValue, int.MinValue);
Thread.Sleep(3000);
SendMessage(Hwnd, WindowsAPI.WM_KEYUP, uint.MinValue, int.MinValue);
Thread.Sleep(3000);
SendMessage(Hwnd, WindowsAPI.WM_KEYDOWN, uint.MinValue, int.MinValue);
Thread.Sleep(3000);
}
我不知道如何選擇我需要的窗口,並開始發送命令給它。
有什麼建議嗎?
一旦你可以與它交流,你想用模擬器做什麼。您也許可以直接執行您想要的操作,而無需使用正確的庫/模擬器發送鍵盤信號。這是一個[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)的例子,詢問你想解決的問題,而不是你遇到的問題您提出的原始問題解決方案。 –
@ScottChamberlain,我想將它與ircbot集成,以便遠程控制它。問題是我可以發送事件,但只能發送到菜單,而不能發送到遊戲本身。 – Th3B0Y
你似乎沒有努力去找到遊戲窗口。最有可能的是,遊戲與主應用程序窗口在不同的窗口中。使用Spy ++來理解層次結構。而不是SendMessage考慮使用SendInput僞造輸入。在.net中通過SendKeys公開。 –