首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取游戏控制器名称(Windows 10 / C++)

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

Stack Overflow用户
提问于 2016-02-08 20:20:12
回答 2查看 4.8K关注 0票数 6

我看到了很多关于如何使用XInput读取游戏控制器输入的信息,但是我真的想知道连接的控制器的名称。

如何才能找到PC上连接控制器的名称,或者更具体地说是从XInput读取控制器的名称?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-26 13:57:53

可以通过调用joyGetDevCaps函数来实现这一点,该函数返回包含连接控制器的所有信息(包括名称)的乔卡普结构。

票数 2
EN

Stack Overflow用户

发布于 2017-11-24 14:31:37

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

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

然后你必须有点创意:在启动时,检测所有使用回调的设备,并存储它们的名称/GUID.然后,当一个设备是热插拔的(您用XInputGetState检测到)时,查找您还不知道的设备,使用修改后的早期回调版本,类似于以下内容:

代码语言:javascript
运行
复制
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中找到。

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

https://stackoverflow.com/questions/35278546

复制
相关文章

相似问题

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