gpt4 book ai didi

windows - 是否可以获得 XInput 设备的名称、产品 ID、供应商 ID 或其他类型的唯一标识符?

转载 作者:行者123 更新时间:2023-12-04 03:52:39 24 4
gpt4 key购买 nike

通常,XInput Controller 仅使用与 Controller 的玩家编号相对应的索引来标识。有没有办法通过特定索引(例如供应商 ID、产品 ID 或设备名称)获取有关 Controller 的更多信息?
更好的是一个标识符与该 Controller 唯一且一致地对应,以便它可以与所有其他 XInput 设备区分开来,而不管其索引如何,包括另一个具有相同模型(即相同的产品和供应商 ID)的 Controller ,类似于使用 DirectInput 可用的实例 GUID。
这可以使用 XInput 或其他 Microsoft API 来完成吗?如果需要,我也愿意使用未记录的功能。

最佳答案

XInput1_4.dll 中有一些未公开的函数。您可以像这样获取供应商 ID 和产品 ID:

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <Xinput.h>
#include <stdio.h>

struct XINPUT_CAPABILITIES_EX
{
XINPUT_CAPABILITIES Capabilities;
WORD vendorId;
WORD productId;
WORD revisionId;
DWORD a4; //unknown
};

typedef DWORD(_stdcall* _XInputGetCapabilitiesEx)(DWORD a1, DWORD dwUserIndex, DWORD dwFlags, XINPUT_CAPABILITIES_EX* pCapabilities);
_XInputGetCapabilitiesEx XInputGetCapabilitiesEx;

void main()
{
HMODULE moduleHandle = LoadLibrary(TEXT("XInput1_4.dll"));
XInputGetCapabilitiesEx = (_XInputGetCapabilitiesEx)GetProcAddress(moduleHandle, (char*)108);

for (int i = 0; i < 4; ++i)
{
printf("Gamepad %d ", i);

XINPUT_CAPABILITIES_EX capsEx;
if (XInputGetCapabilitiesEx(1, i, 0, &capsEx) == ERROR_SUCCESS)
{
printf("connected, vid = 0x%04X pid = 0x%04X\n", (int)capsEx.vendorId, (int)capsEx.productId);
}
else
{
printf("not connected\n");
}
}
}

关于windows - 是否可以获得 XInput 设备的名称、产品 ID、供应商 ID 或其他类型的唯一标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64251320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com