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

How to use INPUT_HARDWARE on SendInput to simulate an XBox controller input?

提问人:Vinícius 提问时间:1/31/2017 最后编辑:CommunityVinícius 更新时间:6/27/2023 访问量:2436

问:

到目前为止,我已经能够使用 SendInput() 函数来模拟鼠标和键盘虚拟键,并使用 和 扫描键。MOUSEINPUTKEYBDINPUT

我阅读(在 SO 上)是针对其他设备而不是鼠标或键盘的。我正在尝试使用 HARDWAREINPUT 结构模拟 Xbox 控制器(或任何控制器,如果可能有帮助)输入。有可能这样做吗?如何正确地做?INPUT_HARDWARESendInput()

C++ Windows 输入

评论

0赞 Codeguard 2/7/2017
看来SO已经有答案了,看看

答:

0赞 DJm00n 6/23/2023 #1

根据泄露的 WinXP 源代码,Win98 之后的系统级别根本不支持 SendInput 事件类型:INPUT_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;

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

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

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