如何在SendInput上使用INPUT_HARDWARE来模拟XBox控制器输入?

Vin*_*rta 8 c++ windows input

到目前为止,我已经能够使用SendInput()函数来模拟鼠标和键盘虚拟键以及使用MOUSEINPUT和扫描键KEYBDINPUT.

我读(在SO上)INPUT_HARDWARE 是用于其他设备而不是鼠标或键盘.我正在尝试使用SendInput()HARDWAREINPUT结构模拟Xbox控制器(或任何可能有帮助的控制器)输入.有可能这样做吗?怎么做得好?

DJm*_*00n 0

根据泄露的WinXP源代码,Win98之后的系统级别上SendInputINPUT_HARDWARE根本不支持事件类型:

case INPUT_HARDWARE:
            if (fCanDiscontinue) {
                /*
                 * Not supported on NT.
                 */
                RIPERR0(ERROR_CALL_NOT_IMPLEMENTED, RIP_WARNING, "xxxSendInput: INPUT_HARDWARE is for 9x only.");
                goto discontinue;
            }
            break;
Run Code Online (Sandbox Code Playgroud)

根据 Wine 源代码,它似乎在一些旧代码中用于 HID 设备支持。

我尝试使用 SendInput() 和 HARDWAREINPUT 结构模拟 Xbox 控制器(或任何控制器,如果这可能有帮助)输入。

最好尝试使用虚拟游戏手柄仿真框架(ViGEmBus) 来实现此目的。它可以模拟 XInput 控制器并经过实战测试。