社区
C#
帖子详情
c# 如何读取usb的vid,pid.
ekeyang
2009-09-07 11:07:08
本人不会c++,在网上搜了很多,都说用SetupDiGetDeviceInstanceId.可是并不知道怎么使用.
在csdn中看到一篇文章,贴到程序上之后返回的HID class,并不是想要的结果.而且那个博主已经年多没登陆过了.
所以在这求教各位高人了.
需要完整的代码.谢谢.
...全文
3653
33
打赏
收藏
c# 如何读取usb的vid,pid.
本人不会c++,在网上搜了很多,都说用SetupDiGetDeviceInstanceId.可是并不知道怎么使用. 在csdn中看到一篇文章,贴到程序上之后返回的HID class,并不是想要的结果.而且那个博主已经年多没登陆过了. 所以在这求教各位高人了. 需要完整的代码.谢谢.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
33 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
koala_天下
2012-08-29
打赏
举报
回复
想问一下,新连入一个设备怎么查看这个设备的Pid和Vid啊?
yymqt
2011-08-26
打赏
举报
回复
也在找USB相关资料,先试试
洁辉
2011-08-23
打赏
举报
回复
不错哦
loee2007
2011-04-07
打赏
举报
回复
不错哦!
liuhair1314520
2011-03-01
打赏
举报
回复
学习中...
浪子追风
2011-02-26
打赏
举报
回复
一样的纠结啊!试了很多次,在lab/cvi下面就是不行啊!
z510124997
2011-02-25
打赏
举报
回复
一样的纠结中。。
lhh16712
2011-02-16
打赏
举报
回复
有没有好心人,提供一下啊,偶也在求U盘的VID,PID,序列号等信息。这方面应该有专家的哈。
zhouxy1025
2010-11-16
打赏
举报
回复
正在关注这个问题的解决
悟OO道
2010-10-22
打赏
举报
回复
從以上的這幾種方法來看,由於每個方法都是通過對於系統的設備進行掃描然後得出U盤盤符、PID/VID,序列號…等。而且由於這些信息是通過多種方法獲得的,儅計算機連接多個usb設備時,那麽以上的這些信息就無法正確的對應起來,尤其是U盤盤符與其唯一標識Serial Number無法對應,這樣很不利于我們正確的選擇目標usb設備。下面我們來看如何通過U盤盤符找到對應的設備序列號。 第一步,我們仍可以按照方法1种所提到的通過遍歷盤符屬性來找到所有連接到機器上的U盤盤符,然後CreateFile獲得設備句柄。 第二步,在應用DeviceIoControl函數的時候,我們需要引入一個新的查詢方式IOCTL_STORAGE_GET_DEVICE_NUMBER,如STORAGE_DEVICE_NUMBER sdn;DWORD dwBytesReturned = 0;// 用IOCTL_STORAGE_GET_DEVICE_NUMBER取设备號 bResult = ::DeviceIoControl(hDevice, // 设备句柄 IOCTL_STORAGE_GET_DEVICE_NUMBER, // 取设备属性信息 NULL, 0, // 输入数据缓冲区 sdn, sdn ->Size, // 输出数据缓冲区 & dwBytesReturned, // 输出数据地址 (LPOVERLAPPED)NULL); // 用同步I/O DeviceNumber = pDevDesc.DeviceNumber; 這樣我們可以獲得該盤符對應的設備號,同樣我們可以通過QueryDosDevice來找到該盤符對應的dos設備名:QueryDosDevice(szDevicePath, //設備路徑,如:“F:”szDosDeviceName, //查詢返回的dos設備名MAX_PATH); 到現在爲止,我們通過盤符獲得了兩個信息:DeviceNumber,szDosDeviceName。第三步用下面這樣一個函數來找到相應的設備序列號:DEVINST GetDrivesDevInstByDiskNumber (long DiskNumber, char *szDosDeviceName){…//函數的前半部分與方法2种提到的方法相同目的是爲了獲得一個DivicePath;…//注意這裡用到的GUID應該是DiskClassGuid; HANDLE hDrive = CreateFile(pspdidd->DevicePath, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); if ( hDrive != INVALID_HANDLE_VALUE ) { STORAGE_DEVICE_NUMBER sdn; DWORD dwBytesReturned = 0; //通過這樣一個句柄,用同樣的方法也可以得到一個設備號。 res = DeviceIoControl(hDrive,
IOCTL_STORAGE_GET_DEVICE_NUMBER, NULL,
0
&sdn,
sizeof(sdn), &dwBytesReturned, NULL); if ( res ){ //這句是關鍵,通過這兩种方法獲得的.DeviceNumber,進行比較,以DeviceNumber
//作爲橋梁,找到了對應的設備 if ( DiskNumber == (long)sdn.DeviceNumber ) { CloseHandle(hDrive); SetupDiDestroyDeviceInfoList(hDevInfo); return spdd.DevInst; //這裡是來返回一個DeviceInstance。 } } CloseHandle(hDrive); … } Return 0;} 調用以上這個函數,我們獲得了一個DEVINST,這樣我們就可以通過DDK中CM_Get_Device_ID來獲得設備ID:char Buf[MAX_PATH];CM_Get_Device_ID(DevInst,Buf,MAX_PATH,0);其中的Buf中返回的就是DeviceInstanceID,這是一個形如“USBSTOR\DISK&VEN________&PROD_FREEDIK-LWFORMAT&REV_2.23\2004063008241001”的字符串,我們可以看到字符串的最後一串數字就是我們想要得到的SerialNumber。
liufabing
2009-09-27
打赏
举报
回复
libusbdotnet
http://sourceforge.net/projects/libusbdotnet/files/
ekeyang
2009-09-11
打赏
举报
回复
另外过段时间如果把这个问题完全解决,我会在博客中放入我的代码.希望以后有人再遇到这个问题能有个解决办法.
不多说了,结贴.
ekeyang
2009-09-11
打赏
举报
回复
[Quote=引用 19 楼 wangkuang5 的回复:]
引用 16 楼 ekeyang 的回复:
引用 12 楼 wangkuang5 的回复:
我代码可是自动获取的,遍历加载它的事件来读数据
抱歉,你的下载分数太高,我没那么多分,所以下不了.
现在去掉了
[/Quote]
我看了,和我想要的有些差距,另外其实我知道可以调系统的api去弄,可是一碰到托管的那些东西确实有点头大.这个问题先放下,因为还要照顾进度.还是谢谢.
wangkuang5
2009-09-11
打赏
举报
回复
[Quote=引用 16 楼 ekeyang 的回复:]
引用 12 楼 wangkuang5 的回复:
我代码可是自动获取的,遍历加载它的事件来读数据
抱歉,你的下载分数太高,我没那么多分,所以下不了.
[/Quote]
现在去掉了
蒋晟
2009-09-10
打赏
举报
回复
让用户自己选了,设备厂商不太可能写个虚拟设备还要照顾开发人员的需求再写个API让你从USB获得串口端口信息
nixiang12
2009-09-10
打赏
举报
回复
每天回帖即可获得10分可用分
ekeyang
2009-09-10
打赏
举报
回复
[Quote=引用 12 楼 wangkuang5 的回复:]
我代码可是自动获取的,遍历加载它的事件来读数据
[/Quote]
抱歉,你的下载分数太高,我没那么多分,所以下不了.
ekeyang
2009-09-10
打赏
举报
回复
[Quote=引用 14 楼 jiangsheng 的回复:]
USB哪来的端口号……串口才有。
[/Quote]
是usb转串口设备
蒋晟
2009-09-09
打赏
举报
回复
USB哪来的端口号……串口才有。
wolililaile
2009-09-09
打赏
举报
回复
顶
加载更多回复(12)
C#
获取
usb
设备
VID
和
PID
//调用方法:搜索所有
USB
设备..
USB
.Who
Usb
Device(0, 0, Guid.Empty)
C#
已知
USB
的
PID
与
VID
,自动查找
USB
串口号
已知
PID
VID
,自动查找
USB
串口号, 先增加using System.IO.Ports; using System.Management; using Microsoft.VisualBasic; using Microsoft.VisualBasic.CompilerServices;
C#
获取外接
USB
设备信息,包括
VID
,
PID
该项目采用wmi技术开发,界面采用WPF技术
C#
USB
PID
VID
串号
读取
工具
devNotifier = DeviceNotifier.OpenDeviceNotifier(); devNotifier.OnDeviceNotify += devNotifier_OnDeviceNotify;
C#
实现
USB
设备通信
导入hid.dll、setupapi.dll、Kernel32.dll 获取全部的
USB
设备列表 通过比对
VID
、
PID
、Version来识别待连接的
USB
设备 使用CreateFile、WriteFile等接口进行读写 返回消息
读取
为异步方式 VS2017、VS2019
C#
110,579
社区成员
642,559
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章