Как получить имя игрового контроллера (Windows 10 / C ++)

Я видел много информации о том, как читать ввод игрового контроллера, используя XInput, но я действительно хочу знать имя подключенного контроллера.

Игровой контроллер

Как узнать имя подключенных контроллеров на ПК или, более конкретно, название контроллера, с которого я читаю XInput?

4

Решение

Вы можете сделать это, позвонив joyGetDevCaps функция, которая возвращает JOYCAPS структура, содержащая всю информацию (включая имя) подключенного контроллера.

1

Другие решения

Вы можете использовать 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, вы получите обратный вызов для каждого из них в отдельности.

Реализация IsXInputDevice может быть найдена в MSDN: https://msdn.microsoft.com/en-us/library/windows/desktop/ee417014(v=vs.85).aspx

0

По вопросам рекламы [email protected]