鼠标,键盘和其他HID设备的唯一标识符

时间:2018-04-13 09:35:30

标签: c++ windows mfc usb mouse

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

1 个答案:

答案 0 :(得分:1)

由于OP澄清他正在寻找HID设备的唯一标识符,我建议尝试使用设备序列号,但不能保证它是唯一的。

在Win32上,您可以使用HidD_GetSerialNumberString功能检索HID设备的序列号。