i'm trying create program categorize connected usb devices , port guid.
i found example of how information connected input devices:
#include <windows.h> #include <iostream> // namespace using namespace std; // main int main() { // program cout << "usb device lister." << endl; // number of devices uint ndevices = 0; getrawinputdevicelist(null, &ndevices, sizeof(rawinputdevicelist)); // got any? if (ndevices < 1) { // exit cout << "err: 0 devices?"; cin.get(); return 0; } // allocate memory device list prawinputdevicelist prawinputdevicelist; prawinputdevicelist = new rawinputdevicelist[sizeof(rawinputdevicelist) * ndevices]; // got memory? if (prawinputdevicelist == null) { // error cout << "err: not allocate memory device list."; cin.get(); return 0; } // fill device list buffer int nresult; nresult = getrawinputdevicelist(prawinputdevicelist, &ndevices, sizeof(rawinputdevicelist)); // got device list? if (nresult < 0) { // clean delete[] prawinputdevicelist; // error cout << "err: not device list."; cin.get(); return 0; } // loop through device list (uint = 0; < ndevices; i++) { // character count device name uint nbuffersize = 0; nresult = getrawinputdeviceinfo(prawinputdevicelist[i].hdevice, // device ridi_devicename, // device name null, // no buff, want count! &nbuffersize); // char count here! // got device name? if (nresult < 0) { // error cout << "err: unable device name character count.. moving next device." << endl << endl; // next continue; } // allocate memory device name wchar* wcdevicename = new wchar[nbuffersize + 1]; // got memory if (wcdevicename == null) { // error cout << "err: unable allocate memory device name.. moving next device." << endl << endl; // next continue; } // name nresult = getrawinputdeviceinfo(prawinputdevicelist[i].hdevice, // device ridi_devicename, // device name wcdevicename, // name! &nbuffersize); // char count // got device name? if (nresult < 0) { // error cout << "err: unable device name.. moving next device." << endl << endl; // clean delete[] wcdevicename; // next continue; } // set device info & buffer size rid_device_info rdideviceinfo; rdideviceinfo.cbsize = sizeof(rid_device_info); nbuffersize = rdideviceinfo.cbsize; // device info nresult = getrawinputdeviceinfo(prawinputdevicelist[i].hdevice, ridi_deviceinfo, &rdideviceinfo, &nbuffersize); // got buffer? if (nresult < 0) { // error cout << "err: unable read device info.. moving next device." << endl << endl; // next continue; } // mouse if (rdideviceinfo.dwtype == rim_typemouse) { // current device cout << endl << "displaying device " << + 1 << " information. (mouse)" << endl; wcout << l"device name: " << wcdevicename << endl; cout << "mouse id: " << rdideviceinfo.mouse.dwid << endl; cout << "mouse buttons: " << rdideviceinfo.mouse.dwnumberofbuttons << endl; cout << "mouse sample rate (data points): " << rdideviceinfo.mouse.dwsamplerate << endl; if (rdideviceinfo.mouse.fhashorizontalwheel) { cout << "mouse has horizontal wheel" << endl; } else { cout << "mouse not have horizontal wheel" << endl; } } // keyboard else if (rdideviceinfo.dwtype == rim_typekeyboard) { // current device cout << endl << "displaying device " << + 1 << " information. (keyboard)" << endl; wcout << l"device name: " << wcdevicename << endl; cout << "keyboard mode: " << rdideviceinfo.keyboard.dwkeyboardmode << endl; cout << "number of function keys: " << rdideviceinfo.keyboard.dwnumberoffunctionkeys << endl; cout << "number of indicators: " << rdideviceinfo.keyboard.dwnumberofindicators << endl; cout << "number of keys total: " << rdideviceinfo.keyboard.dwnumberofkeystotal << endl; cout << "type of keyboard: " << rdideviceinfo.keyboard.dwtype << endl; cout << "subtype of keyboard: " << rdideviceinfo.keyboard.dwsubtype << endl; } // hid else // (rdi.dwtype == rim_typehid) { // current device cout << endl << "displaying device " << + 1 << " information. (hid)" << endl; wcout << l"device name: " << wcdevicename << endl; cout << "vendor id:" << rdideviceinfo.hid.dwvendorid << endl; cout << "product id:" << rdideviceinfo.hid.dwproductid << endl; cout << "version no:" << rdideviceinfo.hid.dwversionnumber << endl; cout << "usage device: " << rdideviceinfo.hid.ususage << endl; cout << "usage page device: " << rdideviceinfo.hid.ususagepage << endl; } // delete name memory! delete[] wcdevicename; } // clean - free memory delete[] prawinputdevicelist; // exit cout << endl << "finnished."; cin.get(); return 0; }
i tried convert code connected usb devices failed. question best way collect data i'm looking for?
if want usb devices, not "input" devices, need use same apis device manager does.
for example, devices shown device manager can listed of setupdigetclassdevs
function.
for listing usb devices, you'll want use enumerator parameter set "usb"
(the enumerator bus device attached, example can "pci"
, "pcmcia"
, "usb"
main computer busses, , can secondary bus provided expansion device, e.g. "scsi"
, "ftdibus"
, , on). may find you're more interested in child devices usb-attached parent device itself.
Comments
Post a Comment