2014-02-19 193 views
0

我想將鍵盤事件發送到另一個應用程序,更具體地說,一個遊戲模擬器。控制第三方應用程序

我嘗試過使用User32.dll的許多不同方法。沒有工作,因爲我想。

我有以下窗口:

enter image description here

我試圖與代碼發送數據:

 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); 
     } 

「向下」是對遊戲的向下的命令。當我這樣做時,模擬器應該向下移動箭頭。 當我運行上面的代碼時,模擬器變成活動窗口。但唯一的動作是菜單項,如果我點擊一個。選擇上下移動。例如:

enter image description here

我自己也嘗試(沒有成功):

 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); 
     } 

我不知道如何選擇我需要的窗口,並開始發送命令給它。

有什麼建議嗎?

+0

一旦你可以與它交流,你想用模擬器做什麼。您也許可以直接執行您想要的操作,而無需使用正確的庫/模擬器發送鍵盤信號。這是一個[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)的例子,詢問你想解決的問題,而不是你遇到的問題您提出的原始問題解決方案。 –

+0

@ScottChamberlain,我想將它與ircbot集成,以便遠程控制它。問題是我可以發送事件,但只能發送到菜單,而不能發送到遊戲本身。 – Th3B0Y

+0

你似乎沒有努力去找到遊戲窗口。最有可能的是,遊戲與主應用程序窗口在不同的窗口中。使用Spy ++來理解層次結構。而不是SendMessage考慮使用SendInput僞造輸入。在.net中通過SendKeys公開。 –

回答

0

嘗試使用WINAPI SendMessage函數發送WM_CHAR或WM_KEYDOWN/WM_KEYUP事件。

+0

我剛剛將帖子更改爲更簡單的模擬器,但問題是相同的。我無法將這些事件發送到遊戲中。 – Th3B0Y

相關問題