vrfvrf
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2003-08-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2023回复:9

USB设备连接检测

楼主#
更多 发布于:2003-02-17 19:05
各位好,请教:
1.如何检测USB设备是否与电脑正常连接?最简单有效的方法是?
2.如何知道该设备的驱动已经成功加载?(我想是不是需要先检查一下该设备的相关驱动文件是否在指定目录呢)
hemu
驱动小牛
驱动小牛
  • 注册日期2002-04-10
  • 最后登录2004-06-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-17 19:36
驱动成功加载应该看看控制面板就行了,usb正常运行小程序就行了
vrfvrf
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2003-08-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-17 19:50
谢谢!

但不能让用户去检查控制面板吧,能否由软件自动检测到呢?

运行小程序是用来检测设备功能是否正常,
但如果想由系统自动检测驱动是否加载成功以帮助用户发现问题所在,并提示用户重新安装,那么就需要由系统完成驱动是否成功加载的检测了?
vrfvrf
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2003-08-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-04-01 17:16
我按照以下代码执行,发现不管是什么USB设备接上来或拔掉都会进入BOOL CMainFrame::OnDeviceChange(UINT nEventType, dwData)函数。譬如我接个优盘上来也会。
我试过不管是正确的还是错误的GUID值给它,都是一样现象。
我已经给了GUID值了,理论上来系统应该只当符合该GUID的设备连接变化时才进入OnDeviceChange的啊?
为什么会这样啊??谢谢!

GUID InterfaceClassGuid;
//36FC9E60-C465-11CF-8056-444553540000
InterfaceClassGuid.Data1 = 0X12345678;//0X36FC9E60;
InterfaceClassGuid.Data2 = 0XC465;
InterfaceClassGuid.Data3 = 0X11CF;
InterfaceClassGuid.Data4[0] = 0X80;
InterfaceClassGuid.Data4[1] = 0X56;
InterfaceClassGuid.Data4[2] = 0X44;
InterfaceClassGuid.Data4[3] = 0X45;
InterfaceClassGuid.Data4[4] = 0X53;
InterfaceClassGuid.Data4[5] = 0X54;
InterfaceClassGuid.Data4[6] = 0X00;
InterfaceClassGuid.Data4[7] = 0X00;


 DEV_BROADCAST_DEVICEINTERFACE broadcastInterface;
 ZeroMemory(&broadcastInterface, sizeof(broadcastInterface));
 broadcastInterface.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
 broadcastInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
 broadcastInterface.dbcc_classguid = InterfaceClassGuid
;//GUID_CLASS_USB_DEVICE;

 HDEVNOTIFY hUSBNotify = RegisterDeviceNotification(m_hWnd,
&broadcastInterface, DEVICE_NOTIFY_WINDOW_HANDLE);

rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-04 22:32
在OnDeviceChange里面检测得到的GUID
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
vrfvrf
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2003-08-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-05 09:50
谢谢rayyang2000

我也听说是要在OnDeviceChange里做进一步的检测,但我不知道为什么windows不能只把我Register时传给它的GUID的interface changed的时候才进入该函数呢?否则,register时给GUID有什么意义呢?

在OnDeviceChange里面检测得到的GUID,但譬如对于HID的GUID都一样,但有可能一台电脑上连多个HID设备,那么该如何进一步区分呢?
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-04-06 23:07
确实会得到很多的,要靠自己去分辨。比如storage可以用scsi命令去辨别;如果是自己的设备,可以用自己定义的指令去分辨设备。hid我没有做过,但估计也应该有一些方法。
最笨的方法,就是比较change前后的设备列表了,虽然慢一些,但是个最基本的方法。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
vrfvrf
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2003-08-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-04-10 09:09
谢谢!谢谢!

老大,我怎么给分给你?不过,你的分一定很多了吧,如果你实在不想要了,我也不勉强你啦!呵呵:-)
vrfvrf
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2003-08-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-04-11 14:48
斑竹大人,哦,还有个问题,

我发现,当USB device连接上来或拔走的时候,会多次进入OnDeviceChange :-(
不知如何是好?
当然了,检测其中字串是唯一办法吗?
vrfvrf
驱动牛犊
驱动牛犊
  • 注册日期2002-11-07
  • 最后登录2003-08-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-04-11 15:59
哦,大概是只响应devicetype=5 and GUID is HIDGuid的了
游客

返回顶部