我有一个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/

10-16 13:49