私は、プラグインされた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
}
}
}
何か。私が言ったように、私はデバイスの説明とデバイスのメーカーを取得しますが、フレンドリーな名前は取得しません。
_「は、誰もが任意のアイデアを持っていますか?」_ - あなたのコードに問題があります。 –
これまでに試したことを示すコードを入力してください。 – avojak