首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xbox 360无线控制器在控制台应用程序中不通过C++/WinRT和Windows.Gaming.Input API工作

Xbox 360无线控制器在控制台应用程序中不通过C++/WinRT和Windows.Gaming.Input API工作
EN

Stack Overflow用户
提问于 2019-07-15 14:38:18
回答 2查看 1.2K关注 0票数 1

我试图通过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调试控制台上有一些奇怪的错误消息:

代码语言:javascript
复制
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应用程序--而且两个控制器都在其中工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-04 19:07:34

这是一个众所周知的问题。显然,这是由焦点处理的工作方式引起的。因此,Windows.Gaming.Input基本上不适用于控制台应用程序,但适用于有焦点窗口的Win32或UWP应用程序。

请注意,Xbox控制器为您工作的唯一情况是,这两个用户都是管理员,而且还启用了开发人员模式。否则,它将无法从控制台应用程序中运行。

如果您需要对遗留的Win32控制台应用程序提供游戏控制器支持,则应该使用XINPUT。见这篇博客文章

票数 2
EN

Stack Overflow用户

发布于 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++语言标准。

谢谢你的合作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57042069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档