2012-07-22 54 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