Tag: directinput

在DirectInput应用程序中使用SendInput API模拟键盘

我正在尝试为自定义游戏控制器应用程序模拟键盘命令。 因为我需要在DirectInput环境中模拟命令,所以大多数常用方法都不起作用。 我知道使用一个钩子可以100%工作,但我正在努力找到一个更简单的实现。 我已经做了很多搜索,发现通过使用带有Scancodes而不是虚拟键的SendInput API应该可以工作,但它似乎表现得像键是“坚持”。 我已经发送了KEYDOWN和KEYUP事件,但是当我尝试在DirectInput环境中发送消息时,游戏就像按下键一样。 例如,如果我模拟“W”按键并将该键映射到第一人称射击游戏中以“向前移动”动作,一旦我在游戏中,下面的函数将使角色向前移动。 但是,只需发出一次命令,它就会无限期地移动角色。 这是我正在调用的SendInput函数的代码片段(在C#中): [DllImport(“user32.dll”)] static extern UInt32 SendInput(UInt32 nInputs, [MarshalAs(UnmanagedType.LPArray, SizeConst = 1)] INPUT[] pInputs, Int32 cbSize); public static void Test_KeyDown() { INPUT[] InputData = new INPUT[2]; Key ScanCode = Microsoft.DirectX.DirectInput.Key.W; InputData[0].type = 1; //INPUT_KEYBOARD InputData[0].wScan = (ushort)ScanCode; InputData[0].dwFlags = (uint)SendInputFlags.KEYEVENTF_SCANCODE; InputData[1].type = 1; //INPUT_KEYBOARD InputData[1].wScan = (ushort)ScanCode; InputData[1].dwFlags […]