如何以非弃用方式访问 Windows 上的操纵杆?

Posted

技术标签:

【中文标题】如何以非弃用方式访问 Windows 上的操纵杆?【英文标题】:How do I access the Joystick on windows in a non-deprecated way? 【发布时间】:2016-12-10 15:50:13 【问题描述】:

我想编写一个访问操纵杆的 Windows 应用程序。它只是一个非常简单的应用程序,它读取值并将它们发送到服务器,所以我没有使用任何游戏编程框架。但是,我对使用哪个 API 感到困惑。

我查看了多媒体操纵杆 API,但它被描述为被 DirectInput 取代。所以我查看了 DirectInput,但这也被 XInput 弃用了。 然而,XInput 文档只讨论了 Xbox360 控制器,并表示它不支持“旧版 DirectInput 设备”。

Microsoft 是否已将整个 HID 操纵杆使用类型扔进垃圾箱并放弃支持他们转而支持他们自己的专有控制器产品,还是我遗漏了什么?

【问题讨论】:

我在 Windows 上使用罗技 F710 游戏手柄,它支持 DInput 和 XInput 模式(有一个物理开关)。 XInput 不仅限于微软的产品。 微软已经标记了大部分(如果不是全部)他们的输入堆栈实现“已弃用”,但没有明确的替换声明。我仍然会使用DirectInput 来处理操纵杆输入。 DirectInput 仍然受到积极支持,并且将在可预见的将来提供。或者,您可能想要评估Raw Input,看看它是否也可用于操纵杆输入。没有 DirectX 的所有 COM 基础结构,设置起来更容易一些。 很遗憾,强制反馈(“隆隆声”之外)被归为“传统”。 【参考方案1】:

最常见的解决方案是结合使用 XInput 和 DirectInput,这样您的应用程序就可以正确访问这两种类型的设备。微软甚至提供instructions on how to do this。

请注意,DirectInput 不适用于 Windows 应用商店应用程序,因此如果您打算通过那里分发,那不是一个选项。

XBox 360 控制器等 XInput 设备也可以与 DirectInput 一起使用,但有一些限制。值得注意的是,左右触发器将映射到同一轴而不是独立的,并且振动效果将不可用。

【讨论】:

以上是关于如何以非弃用方式访问 Windows 上的操纵杆?的主要内容,如果未能解决你的问题,请参考以下文章

仅当缩放高于某个值时才显示markerOptions 的优化而非弃用方式

使用非弃用时,应为弃用和非弃用变体调用两次 shouldInterceptRequest

tslint 扩展将订阅的非弃用版本标识为弃用

如何在 Windows 中禁用游戏手柄/操纵杆上的按钮/轴?

以程序的方式操纵NTFS的文件权限

如何以非阻塞方式处理 websocket 数据?