我有一个MFC应用程序,用于在Windows中查找设备的详细信息。 USB存储设备的PnPID在每个系统中都是唯一的。但是对于鼠标键盘,同一台设备的每台计算机上的PnPID都不相同。有什么方法可以使用C++查找鼠标,键盘和HID的唯一标识符。如果有人知道HID设备或鼠标和键盘的唯一标识符,请分享。这是我的代码。
while(SetupDiEnumDeviceInfo(hDevInfo,lCount++,&DevInfoData))
{
///////////////////////////////////////
DWORD dwDataTypeHardwareid;
LPTSTR pszBufferHardwareid = NULL;
LPTSTR pszBufferPnPid = NULL;
DWORD dwBuffSizeHardwareid = 0;
int iRetValHardwareid = 1;
///////////////////////////////////////
iRetValHardwareid = SetupDiGetDeviceRegistryProperty(hDevInfo, &DevInfoData, SPDRP_HARDWAREID, &dwDataTypeHardwareid, (PBYTE)pszBufferHardwareid, dwBuffSizeHardwareid, &dwBuffSizeHardwareid);
DWORD dwErr = GetLastError();
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
if (pszBufferHardwareid)
LocalFree(pszBufferHardwareid);
//// / //
pszBufferHardwareid = (char *)LocalAlloc(LPTR,dwBuffSizeHardwareid * 2);
iRetValHardwareid=SetupDiGetDeviceRegistryProperty(hDevInfo, &DevInfoData, SPDRP_HARDWAREID, &dwDataTypeHardwareid, (PBYTE)pszBufferHardwareid, dwBuffSizeHardwareid, &dwBuffSizeHardwareid);
}
if(StrStrI(pszBufferHardwareid,"HID\\"))
{
if(StrStrI(pszBufferClass,"Mouse"))
{
CM_Get_Device_ID(DevInfoData.DevInst, pszBufferPnPid, MAX_PATH, 0); //**Not unique in different machines**
CString strDevid = (CString)pszBufferPnPid;
strDevid.Trim();
strDevid.MakeUpper();
SaveDeviceDetails(strDevid); //Method to save device details to DB
}
}
}
最佳答案
由于OP明确表示他正在寻找HID设备的唯一标识符,因此我建议尝试使用设备序列号,尽管不能保证它将唯一。
在Win32上,您可以使用HidD_GetSerialNumberString函数检索HID设备的序列号。
关于c++ - 鼠标,键盘和其他HID设备的唯一标识符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49813777/