2017-06-30 86 views
1

私は、プラグインされたUSBデバイスの「フレンドリーネーム」を取得しようとしています。 SPDRP_FRIENDLYNAMEプロパティでSetupDiGetDeviceRegistryPropertyメソッドを使用していますが、このメソッドはfalseを返し、エラーコードをERROR_INVALID_DATAに設定しますが、SPDRP_DEVICEDESCやSPDRP_MFGなどの他のプロパティでも問題なく動作します。WindowsでUSBデバイスのフレンドリ名を取得するにはどうすればよいですか?

レジストリをチェックしたところ、デバイスマネージャとフレンドリ名が存在します。

誰にも分かりませんか?

UPDATE:私はこれまで試したどのような:このような

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 
     } 
    } 
} 

何か。私が言ったように、私はデバイスの説明とデバイスのメーカーを取得しますが、フレンドリーな名前は取得しません。

+1

_「は、誰もが任意のアイデアを持っていますか?」_ - あなたのコードに問題があります。 –

+0

これまでに試したことを示すコードを入力してください。 – avojak

答えて

0

すべてのデバイスがSPDRP_FRIENDLYNAME属性セットを持っているわけではありません。その場合、ERROR_INVALID_DATAが予想されます。

彼らはそれを持っていない場合は、デバイスマネージャGUIが表示名に別のものを使用しています

SPDRP_DEVICEDESC

+0

私が言及したように、デバイスマネージャではFriendly Name属性の下にデバイスの実際の名前があり、Device DescriptionはUSB Composite Deviceのようなものです。 – dana

+0

@danaデバイスマネージャーはデバイスからSPDRP_FRIENDLYNAMEの値を表示しますが、値がない場合は、その「フレンドリーネーム」ラベルの下にSPDRP_DEVICEDESCの値が表示されます。 – Soonts

関連する問題