微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取游戏控制器名称Windows 10 / C ++

我已经看到很多有关如何使用XInput读取游戏控制器input的信息,但是我真的很想知道连接的控制器的名称

我如何才能findPC上连接的控制器的名称,或者更具体地说,我正在读取XInput的控制器的名称

凭据提供程序使用情况:从Windows 10中删除cpuS_UNLOCK_WORKSTATION

第二台显示器全屏窗口

如何订阅内核callback消息?

QueryPerformanceFrequency在使用HPET时是否准确?

我怎样才能读取小型转储?

SymFromAddr使用C#

Linux全局包含path

如何使用最less的代码行将C结构存储在可读的文件中?

使用c#在远程Windows服务器上创build本地用户

我得到一个奇怪的错误错误LNK2001:无法parsing的外部符号_deflateEnd在VC ++请帮助

您可以通过调用joyGetDevCaps函数来执行此操作,该函数返回包含所连接控制器的所有信息(包括名称)的JOYCAPS结构。

您可以使用DirectInput获取设备的名称。 你需要使用回调来做到这一点:

pDirectInput-> EnumDevices(DI8DEVCLASS_GAMECTRL,EnumJoystickCallbackStatus,&joynum,DIEDFL_ATTACHEDONLY);

然后,你必须有一点创意:在启动检测所有使用回调的设备,并存储他们的名字/ GUID …然后当一个设备是热插拔(你用XInputGetState检测)寻找设备,还不知道这个早期回调的修改版本,类似这样的:

BOOL CALLBACK EnumJoystickCallbackStatus(LPCDIDEVICEINSTANCE pdevinst,LPVOID pref) { DWORD devtype = GET_DIDEVICE_TYPE(pdevinst->dwDevType); DWORD subtype = GET_DIDEVICE_SUBTYPE(pdevinst->dwDevType); if (devtype == DI8DEVTYPE_KEYBOARD || (devtype == DI8DEVTYPE_SUPPLEMENTAL && subtype == DI8DEVTYPESUPPLEMENTAL_UNKNowN)) { return DIENUM_CONTINUE; } ULONG* pjoynum = reinterpret_cast<ULONG*>(pref); if (IsXInputDevice(&pdevinst->guidProduct)) { // loop through your kNown devices and see if this GUI already exists // we are looking for one which we don't kNow about yet. if (!found) { // store GUI / Name / ... in some global controllers-array return DIENUM_STOP; // done } } DEBUG_INFO(Debug::XDF_General,"continue"); return DIENUM_CONTINUE; }

请注意,如果您有多个xBox控制器,您将分别为每个xBox控制器回调。

可以在MSDN中找到IsXInputDevice的实现: https ://msdn.microsoft.com/en-us/library/windows/desktop/ee417014(v=vs.85).aspx

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐