Thank you all for the reply
what about trying with win32 api or WMI.
Thank you all for the reply
what about trying with win32 api or WMI.
Dear all,
Kindly find my code which i wrote to get get vendor id and product id of a USB device on windows system
// Creates or opens a file or I/O device.
HANDLE hDevice = CreateFile(TEXT("\\\\.\\G:"), // drive to open
0, // no access to the drive
FILE_SHARE_READ | // share mode
FILE_SHARE_WRITE,
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL);
PUSB_DEVICE_DESCRIPTOR pDevDesc;
DeviceIoControl(hDevice,// device handle
IOCTL_USB_GET_NODE_CONNECTION_INFORMATION , // info of device property
NULL,
0,
pDevDesc, sizeof(PUSB_DEVICE_DESCRIPTOR), // output data buffer
&dwOutBytes, // out's length
(LPOVERLAPPED)NULL);
qDebug ()<<pDevDesc->iManufacturer;
qDebug ()<<pDevDesc->idProduct;
qDebug ()<<pDevDesc->bLength;
qDebug ()<<pDevDesc->idVendor;
qDebug ()<<pDevDesc->iSerialNumber;
when i print this i get the below output
0
0
3
0
13
are the above output are correct?
if not how can i achive this please guide me i need to get vendor id and product id from the connected usb device?
Any info would be great help
Thank you for your time.
Device Manager and right click the device. Windows will show you the VID and PID of the device so you can compare.
But the above seems incorrect.
What are you trying to do exactly? If it's to notice when a device is inserted or removed, there is buildin APIs for this and you will then get a message telling you when a device is inserted or removed - no need to do it yourself. Eg. Look at WM_DEVICECHANGE
To be specific , my application has to display the vendor id and product id of a usb device
Any suggestions on this...
I'd start with SetupDiGetClassDevs()
newb (28th May 2010)
Thank you fatjuicymole for your reply.
i did tried that do .
below is the code i tried.
HANDLE h = SetupDiGetClassDevs(&GUID_CLASS_COMPORT,NULL,NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
if ( h == INVALID_HANDLE_VALUE )
{
qDebug ()<<"invalid";
}
else
{
qDebug ()<<"valid handle";
qDebug ()<<h;
}
Handle is valid .
can you please lead me further to proceed.
Sorry to be annoying because i am very to new Qt and windows programming
Thank you for your time.
So your only looking for serial ports?
For the usb device i need to get the device informations
Any helps please
The code you have written above will only get devices of type 'serial port'. Is that what you want?
does the manufacturer of that particular device you are interested in provide some sort of API?
For example FTDI provides an API free of charge for their USB devices.
Hello fatjuicymole...
please find my code
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";
qDebug ()<<hInfo;
}
SP_DEVINFO_DATA DeviceInfoData;
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
SP_INTERFACE_DEVICE_DATA Interface_Info;
Interface_Info.cbSize = sizeof(Interface_Info);
//
DWORD i;
DWORD InterfaceNumber= 0;
for (i=0;SetupDiEnumDeviceInfo(hInfo,i,&DeviceInfoData );i++)
{
DWORD DataT;
LPTSTR buffer = NULL;
DWORD buffersize = 0;
while (!SetupDiGetDeviceRegistryProperty( hInfo,&DeviceInfoData,SPDRP_DEVICEDESC,&DataT,(PBY TE)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 ()<<"hhhh";
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
//DeviceInterfaceData.cbSize = sizeof(DeviceInterfaceData);
if (SetupDiEnumDeviceInterfaces(hInfo,NULL,&GUID_DEVI NTERFACE_USB_DEVICE,InterfaceNumber,&Interface_Inf o))
{
printf("\nGot interface");
DWORD needed;
h = SetupDiGetDeviceInterfaceDetail(hInfo, &Interface_Info, NULL, 0, &needed,&DeviceInfoData);
//qDebug ()<<Interface_Info.InterfaceClassGuid;
}
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";
//
}
}
Does this code seem correct?
i dont know how to get the information from the device
please lead me further..
Thank you
Last edited by newb; 29th May 2010 at 08:11.
Once you have SetupDiGetDeviceInterfaceDetail working ok, you have the vid and pid already
However, you are saying you don't want the information as your passing NULL to that function.
Bookmarks