2012-07-22 102 views
0

我試圖模擬一個按鍵到另一個窗口,這是一個遊戲。不工作的事情是:在C#中模擬KeyPress到遊戲

  • SendKey - 發送輸入像一些文本什麼的字符串,但不會去ENTER TAB或其他關鍵鍵
  • InputSimulator - 時間
  • 完全是浪費
  • SendInput - 也有一些問題。它不會編譯,我從來沒有用過它
  • PostMessage - 看起來這兩個幾乎是一樣的,他們再次發送文本,但沒有其他鍵,如ENTER鍵或其他鍵。也不能找出wParam的值,如果我想按住幾秒鐘的關鍵。它是一個32位十六進制值,其中最後16個似乎是重複數。如果有人知道如何做到這一點,AUTOIT或AHK似乎有麻煩被整合到C#中,這將非常有幫助,這意味着我可以在C#中編寫AHK腳本, .cs文件,以便編譯。 COM,ref或其他任何東西。

與DirectInput的有問題

public void Test_KeyDown() 
{ 
     INPUT[] InputData = new INPUT[2]; 
     Key ScanCode = Microsoft.DirectX.DirectInput.Key.W; 

     InputData[0].type = 1; //INPUT_KEYBOARD 
     InputData[0].ki.wScan = (short)VirtualKeyCode.NUMPAD2 ; //ScanCode; 
     InputData[0].ki.dwFlags = (int)KEYEVENTF.SCANCODE; 

     InputData[1].type = 1; //INPUT_KEYBOARD 
     InputData[1].ki.wScan = (short)VKeys.VK_W; 
     InputData[1].ki.dwFlags = (int)(KEYEVENTF.KEYUP | KEYEVENTF.UNICODE); 

     // send keydown 
     if (SendInput(2, InputData, Marshal.SizeOf(InputData[1])) == 0) 
     { 
      System.Diagnostics.Debug.WriteLine("SendInput failed with code: " + 
      Marshal.GetLastWin32Error().ToString()); 
     } 
} 

它給這個錯誤:

 
Could not load file or assembly 'Microsoft.DirectX.DirectInput.dll' or one of 
its dependencies. is not a valid Win32 application. 
(Exception from HRESULT: 0x800700C1) 

我從DirectX SDK中的工具包中引用其2007年

我想送另一個實例或句柄的關鍵。 C++或C#的任何工作也很好。

+0

首先,改變'wScan'到'wVk'。在填充所需內容之前,最好將對象的內存歸零。 – chris 2012-07-22 09:15:30

回答

0

貌似你試圖在64位解決方案來加載DLL 32位,所以請使用64位的DLL

+0

我會試一試 – 2012-07-28 16:21:16