C#如何获得USB设备的PID 如题,有代码最好。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有发现C#版本的,下面是我搜索来的,希望对你有帮助。void CGetUDiskDriverDlg::SearchUDISK() { int nCount, len;//标记同一设备个数 HDEVINFO hDevInfoSet; BOOL bResult; char * devicename; char volume[MAX_PATH]; char ch[100]; memset(volume, 0, MAX_PATH); PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail =NULL; // 取得一个该GUID相关的设备信息集句柄 hDevInfoSet = ::SetupDiGetClassDevs((LPGUID)&HARDDISK_GUID,//GUID_CLASS_USB_DEVICE, // class GUID NULL, // 无关键字 NULL, // 不指定父窗口句柄 DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); // 目前存在的设备 // 失败... if (hDevInfoSet == INVALID_HANDLE_VALUE) { return; } // 申请设备接口数据空间 nCount = 0; bResult = TRUE; SP_DEVICE_INTERFACE_DATA ifdata; // 设备序号=0,1,2... 逐一测试设备接口,到失败为止 while (bResult) { ifdata.cbSize = sizeof(ifdata); // 枚举符合该GUID的设备接口 bResult = ::SetupDiEnumDeviceInterfaces( hDevInfoSet, // 设备信息集句柄 NULL, // 不需额外的设备描述 (LPGUID)&HARDDISK_GUID,//GUID_CLASS_USB_DEVICE, // GUID (ULONG)nCount, // 设备信息集里的设备序号 &ifdata); // 设备接口信息 if (bResult) { ULONG predictedLength = 0; ULONG requiredLength = 0; // 取得该设备接口的细节(设备路径) bResult = SetupDiGetInterfaceDeviceDetail( hDevInfoSet, // 设备信息集句柄 &ifdata, // 设备接口信息 NULL, // 设备接口细节(设备路径) 0, // 输出缓冲区大小 &requiredLength, // 不需计算输出缓冲区大小(直接用设定值) NULL); // 不需额外的设备描述 // 取得该设备接口的细节(设备路径) predictedLength=requiredLength; // if(pDetail) // { // pDetail =NULL; // } pDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT, predictedLength); pDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA); bResult = SetupDiGetInterfaceDeviceDetail( hDevInfoSet, // 设备信息集句柄 &ifdata, // 设备接口信息 pDetail, // 设备接口细节(设备路径) predictedLength, // 输出缓冲区大小 &requiredLength, // 不需计算输出缓冲区大小(直接用设定值) NULL); // 不需额外的设备描述 if (bResult) { // 复制设备路径到输出缓冲区 for(int i=0;i<17;i++){ ch[i]=*(pDetail->DevicePath+8+i); } ch[17]='\0'; if (strcmp(ch,"vid_11dd&pid_0101")==0 || strcmp(ch,"vid_11dd&pid_11dd")==0 || strcmp(ch,"vid_0101&pid_0101")==0 || strcmp(ch,"vid_0101&pid_11dd")==0) //比较版本号,防止意外出错 { len = strlen(pDetail->DevicePath); devicename = new char[len]; memset(devicename, 0, len); for(int i=0;i<(len-38);i++) { ch[i]=*(pDetail->DevicePath+i); } ch[len-38]='\0'; memset(volume, 0, MAX_PATH); } } } nCount++; } // 释放设备接口数据空间 ::GlobalFree(pDetail); // 关闭设备信息集句柄 ::SetupDiDestroyDeviceInfoList(hDevInfoSet); }参考答案来源于:bbs.driverdevelop.com我正在使用《Csdn收音机》第一时间获取最新动态! http://topic.csdn.net/u/20090907/11/09a7df49-8ed3-43e6-b239-732f4117b511.html 是吗贴图片很累吧,用《Csdn收音机》截图功能轻松解决! 查询数据的时候总是报异常说数据查询超时时间到了 求 richtextbox 插入表情图片(gif)的方法 请问netmodule与dll的区别是什么? 如何查看TCP数据报头里面的数据 C# 单线程问题 初学者送分问题:关于源码里的几个<T>..... 连接到源文件“G:\MeettingPro\meetingview.aspx.designer.cs”的撤消管理器时出错 经验分享:颜色和颜色不是同样的颜色 TreeView 的AfterLabelEdit事件是这样触发的吗 窗口越来越多,怎么管理才好? 【醒目标题】TreeView排序问题 做一个客服用的“呼叫中心”系统,需要做哪些内容
{
int nCount, len;//标记同一设备个数
HDEVINFO hDevInfoSet;
BOOL bResult;
char * devicename;
char volume[MAX_PATH];
char ch[100]; memset(volume, 0, MAX_PATH); PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail =NULL; // 取得一个该GUID相关的设备信息集句柄
hDevInfoSet = ::SetupDiGetClassDevs((LPGUID)&HARDDISK_GUID,//GUID_CLASS_USB_DEVICE, // class GUID
NULL, // 无关键字
NULL, // 不指定父窗口句柄
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); // 目前存在的设备 // 失败...
if (hDevInfoSet == INVALID_HANDLE_VALUE)
{
return;
} // 申请设备接口数据空间 nCount = 0;
bResult = TRUE; SP_DEVICE_INTERFACE_DATA ifdata;
// 设备序号=0,1,2... 逐一测试设备接口,到失败为止
while (bResult)
{ ifdata.cbSize = sizeof(ifdata);
// 枚举符合该GUID的设备接口
bResult = ::SetupDiEnumDeviceInterfaces(
hDevInfoSet, // 设备信息集句柄
NULL, // 不需额外的设备描述
(LPGUID)&HARDDISK_GUID,//GUID_CLASS_USB_DEVICE, // GUID
(ULONG)nCount, // 设备信息集里的设备序号
&ifdata); // 设备接口信息 if (bResult)
{
ULONG predictedLength = 0;
ULONG requiredLength = 0;
// 取得该设备接口的细节(设备路径)
bResult = SetupDiGetInterfaceDeviceDetail(
hDevInfoSet, // 设备信息集句柄
&ifdata, // 设备接口信息
NULL, // 设备接口细节(设备路径)
0, // 输出缓冲区大小
&requiredLength, // 不需计算输出缓冲区大小(直接用设定值)
NULL); // 不需额外的设备描述
// 取得该设备接口的细节(设备路径)
predictedLength=requiredLength; // if(pDetail)
// {
// pDetail =NULL;
// }
pDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT, predictedLength);
pDetail->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
bResult = SetupDiGetInterfaceDeviceDetail(
hDevInfoSet, // 设备信息集句柄
&ifdata, // 设备接口信息
pDetail, // 设备接口细节(设备路径)
predictedLength, // 输出缓冲区大小
&requiredLength, // 不需计算输出缓冲区大小(直接用设定值)
NULL); // 不需额外的设备描述 if (bResult)
{
// 复制设备路径到输出缓冲区
for(int i=0;i<17;i++){
ch[i]=*(pDetail->DevicePath+8+i);
}
ch[17]='\0';
if (strcmp(ch,"vid_11dd&pid_0101")==0 ||
strcmp(ch,"vid_11dd&pid_11dd")==0 ||
strcmp(ch,"vid_0101&pid_0101")==0 ||
strcmp(ch,"vid_0101&pid_11dd")==0) //比较版本号,防止意外出错
{
len = strlen(pDetail->DevicePath);
devicename = new char[len];
memset(devicename, 0, len);
for(int i=0;i<(len-38);i++)
{
ch[i]=*(pDetail->DevicePath+i);
}
ch[len-38]='\0';
memset(volume, 0, MAX_PATH);
}
}
}
nCount++;
}
// 释放设备接口数据空间
::GlobalFree(pDetail); // 关闭设备信息集句柄
::SetupDiDestroyDeviceInfoList(hDevInfoSet);
}
参考答案来源于:bbs.driverdevelop.com我正在使用《Csdn收音机》第一时间获取最新动态!
是吗贴图片很累吧,用《Csdn收音机》截图功能轻松解决!