C++ 如何获取游戏控制器名称(Windows 10/C+;+;)
我已经看到了很多关于如何使用XInput读取游戏控制器输入的信息,但是我真的很想知道连接的控制器的名称C++ 如何获取游戏控制器名称(Windows 10/C+;+;),c++,windows,xinput,C++,Windows,Xinput,我已经看到了很多关于如何使用XInput读取游戏控制器输入的信息,但是我真的很想知道连接的控制器的名称 如何查找PC上已连接控制器的名称,或者更具体地说,如何查找我正在读取XInput的控制器的名称?您可以通过调用函数来完成此操作,该函数返回包含已连接控制器的所有信息(包括名称)的结构。您可以使用DirectInput获取设备的名称。您需要使用回调来执行此操作: pDirectInput->EnumDevices(DI8DEVCLASS\u GAMECTRL、EnumJoystickCallb
如何查找PC上已连接控制器的名称,或者更具体地说,如何查找我正在读取XInput的控制器的名称?您可以通过调用函数来完成此操作,该函数返回包含已连接控制器的所有信息(包括名称)的结构。您可以使用DirectInput获取设备的名称。您需要使用回调来执行此操作: pDirectInput->EnumDevices(DI8DEVCLASS\u GAMECTRL、EnumJoystickCallbackStatus和joynum、DIEDFL\u附件) 然后你必须有点创造性:启动时使用回调检测所有设备,并存储它们的名称/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;
}
BOOL回调EnumJoystickCallbackStatus(LPCDIDEVICEINSTANCE pdevinst,LPVOID pref)
{
DWORD devtype=获取设备类型(pdevinst->dwDevType);
DWORD SUBSTYPE=GET_DIDEVICE_subtype(pdevinst->dwDevType);
if(devtype==DI8DEVTYPE|键盘| |(devtype==DI8DEVTYPE|补充&&subtype==DI8DEVTYPE补充|未知)){
返回DIENUM_继续;
}
ULONG*pjoynum=重新解释铸造(pref);
if(IsXInputDevice(&pdevinst->guidProduct)){
//循环浏览已知设备,查看此GUI是否已经存在
//我们正在寻找一个我们还不知道的。
如果(!found){
//将GUI/Name/…存储在某些全局控制器阵列中
返回DIENUM_STOP;//完成
}
}
调试信息(调试::XDF_常规,“继续”);
返回DIENUM_继续;
}
请注意,如果您有多个xbox控制器,您将分别收到每个控制器的回调
IsXInputDevice的实现可以在MSDN中找到:如何将joyGetDevCaps中的名称匹配到正确的XInput设备?