我试图通过Windows应用程序通过Xbox 360 Wireless Controller (报告为Xbox 360 Wireless Receiver for Windows (0x045e:0x0000))使用Windows.Gaming.Input API,但它并不像假定的那样工作。
我得到了Xbox 360 Wireless Controller.事件,然后尝试通过gamepad.GetCurrentReading()读取游戏垫状态,似乎GamepadReading结构对于gamepad.GetCurrentReading()完全没有填充。
我还发现MSVS调试控制台上有一些奇怪的错误消息:
onecoreuap\xbox\devices\api\winrt\pnpdevicewatcher.cpp(500)\Windows.Gaming.Input.dll!00007FFE453AABC7: (caller: 00007FFE453AA367) ReturnHr(1) tid(4e04) 80070006 The handle is invalid.不过,Xbox One Game Controller (0x045e:0x02d1)工作得很好。

我的密码怎么了?还是说这是Windows中的bug?
代码在这里:https://github.com/DJm00n/cppwinrtgamepad
使用Windows101809,MSVS 2017 15.9.9,cppwinrt v1.0.190211.5,Windows v10.0.17763.0,xusb22.sys v10.0.17163.1,xboxgip.sys v10.0.17163.1。
PS:我也尝试了来自https://github.com/microsoft/Windows-universal-samples回购公司的UWP应用程序--而且两个控制器都在其中工作。
发布于 2019-09-04 19:07:34
这是一个众所周知的问题。显然,这是由焦点处理的工作方式引起的。因此,Windows.Gaming.Input基本上不适用于控制台应用程序,但适用于有焦点窗口的Win32或UWP应用程序。
请注意,Xbox控制器为您工作的唯一情况是,这两个用户都是管理员,而且还启用了开发人员模式。否则,它将无法从控制台应用程序中运行。
如果您需要对遗留的Win32控制台应用程序提供游戏控制器支持,则应该使用XINPUT。见这篇博客文章。
发布于 2019-07-31 02:41:39
为了帮助我们更清楚地调查这个问题,请您将您的Visual 2017版本分享给我们好吗?您可以获得版本信息,选择有关的“帮助”->,然后从“关于”对话框的右侧选择“复制信息”。
你能检查一下你是否可以在1903年用SDK 18362复制这个问题吗?
顺便说一下,如果您也可以升级您的项目依赖项,那么您所使用的是Microsoft.Windows.CppWinRT NuGet包的旧版本: 1.0.190211.5。当前的最新稳定版本是v2.0.190722.3。
此外,C++语言标准是在项目属性中设置的,但没有设置值。这应该设置为项目属性下的C++17标准(/std:c++17),-> C/C++ > Language > C++语言标准。
谢谢你的合作。
https://stackoverflow.com/questions/57042069
复制相似问题