DirectInput 是否能够判断杆上有哪些轴?
Is DirectInput capable of telling WHICH axes are present on a stick?
我目前正在编写 .Net DirectInput wrapper DLL 以允许基于事件报告来自其他语言的摇杆输入(我正在使用 AutoHotkey)。
我目前使用 SharpDX 读取棒数据,但 SharpDX 似乎只报告 多少 个轴一个棒报告,而不是 哪个 个轴一个棒报告。
例如,一根棍子完全有可能有 7 个轴,但没有 X 轴(您可以通过安装 vJoy 并配置它有哪些轴来看到这一点 - 在 vJoy 配置实用程序中,取消勾选 X 轴。注意 joy.cpl X 轴消失了)。
通过 SharpDX 读取棒帽(使用例如 SharpDX.DirectInput.Joystick.Capabilities.AxeCount
),似乎无法判断缺少的轴是 X。
底层 DirectInput API 是否能够表示此信息,或者我是否必须转到 RawInput 之类的内容才能获取此信息?
所以我自己解决了这个问题。
使用 SharpDX,您可以使用 Joystick.GetObjectPropertiesByName("X")
,其中 "X" 是轴的名称。您可以在 JoystickOffset
上调用 ToString()
以获取轴的名称。
如果您在 try
块中执行此操作,那么如果它击中了锁扣,则该轴不存在于该杆上。
我目前正在编写 .Net DirectInput wrapper DLL 以允许基于事件报告来自其他语言的摇杆输入(我正在使用 AutoHotkey)。
我目前使用 SharpDX 读取棒数据,但 SharpDX 似乎只报告 多少 个轴一个棒报告,而不是 哪个 个轴一个棒报告。
例如,一根棍子完全有可能有 7 个轴,但没有 X 轴(您可以通过安装 vJoy 并配置它有哪些轴来看到这一点 - 在 vJoy 配置实用程序中,取消勾选 X 轴。注意 joy.cpl X 轴消失了)。
通过 SharpDX 读取棒帽(使用例如 SharpDX.DirectInput.Joystick.Capabilities.AxeCount
),似乎无法判断缺少的轴是 X。
底层 DirectInput API 是否能够表示此信息,或者我是否必须转到 RawInput 之类的内容才能获取此信息?
所以我自己解决了这个问题。
使用 SharpDX,您可以使用 Joystick.GetObjectPropertiesByName("X")
,其中 "X" 是轴的名称。您可以在 JoystickOffset
上调用 ToString()
以获取轴的名称。
如果您在 try
块中执行此操作,那么如果它击中了锁扣,则该轴不存在于该杆上。