我已经看到很多有关如何使用XInput读取游戏控制器input的信息,但是我真的很想知道连接的控制器的名称。
我如何才能findPC上连接的控制器的名称,或者更具体地说,我正在读取XInput的控制器的名称?
凭据提供程序使用情况:从Windows 10中删除cpuS_UNLOCK_WORKSTATION
第二台显示器全屏窗口
如何订阅内核callback消息?
QueryPerformanceFrequency在使用HPET时是否准确?
我怎样才能读取小型转储?
SymFromAddr使用C#
Linux全局包含path
使用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] 举报,一经查实,本站将立刻删除。