用SetDi系列api获得所有usb设备
来源:互联网 发布:淘宝卖中草药 编辑:程序博客网 时间:2024/06/05 03:06
首先是要引入头文件:
#include <Setupapi.h>//
#include "usbiodef.h"//包含枚举usb设备所需要的guid
#include <cfgmgr32.h>
#include <devguid.h>
#pragma comment(lib, "Setupapi.lib") //导入lib
//获得所有sub设备的集合
m_hDevInfo = SetupDiGetClassDevs(&GUID_DEVINTERFACE_USB_DEVICE, NULL, NULL, DIGCF_DEVICEINTERFACE/* | DIGCF_PRESENT*/);
//m_hDevInfo = SetupDiGetClassDevs(NULL, _T("USB"), NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);
这两种方式是有区别的,第一种只能获得所有的外部设备,第二种可以获得包括usb总线在内的所有sub设备,最后一个参数如果指定DIGCF_PRESENT,则返回的只有当前可用的设备,否则返回全部。
然后用SetupDiEnumDeviceInfo(m_hDevInfo, dwIndex, &m_DevInfoData) 函数依次枚举所有的设备,SetupDiGetDeviceRegistryProperty(m_hDevInfo,&m_DevInfoData,SPDRP_SERVICE,&DataType,(byte*)szDeviceService,_countof(szDeviceService),&BufferSize) 获得你想要的设备的属性值,然后比较对应的属性值,可以判断出当前枚举的设备是否为你想要的设备,如果是,则进行你想要的操作。
CM_Get_Device_ID(m_DevInfoData.DevInst, szDeviceID, BufferSize , 0) 获取设备的ID,然后通过id用CM_Get_DevNode_Status(&nStatus, &Problem, m_DevInfoData.DevInst, 0)获取对应设备的状态,包括是否可用,是否已经被移去等。
如果你想要停用或者启用设备,可以用SetupDiSetClassInstallParams和SetupDiCallClassInstaller实现。顺便提醒一句,某些设备是存在父子关系的,你如果把父设备停了,子设备当然也用不了了,可以用CM_Get_Parent和CM_Get_Child分别获得设备的父系和子代。
用完之后别忘了用SetupDiDestroyDeviceInfoList释放设备集合。
- 用SetDi系列api获得所有usb设备
- Windows下USB磁盘开发系列二:枚举系统中所有USB设备
- 枚举所有USB设备代码
- C++ 获取所有USB设备 列举所有USB设备 列举所有USB HUB
- C++ 获取所有USB设备 列举所有USB设备 列举所有USB HUB
- USB系列:列出你的USB设备
- 用SetUpDi系列函数获得系统设备信息
- 用SetUpDi系列函数获得系统设备信息
- 枚举系统中所有USB HUB设备
- 使用android USB API 无法获取USB设备的解决方法
- USB系列之一:列出你的USB设备
- USB系列之二:读取USB设备的描述符
- USB系列之二:读取USB设备的描述符
- USB系列之二:读取USB设备的描述符
- C#:USB设备枚举(二)设备枚举API
- C#:USB设备枚举(二)设备枚举API
- 应用程序获得USB设备插入或者拔出通知
- 应用程序中如何枚举系统所有USB设备
- 讲解如何进行SNMP MIB的查看
- JS保留小数点,四舍五入
- Linux MIB目录的打开和查看
- arm pc vmlinux的互ping(局域网连通)
- ehcache二级缓存配置(SSH缓存的配置) (转)
- 用SetDi系列api获得所有usb设备
- 55种网页常用技巧(javascript)
- 我的专业,我的未来
- listBOX html实现
- 主键生成策略
- 30款精美的国外企业网站模板 PSD 免费下载
- Extjs 4.0.7 设计复杂窗口的范例
- linux服务安装中某些安装包的依赖
- Tomcat、Jboss、webLogic简介