在C#中模拟KeyPress到游戏

时间:2012-07-22 09:13:53

标签: c# c++ keyboard keypress simulate

我正在尝试将按键模拟到另一个窗口,这是一个游戏。不起作用的是:

  • SendKey - 将输入作为字符串发送,如某些文字或其他内容,但不会用于输入TAB或其他关键键
  • InputSimulator - 完全浪费时间
  • SendInput - 也有一些问题。它没有编译,我以前从未使用它
  • PostMessage - 看起来这两个几乎是相同的,他们再次发送文本,但再没有其他键,如ENTER TAB或其他。如果我想按住键几秒钟,也无法弄清wParam的值。它是一个32位十六进制值,其中最后16个是重复数。
  • SendMessage - 请参阅PostMessage
  • AUTOIT或AHK似乎他们有麻烦被纳入C#如果有人知道如何做到这一点,这将有很大帮助,这意味着我将能够在C#.cs文件中编写AHK脚本以便编译。 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#任何有效的东西都可以。

1 个答案:

答案 0 :(得分:0)

看起来你正试图在64位解决方案中加载32位dll,所以请使用64位dll