模拟C#to游戏中的按键

模拟C#to游戏中的按键,c#,c++,keyboard,keypress,simulate,C#,C++,Keyboard,Keypress,Simulate,我试着在另一个窗口中模拟按键,这是一个游戏。不起作用的是: SendKey-以字符串形式发送输入,例如一些文本或其他内容,但不选择ENTER选项卡或其他关键键 输入模拟器-完全浪费时间 SendInput-这也有一些问题。它不能编译,我以前从未使用过它 PostMessage-看起来这两个键几乎相同,它们确实发送文本,但没有其他键,如ENTER TAB或other。如果我想按住键几秒钟,也无法计算wParam的值。这是一个32位十六进制值,其中最后16位似乎是重复数 SendMessage-请

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

  • SendKey-以字符串形式发送输入,例如一些文本或其他内容,但不选择ENTER选项卡或其他关键键
  • 输入模拟器-完全浪费时间
  • SendInput-这也有一些问题。它不能编译,我以前从未使用过它
  • PostMessage-看起来这两个键几乎相同,它们确实发送文本,但没有其他键,如ENTER TAB或other。如果我想按住键几秒钟,也无法计算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) 无法加载文件或程序集“Microsoft.DirectX.DirectInput.dll”或其中一个 它的依赖性。不是有效的Win32应用程序。 (HRESULT的异常:0x800700C1) 我从DirectX SDK工具包2007中引用了它


我正在尝试向另一个实例或句柄发送密钥。C++或C语言任何工作都是好的。

< P>看起来你想在64位的解决方案中加载一个32位DLL,所以请使用64位DLL

< P>看起来你试图在64位的解决方案中加载一个32位DLL,所以请使用64位DLL

首先,改变<代码> WSCAN > <代码> WVK< /Cord>。在填充所需内容之前,最好将对象的内存归零。首先,将
wScan
更改为
wVk
。在填充所需内容之前,最好将对象的内存归零。