पर एक प्लग किए गए यूएसबी डिवाइस की विक्रेता आईडी और उत्पाद आईडी कैसे प्राप्त करें I विंडोज प्लेटफार्म पर क्यूटी का उपयोग कर रहा हूं।विंडोज
मैं अपने स्थानीय सिस्टम से एक प्लग किए गए यूएसबी डिवाइस की विक्रेता आईडी और उत्पाद आईडी प्राप्त करना और प्रदर्शित करना चाहता हूं।
यूएसबी डिवाइस से विक्रेता आईडी और उत्पाद आईडी प्राप्त करने के लिए मेरा पूरा स्रोत कोड नीचे दिया गया है।
जब मैं अपना क्यूटी एप्लीकेशन चलाता हूं तो यह मुझे कोई त्रुटि नहीं फेंकता है।
इसलिए मैं यूएसबी डिवाइस को सिस्टम में प्लग करता हूं।
लेकिन मेरे प्रिंट बयान
qDebug()<<pDetData->DevicePath;
नीचे के रूप में परिणाम प्रदर्शित करता है मैं 0x4
के रूप में परिणाम प्राप्त चाहे मैं अपने स्रोत कोड में किसी भी क्रियान्वयन संबंधी गलतियों है?
.. यदि ऐसा है तो मेरा मार्गदर्शन कृपया मैं गलत क्या कर रहा हूँ
मैं किसी भी अन्य कार्यों से चूक गए है?
क्या मेरे स्रोत कोड के आधार पर यूएसबी डिवाइस से विक्रेता आईडी और उत्पाद आईडी प्राप्त करना संभव है। (कोड का मेरा कार्यान्वयन)?
कृपया
static GUID GUID_DEVINTERFACE_USB_DEVICE = { 0xA5DCBF10L, 0x6530, 0x11D2,
{ 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } };
HANDLE hInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_USB_DEVICE,NULL,NULL,
DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if (hInfo == INVALID_HANDLE_VALUE)
{
qDebug()<<"invalid";
}
else
{
qDebug()<<"valid handle";
SP_DEVINFO_DATA DeviceInfoData;
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
SP_INTERFACE_DEVICE_DATA Interface_Info;
Interface_Info.cbSize = sizeof(Interface_Info);
BYTE Buf[1024];
DWORD i;
DWORD InterfaceNumber= 0;
PSP_DEVICE_INTERFACE_DETAIL_DATA pspdidd =
(PSP_DEVICE_INTERFACE_DETAIL_DATA) Buf;
for (i=0;SetupDiEnumDeviceInfo(hInfo,i,&DeviceInfoData);i++)
{
DWORD DataT;
LPTSTR buffer = NULL;
DWORD buffersize = 0;
while (!SetupDiGetDeviceRegistryProperty(hInfo,
&DeviceInfoData,
SPDRP_DEVICEDESC,
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
// Change the buffer size.
if (buffer) LocalFree(buffer);
buffer = (LPTSTR)LocalAlloc(LPTR,buffersize);
}
else
{
// Insert error handling here.
break;
}
qDebug()<<(TEXT("Device Number %i is: %s\n"),i, buffer);
if (buffer) LocalFree(buffer);
if (GetLastError() != NO_ERROR
&& GetLastError() != ERROR_NO_MORE_ITEMS)
{
// Insert error handling here.
qDebug()<<"return false";
}
InterfaceNumber = 0; // this just returns the first one, you can iterate on this
if (SetupDiEnumDeviceInterfaces(hInfo,
NULL,
&GUID_DEVINTERFACE_USB_DEVICE,
InterfaceNumber,
&Interface_Info))
{
printf("Got interface");
DWORD needed;
pspdidd->cbSize = sizeof(*pspdidd);
SP_DEVICE_INTERFACE_DETAIL_DATA *pDetData = NULL;
DWORD dwDetDataSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA)
+ 256;
SetupDiGetDeviceInterfaceDetail(hInfo,
&Interface_Info, pDetData,dwDetDataSize, NULL,
&DeviceInfoData);
qDebug()<<pDetData->DevicePath;
//qDebug()<<QString::fromWCharArray(pDetData->DevicePath);
}
else
{
printf("\nNo interface");
//ErrorExit((LPTSTR) "SetupDiEnumDeviceInterfaces");
if (GetLastError() == ERROR_NO_MORE_ITEMS)
printf(", since there are no more items found.");
else
printf(", unknown reason.");
}
// Cleanup
SetupDiDestroyDeviceInfoList(hInfo);
qDebug()<<"return true";
}
}
}
नीचे मेरी स्रोत कोड को खोजने --------------- जोड़ने के लिए संपादित: ------------- ----
हाय ... आवेदन आता है और प्रिंट इस
\? \ USB # vid_04f2 & pid_0111 # 5 & 1ba5a77f 2 # {a5dcbf 1 0-6530-11d2-901f-00c04fb951ed}
फिर यह पाश जबकि को जाता है .... यहाँ यह किसी बयान में breaked हो जाता है ...
क्यूटी कोड:
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) {
// Change the buffer size.
if (buffer) LocalFree(buffer);
buffer = (LPTSTR)LocalAlloc(LPTR,buffersize);
} else {
qDebug()<<"Here it quits the application";
// Insert error handling here. break;
}
इसमें कोई विचार ....
यदि आप इसे पढ़ना चाहते हैं तो आपको कोड की इस दीवार को बेहतर तरीके से प्रारूपित करने की आवश्यकता होगी। –
मैं कोड पुन: स्वरूपित ... – egrunin
मैं अपने जवाब (नीचे) पर अपनी टिप्पणी की नकल की और अपने प्रश्न का यह संलग्न (जहां यह अंतर्गत आता है) – egrunin