如何打开usb设备(不通过guid)——分不是问题 通过SetupDIxxxx系列API来查询所有usb设备的实例名称,这个名称是内部唯一的,里面用实例ID区分不同的设备,使用CreateFile打开这个实例名称即可 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 usbview这个demo中的函数好像部分已经被废弃了——msdn中已经查不到文档,而是推荐用setupDi…系列函数其实用guid来查找特定(你关心)的设备还是非常好用的。SetupDiGetClassDevs获取你关心的设备的信息,他会查找当前所有连接到usb端口上的设备,并返回一个HDEVINFO,里面存放的就是所有你关心的设备的信息然后可以用SetupDiEnumDeviceInterfaces来获取其中一个设备的信息再用SetupDiGetInterfaceDeviceDetail来获取设备信息的数据到一个SP_INTERFACE_DEVICE_DETAIL_DATA结构体中PSP_INTERFACE_DEVICE_DETAIL_DATA中的devicePath就是设备的路径——也就是可以传给CreateFile的“文件名” DEFINE_GUID(GUID_DEVINTERFACE_DISK, 0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b); hDevInfo = SetupDiGetClassDevs((LPGUID)&GUID_DEVINTERFACE_DISK, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); // if (hDevInfo == INVALID_HANDLE_VALUE) // 查询信息失败 { printf("ERROR - SetupDiGetClassDevs()"); // 枚举每个USB设备//-- return 1; } DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (i = 0; SetupDiEnumDeviceInfo( hDevInfo, i, &DeviceInfoData ); i++ ) { ULONG nSize; char buf[256]; if ( SetupDiGetDeviceInstanceId(hDevInfo, &DeviceInfoData, buf, sizeof(buf), &nSize) ) { 这而获得了设备ID ,设备ID是唯一的, //strcpy(g_DEVICEDISK[i].USB_DECR,buf); DWORD DataT; DEVINST devInstParent; CM_Get_Parent(&devInstParent,DeviceInfoData.DevInst, 0); CM_Get_Device_ID(devInstParent, buf, 256, 0); strcpy(g_DEVICEDISK[i].USB_VID_PID,buf); } } SetupDiDestroyDeviceInfoList(hDevInfo); DEFINE_GUID(GUID_DEVINTERFACE_DISK, 0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; DWORD i = 0; hDevInfo = SetupDiGetClassDevs((LPGUID)&GUID_DEVINTERFACE_DISK, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); // if (hDevInfo == INVALID_HANDLE_VALUE) // 查询信息失败 { printf("ERROR - SetupDiGetClassDevs()"); // 枚举每个USB设备//-- return 1; } DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA); for (i = 0; SetupDiEnumDeviceInfo( hDevInfo, i, &DeviceInfoData ); i++ ) { ULONG nSize; char buf[256]; if ( SetupDiGetDeviceInstanceId(hDevInfo, &DeviceInfoData, buf, sizeof(buf), &nSize) ) { //设备实例是唯一的 strcpy(g_DEVICEDISK[i].USB_DECR,buf); DWORD DataT; DEVINST devInstParent; CM_Get_Parent(&devInstParent,DeviceInfoData.DevInst, 0); CM_Get_Device_ID(devInstParent, buf, 256, 0); strcpy(g_DEVICEDISK[i].USB_VID_PID,buf); } } SetupDiDestroyDeviceInfoList(hDevInfo); 哈哈,可以成功吗?据我所知SetupDiEnumDeviceInfo反回设备的接口信息总是失败!而这个GUIDDEFINE_GUID(GUID_DEVINTERFACE_DISK, 0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);是电脑里面硬盘所对应的GUID如果你换成了别的GUID你有试过可以成功吗?高手请解答…… ansi 转换 成 unicode 碰到诸多问题, 关于用共现矩阵求纹理特征参数的小问题。 [win32]如何用api来实现文件对话框?不是MFC 抓狂的feof问题 ADO:添加新记录时如果主键重复怎么办? help 向各高手请教一个关于窗口消息的小问题! 关于学习一门RAD语言的问题…… 如何查出com组件内存泄漏 我想截获某台机器上所有的键盘字符输入,包括汉字,英文字母,标点符号,数字等,并把这些输入存入一文本文件,请教思路. win7 vs2010 操作 excel 2007 编译出错 Bitmap初始化问题
其实用guid来查找特定(你关心)的设备还是非常好用的。
SetupDiGetClassDevs获取你关心的设备的信息,他会查找当前所有连接到usb端口上的设备,
并返回一个HDEVINFO,里面存放的就是所有你关心的设备的信息
然后可以用SetupDiEnumDeviceInterfaces来获取其中一个设备的信息
再用SetupDiGetInterfaceDeviceDetail来获取设备信息的数据到一个SP_INTERFACE_DEVICE_DETAIL_DATA结构体中
PSP_INTERFACE_DEVICE_DETAIL_DATA中的devicePath就是设备的路径——也就是可以传给CreateFile的“文件名”
hDevInfo = SetupDiGetClassDevs((LPGUID)&GUID_DEVINTERFACE_DISK, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); //
if (hDevInfo == INVALID_HANDLE_VALUE) // 查询信息失败
{
printf("ERROR - SetupDiGetClassDevs()"); // 枚举每个USB设备//--
return 1;
}
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i = 0; SetupDiEnumDeviceInfo( hDevInfo, i, &DeviceInfoData ); i++ )
{
ULONG nSize;
char buf[256];
if ( SetupDiGetDeviceInstanceId(hDevInfo, &DeviceInfoData, buf, sizeof(buf), &nSize) )
{ 这而获得了设备ID ,设备ID是唯一的,
//strcpy(g_DEVICEDISK[i].USB_DECR,buf);
DWORD DataT;
DEVINST devInstParent;
CM_Get_Parent(&devInstParent,DeviceInfoData.DevInst, 0);
CM_Get_Device_ID(devInstParent, buf, 256, 0);
strcpy(g_DEVICEDISK[i].USB_VID_PID,buf);
}
}
SetupDiDestroyDeviceInfoList(hDevInfo);
HDEVINFO hDevInfo;
SP_DEVINFO_DATA DeviceInfoData;
DWORD i = 0; hDevInfo = SetupDiGetClassDevs((LPGUID)&GUID_DEVINTERFACE_DISK, 0, 0, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); //
if (hDevInfo == INVALID_HANDLE_VALUE) // 查询信息失败
{
printf("ERROR - SetupDiGetClassDevs()"); // 枚举每个USB设备//--
return 1;
}
DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (i = 0; SetupDiEnumDeviceInfo( hDevInfo, i, &DeviceInfoData ); i++ )
{
ULONG nSize;
char buf[256];
if ( SetupDiGetDeviceInstanceId(hDevInfo, &DeviceInfoData, buf, sizeof(buf), &nSize) )
{ //设备实例是唯一的
strcpy(g_DEVICEDISK[i].USB_DECR,buf);
DWORD DataT;
DEVINST devInstParent;
CM_Get_Parent(&devInstParent,DeviceInfoData.DevInst, 0);
CM_Get_Device_ID(devInstParent, buf, 256, 0);
strcpy(g_DEVICEDISK[i].USB_VID_PID,buf);
}
}
SetupDiDestroyDeviceInfoList(hDevInfo);
DEFINE_GUID(GUID_DEVINTERFACE_DISK, 0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
是电脑里面硬盘所对应的GUID如果你换成了别的GUID你有试过可以成功吗?高手请解答……