2017-06-30 1 views
1

Ich versuche, den "freundlichen Namen" eines eingesteckten USB-Geräts zu bekommen. Ich verwende die Methode SetupDiGetDeviceRegistryProperty mit der Eigenschaft SPDRP_FRIENDLYNAME, aber die Methode gibt false zurück und setzt den Fehlercode auf ERROR_INVALID_DATA, obwohl alles mit anderen Eigenschaften wie SPDRP_DEVICEDESC oder SPDRP_MFG einwandfrei funktioniert.Wie erhalte ich den Anzeigenamen eines USB-Geräts in Windows?

Ich überprüfte die Registrierung und den Geräte-Manager und der angezeigte Name existiert.

Hat jemand eine Idee?

UPDATE: Was ich bisher versucht:

GUID hidGuid; 
HidD_GetHidGuid(&hidGuid); 

HDEVINFO hDevInfo = SetupDiGetClassDevs(&hidGuid, 0, 0, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE); 

if (INVALID_HANDLE_VALUE == hDevInfo) 
{ 
    AfxMessageBox(CString("SetupDiGetClassDevs(): ") 
     + _com_error(GetLastError()).ErrorMessage(), MB_ICONEXCLAMATION); 
    return; 
} 
SP_DEVINFO_DATA* pspDevInfoData = 
    (SP_DEVINFO_DATA*)HeapAlloc(GetProcessHeap(), 0, sizeof(SP_DEVINFO_DATA)); 
pspDevInfoData->cbSize = sizeof(SP_DEVINFO_DATA); 
for (int i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, pspDevInfoData); i++) 
{ 
    DWORD DataT; 
    DWORD nSize = 0; 
    TCHAR buf[MAX_PATH]; 
if (!SetupDiGetDeviceInstanceId(hDevInfo, pspDevInfoData, buf, sizeof(buf), &nSize)) 
    { 
     AfxMessageBox(CString("SetupDiGetDeviceInstanceId(): ") 
      + _com_error(GetLastError()).ErrorMessage(), MB_ICONEXCLAMATION); 
     break; 
    } 
if (SetupDiGetDeviceRegistryProperty(hDevInfo, pspDevInfoData, 
        SPDRP_FRIENDLYNAME, &DataT, (PBYTE)buf, sizeof(buf), &nSize)) 
    { 
      //display buf 
    } 
else 
    { 
     if (GetLastError() == ERROR_INVALID_DATA) 
     { 
      //display ERROR_INVALID_DATA 
     } 
     if (SetupDiGetDeviceRegistryProperty(hDevInfo, pspDevInfoData, SPDRP_MFG, &DataT, (PBYTE)buf, sizeof(buf), &nSize)) 
     { 
      //display buf 
     } 
     if (SetupDiGetDeviceRegistryProperty(hDevInfo, pspDevInfoData, 
       SPDRP_DEVICEDESC, &DataT, (PBYTE)buf, sizeof(buf), &nSize)) 
     { 
      // display buf 
     } 
    } 
} 

Etwas Ähnliches. Wie gesagt, ich bekomme die Gerätebeschreibung und den Gerätehersteller, aber nicht den freundlichen Namen.

+1

_ „Hat jemand eine Idee?“ _ - Es gibt ein Problem mit Ihrem Code. –

+0

Bitte geben Sie einen Code an, um zu zeigen, was Sie bisher versucht haben. – avojak

Antwort

0

Nicht alle Geräte haben das Attribut SPDRP_FRIENDLYNAME. Wenn das der Fall ist, wird ERROR_INVALID_DATA erwartet, es sagt Ihnen genau das.

Wenn sie es nicht haben, Geräte-Manager GUI verwendet ein anderes für den Anzeigenamen, SPDRP_DEVICEDESC

+0

Wie ich bereits erwähnt habe, gibt es im Geräte-Manager unter dem Attribut "Friendly Name" den tatsächlichen Namen des Geräts, während "Device Description" etwas wie "USB Composite Device" bezeichnet. – dana

+0

@dana Der Geräte-Manager zeigt den SPDRP_FRIENDLYNAME-Wert vom Gerät an. Wenn jedoch keiner vorhanden ist, wird der SPDRP_DEVICEDESC-Wert unter der Bezeichnung "Anzeigename" angezeigt. – Soonts

Verwandte Themen