当控制器被拔出时,XInputGetKeyStroke返回ERROR_SUCCESS

时间:2014-05-15 04:26:01

标签: directx xinput

当未插入指定的控制器时,XInputGetKeyStroke似乎返回ERROR_SUCCESS,使得提供的XINPUT_KEYSTROKE结构未初始化:

XINPUT_KEYSTROKE xStroke;
DWORD ret = XInputGetKeyStroke(0, 0, &xStroke);
if (ret == ERROR_SUCCESS)
    printf("ERROR_SUCCESS\n");

我做错了什么或者这是XInput中的错误? xinput1_3.dll是我正在使用的版本。我正在编译/链接DirectX 2010 SDK中的头/库。当控制器插入XInputGetKeyStrokes似乎表现得如预期一样。

2 个答案:

答案 0 :(得分:0)

我对xinput1_3.dll有同样的问题,而且从我的研究来看,它似乎没有实现。它可以在Windows 8上的xinput1_4.dll上实现,但我无法测试它。

确认自2014年4月26日起未实施:http://controllermax.com/forums/archive/index.php/t-142531.html

不是最可接受的来源,但我能找到它。

答案 1 :(得分:0)

为XInput 1.3(2007年4月)添加了对XInputGetKeyStroke的支持,但没有Windows驱动程序支持“Chatpad”设备,因此它仅限于控制器“按钮键”。

此功能的来源在XInput 1.3(通过旧版DirectX SDK / DirectSetup在Windows 7上可用的最新版本)和XInput 1.4(Windows 8.x上的当前版本)之间没有变化,所以如果有这是一个错误,它也可能在XInput 1.4上进行重新编译。

这个特殊的API实际上只适用于可能支持“Chatpad”的Xbox 360,并且由于XInput的低级故事,使用XInput 9.1.0而不是XInput 1.3并坚持使用通常更好。无论如何,标准的XInputGetState方法。对于DirectX Tool Kit GamePad类,我根本不使用XInputGetKeyStroke,这可能是一个更有用的抽象。

请参阅XINPUT and Windows 8DirectX Tool Kit: Now with GamePads

更新:我找到了导致此情况的代码路径,并将提交错误,但不太可能为XInput 1.3修复。一种解决方法是使用另一个函数(XInputGetStateXInputGetCapabilities)来检查连接状态,然后仅在连接时调用XInputGetKeyStroke