当前位置:  编程技术>.net/c#/asp.net

c#使用wmi查询usb设备信息示例

    来源: 互联网  发布时间:2014-10-28

    本文导语:  开发环境:Visual Studio V2010 .NET Framework 4 Client Profile 代码如下:using System;using System.Management;using System.Text.RegularExpressions;using System.Collections.Generic; namespace Splash.IO.PORTS{/// /// 即插即用设备信息结构/// public struct PnPEntityInfo{public Strin...

开发环境:Visual Studio V2010 .NET Framework 4 Client Profile

代码如下:

using System;
using System.Management;
using System.Text.RegularExpressions;
using System.Collections.Generic;

namespace Splash.IO.PORTS
{
///
/// 即插即用设备信息结构
///
public struct PnPEntityInfo
{
public String PNPDeviceID;  // 设备ID
public String Name; // 设备名称
public String Description;  // 设备描述
public String Service;  // 服务
public String Status;   // 设备状态
public UInt16 VendorID; // 供应商标识
public UInt16 ProductID;// 产品编号
public Guid ClassGuid;  // 设备安装类GUID
}

///
/// 基于WMI获取USB设备信息
///
public partial class USB

#region UsbDevice
///
/// 获取所有的USB设备实体(过滤没有VID和PID的设备)
///
public static PnPEntityInfo[] AllUsbDevices
{
get
{
return WhoUsbDevice(UInt16.MinValue, UInt16.MinValue, Guid.Empty);
}
}

///
/// 查询USB设备实体(设备要求有VID和PID)
///
/// 供应商标识,MinValue忽视
/// 产品编号,MinValue忽视
/// 设备安装类Guid,Empty忽视
/// 设备列表
public static PnPEntityInfo[] WhoUsbDevice(UInt16 VendorID, UInt16 ProductID, Guid ClassGuid)
{
List UsbDevices = new List();

// 获取USB控制器及其相关联的设备实体
ManagementObjectCollection USBControllerDeviceCollection = new ManagementObjectSearcher("SELECT * FROM Win32_USBControllerDevice").Get();
if (USBControllerDeviceCollection != null)
{
foreach (ManagementObject USBControllerDevice in USBControllerDeviceCollection)
{   // 获取设备实体的DeviceID
String Dependent = (USBControllerDevice["Dependent"] as String).Split(new Char[] { '=' })[1];

// 过滤掉没有VID和PID的USB设备
Match match = Regex.Match(Dependent, "VID_[0-9|A-F]{4}&PID_[0-9|A-F]{4}");
if (match.Success)
{
UInt16 theVendorID = Convert.ToUInt16(match.Value.Substring(4, 4), 16);   // 供应商标识
if (VendorID != UInt16.MinValue && VendorID != theVendorID) continue;

UInt16 theProductID = Convert.ToUInt16(match.Value.Substring(13, 4), 16); // 产品编号
if (ProductID != UInt16.MinValue && ProductID != theProductID) continue;

ManagementObjectCollection PnPEntityCollection = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE DeviceID=" + Dependent).Get();
if (PnPEntityCollection != null)
{
foreach (ManagementObject Entity in PnPEntityCollection)
{
Guid theClassGuid = new Guid(Entity["ClassGuid"] as String);// 设备安装类GUID
if (ClassGuid != Guid.Empty && ClassGuid != theClassGuid) continue;

PnPEntityInfo Element;
Element.PNPDeviceID = Entity["PNPDeviceID"] as String;  // 设备ID
Element.Name = Entity["Name"] as String;// 设备名称
Element.Description = Entity["Description"] as String;  // 设备描述
Element.Service = Entity["Service"] as String;  // 服务
Element.Status = Entity["Status"] as String;// 设备状态
Element.VendorID = theVendorID; // 供应商标识
Element.ProductID = theProductID;   // 产品编号
Element.ClassGuid = theClassGuid;   // 设备安装类GUID

UsbDevices.Add(Element);
}
}
}
}
}

if (UsbDevices.Count == 0) return null; else return UsbDevices.ToArray();
}

///
/// 查询USB设备实体(设备要求有VID和PID)
///
/// 供应商标识,MinValue忽视
/// 产品编号,MinValue忽视
/// 设备列表
public static PnPEntityInfo[] WhoUsbDevice(UInt16 VendorID, UInt16 ProductID)
{
return WhoUsbDevice(VendorID, ProductID, Guid.Empty);
}

///
/// 查询USB设备实体(设备要求有VID和PID)
///
/// 设备安装类Guid,Empty忽视
/// 设备列表
public static PnPEntityInfo[] WhoUsbDevice(Guid ClassGuid)
{
return WhoUsbDevice(UInt16.MinValue, UInt16.MinValue, ClassGuid);
}

///
/// 查询USB设备实体(设备要求有VID和PID)
///
/// 设备ID,可以是不完整信息
/// 设备列表
public static PnPEntityInfo[] WhoUsbDevice(String PNPDeviceID)
{
List UsbDevices = new List();

// 获取USB控制器及其相关联的设备实体
ManagementObjectCollection USBControllerDeviceCollection = new ManagementObjectSearcher("SELECT * FROM Win32_USBControllerDevice").Get();
if (USBControllerDeviceCollection != null)
{
foreach (ManagementObject USBControllerDevice in USBControllerDeviceCollection)
{   // 获取设备实体的DeviceID
String Dependent = (USBControllerDevice["Dependent"] as String).Split(new Char[] { '=' })[1];
if (!String.IsNullOrEmpty(PNPDeviceID))
{   // 注意:忽视大小写
if (Dependent.IndexOf(PNPDeviceID, 1, PNPDeviceID.Length - 2, StringComparison.OrdinalIgnoreCase) == -1) continue;
}

// 过滤掉没有VID和PID的USB设备
Match match = Regex.Match(Dependent, "VID_[0-9|A-F]{4}&PID_[0-9|A-F]{4}");
if (match.Success)
{
ManagementObjectCollection PnPEntityCollection = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE DeviceID=" + Dependent).Get();
if (PnPEntityCollection != null)
{
foreach (ManagementObject Entity in PnPEntityCollection)
{
PnPEntityInfo Element;
Element.PNPDeviceID = Entity["PNPDeviceID"] as String;  // 设备ID
Element.Name = Entity["Name"] as String;// 设备名称
Element.Description = Entity["Description"] as String;  // 设备描述
Element.Service = Entity["Service"] as String;  // 服务
Element.Status = Entity["Status"] as String;// 设备状态
Element.VendorID = Convert.ToUInt16(match.Value.Substring(4, 4), 16);   // 供应商标识  
Element.ProductID = Convert.ToUInt16(match.Value.Substring(13, 4), 16); // 产品编号 // 产品编号
Element.ClassGuid = new Guid(Entity["ClassGuid"] as String);// 设备安装类GUID

UsbDevices.Add(Element);
}
}
}
}
}

if (UsbDevices.Count == 0) return null; else return UsbDevices.ToArray();
}

///
/// 根据服务定位USB设备
///
/// 要查询的服务集合
/// 设备列表
public static PnPEntityInfo[] WhoUsbDevice(String[] ServiceCollection)
{
if (ServiceCollection == null || ServiceCollection.Length == 0)
return WhoUsbDevice(UInt16.MinValue, UInt16.MinValue, Guid.Empty);

List UsbDevices = new List();

// 获取USB控制器及其相关联的设备实体
ManagementObjectCollection USBControllerDeviceCollection = new ManagementObjectSearcher("SELECT * FROM Win32_USBControllerDevice").Get();
if (USBControllerDeviceCollection != null)
{
foreach (ManagementObject USBControllerDevice in USBControllerDeviceCollection)
{   // 获取设备实体的DeviceID
String Dependent = (USBControllerDevice["Dependent"] as String).Split(new Char[] { '=' })[1];

// 过滤掉没有VID和PID的USB设备
Match match = Regex.Match(Dependent, "VID_[0-9|A-F]{4}&PID_[0-9|A-F]{4}");
if (match.Success)
{
ManagementObjectCollection PnPEntityCollection = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE DeviceID=" + Dependent).Get();
if (PnPEntityCollection != null)
{
foreach (ManagementObject Entity in PnPEntityCollection)
{
String theService = Entity["Service"] as String;  // 服务
if (String.IsNullOrEmpty(theService)) continue;

foreach (String Service in ServiceCollection)
{   // 注意:忽视大小写
if (String.Compare(theService, Service, true) != 0) continue;

PnPEntityInfo Element;
Element.PNPDeviceID = Entity["PNPDeviceID"] as String;  // 设备ID
Element.Name = Entity["Name"] as String;// 设备名称
Element.Description = Entity["Description"] as String;  // 设备描述
Element.Service = theService;   // 服务
Element.Status = Entity["Status"] as String;// 设备状态
Element.VendorID = Convert.ToUInt16(match.Value.Substring(4, 4), 16);   // 供应商标识  
Element.ProductID = Convert.ToUInt16(match.Value.Substring(13, 4), 16); // 产品编号
Element.ClassGuid = new Guid(Entity["ClassGuid"] as String);// 设备安装类GUID

UsbDevices.Add(Element);
break;
}
}
}
}
}
}

if (UsbDevices.Count == 0) return null; else return UsbDevices.ToArray();
}
#endregion

#region PnPEntity
///
/// 所有即插即用设备实体(过滤没有VID和PID的设备)
///
public static PnPEntityInfo[] AllPnPEntities
{
get
{
return WhoPnPEntity(UInt16.MinValue, UInt16.MinValue, Guid.Empty);
}
}

///
/// 根据VID和PID及设备安装类GUID定位即插即用设备实体
///
/// 供应商标识,MinValue忽视
/// 产品编号,MinValue忽视
/// 设备安装类Guid,Empty忽视
/// 设备列表
///
/// HID:{745a17a0-74d3-11d0-b6fe-00a0c90f57da}
/// Imaging Device:{6bdd1fc6-810f-11d0-bec7-08002be2092f}
/// Keyboard:{4d36e96b-e325-11ce-bfc1-08002be10318}
/// Mouse:{4d36e96f-e325-11ce-bfc1-08002be10318}
/// Network Adapter:{4d36e972-e325-11ce-bfc1-08002be10318}
/// USB:{36fc9e60-c465-11cf-8056-444553540000}
///
public static PnPEntityInfo[] WhoPnPEntity(UInt16 VendorID, UInt16 ProductID, Guid ClassGuid)
{
List PnPEntities = new List();

// 枚举即插即用设备实体
String VIDPID;
if (VendorID == UInt16.MinValue)
{
if (ProductID == UInt16.MinValue)
VIDPID = "'%VID[_]____&PID[_]____%'";
else
VIDPID = "'%VID[_]____&PID[_]" + ProductID.ToString("X4") + "%'";  
}
else
{
if (ProductID == UInt16.MinValue)
VIDPID = "'%VID[_]" + VendorID.ToString("X4") + "&PID[_]____%'";
else
VIDPID = "'%VID[_]" + VendorID.ToString("X4") + "&PID[_]" + ProductID.ToString("X4") + "%'";
}

String QueryString;
if (ClassGuid == Guid.Empty)
QueryString = "SELECT * FROM Win32_PnPEntity WHERE PNPDeviceID LIKE" + VIDPID;
else
QueryString = "SELECT * FROM Win32_PnPEntity WHERE PNPDeviceID LIKE" + VIDPID + " AND ClassGuid='" + ClassGuid.ToString("B") + "'";

ManagementObjectCollection PnPEntityCollection = new ManagementObjectSearcher(QueryString).Get();
if (PnPEntityCollection != null)
{
foreach (ManagementObject Entity in PnPEntityCollection)
{
String PNPDeviceID = Entity["PNPDeviceID"] as String;
Match match = Regex.Match(PNPDeviceID, "VID_[0-9|A-F]{4}&PID_[0-9|A-F]{4}");
if (match.Success)
{
PnPEntityInfo Element;

Element.PNPDeviceID = PNPDeviceID;  // 设备ID
Element.Name = Entity["Name"] as String;// 设备名称
Element.Description = Entity["Description"] as String;  // 设备描述
Element.Service = Entity["Service"] as String;  // 服务
Element.Status = Entity["Status"] as String;// 设备状态
Element.VendorID = Convert.ToUInt16(match.Value.Substring(4, 4), 16);   // 供应商标识
Element.ProductID = Convert.ToUInt16(match.Value.Substring(13, 4), 16); // 产品编号
Element.ClassGuid = new Guid(Entity["ClassGuid"] as String);// 设备安装类GUID

PnPEntities.Add(Element);
}
}
}

if (PnPEntities.Count == 0) return null; else return PnPEntities.ToArray();


///
/// 根据VID和PID定位即插即用设备实体
///
/// 供应商标识,MinValue忽视
/// 产品编号,MinValue忽视
/// 设备列表
public static PnPEntityInfo[] WhoPnPEntity(UInt16 VendorID, UInt16 ProductID)
{
return WhoPnPEntity(VendorID, ProductID, Guid.Empty);
}

///
/// 根据设备安装类GUID定位即插即用设备实体
///
/// 设备安装类Guid,Empty忽视
/// 设备列表
public static PnPEntityInfo[] WhoPnPEntity(Guid ClassGuid)
{
return WhoPnPEntity(UInt16.MinValue, UInt16.MinValue, ClassGuid);
}

///
/// 根据设备ID定位设备
///
/// 设备ID,可以是不完整信息
/// 设备列表
///
/// 注意:对于下划线,需要写成“[_]”,否则视为任意字符
///
public static PnPEntityInfo[] WhoPnPEntity(String PNPDeviceID)
{
List PnPEntities = new List();

// 枚举即插即用设备实体
String QueryString;
if (String.IsNullOrEmpty(PNPDeviceID))
{
QueryString = "SELECT * FROM Win32_PnPEntity WHERE PNPDeviceID LIKE '%VID[_]____&PID[_]____%'";
}
else
{   // LIKE子句中有反斜杠字符将会引发WQL查询异常
QueryString = "SELECT * FROM Win32_PnPEntity WHERE PNPDeviceID LIKE '%" + PNPDeviceID.Replace('\', '_') + "%'";
}

ManagementObjectCollection PnPEntityCollection = new ManagementObjectSearcher(QueryString).Get();
if (PnPEntityCollection != null)
{
foreach (ManagementObject Entity in PnPEntityCollection)
{
String thePNPDeviceID = Entity["PNPDeviceID"] as String;
Match match = Regex.Match(thePNPDeviceID, "VID_[0-9|A-F]{4}&PID_[0-9|A-F]{4}");
if (match.Success)
{
PnPEntityInfo Element;

Element.PNPDeviceID = thePNPDeviceID;   // 设备ID
Element.Name = Entity["Name"] as String;// 设备名称
Element.Description = Entity["Description"] as String;  // 设备描述
Element.Service = Entity["Service"] as String;  // 服务
Element.Status = Entity["Status"] as String;// 设备状态
Element.VendorID = Convert.ToUInt16(match.Value.Substring(4, 4), 16);   // 供应商标识
Element.ProductID = Convert.ToUInt16(match.Value.Substring(13, 4), 16); // 产品编号
Element.ClassGuid = new Guid(Entity["ClassGuid"] as String);// 设备安装类GUID

PnPEntities.Add(Element);
}
}
}

if (PnPEntities.Count == 0) return null; else return PnPEntities.ToArray();
}

///
/// 根据服务定位设备
///
/// 要查询的服务集合,null忽视
/// 设备列表
///
/// 跟服务相关的类:
/// Win32_SystemDriverPNPEntity
/// Win32_SystemDriver
///
public static PnPEntityInfo[] WhoPnPEntity(String[] ServiceCollection)
{
if (ServiceCollection == null || ServiceCollection.Length == 0)
return WhoPnPEntity(UInt16.MinValue, UInt16.MinValue, Guid.Empty);

List PnPEntities = new List();

// 枚举即插即用设备实体
String QueryString = "SELECT * FROM Win32_PnPEntity WHERE PNPDeviceID LIKE '%VID[_]____&PID[_]____%'";
ManagementObjectCollection PnPEntityCollection = new ManagementObjectSearcher(QueryString).Get();
if (PnPEntityCollection != null)
{
foreach (ManagementObject Entity in PnPEntityCollection)
{
String PNPDeviceID = Entity["PNPDeviceID"] as String;
Match match = Regex.Match(PNPDeviceID, "VID_[0-9|A-F]{4}&PID_[0-9|A-F]{4}");
if (match.Success)
{
String theService = Entity["Service"] as String;// 服务
if (String.IsNullOrEmpty(theService)) continue;

foreach (String Service in ServiceCollection)
{   // 注意:忽视大小写
if (String.Compare(theService, Service, true) != 0) continue;

PnPEntityInfo Element;

Element.PNPDeviceID = PNPDeviceID;  // 设备ID
Element.Name = Entity["Name"] as String;// 设备名称
Element.Description = Entity["Description"] as String;  // 设备描述
Element.Service = theService;   // 服务
Element.Status = Entity["Status"] as String;// 设备状态
Element.VendorID = Convert.ToUInt16(match.Value.Substring(4, 4), 16);   // 供应商标识
Element.ProductID = Convert.ToUInt16(match.Value.Substring(13, 4), 16); // 产品编号
Element.ClassGuid = new Guid(Entity["ClassGuid"] as String);// 设备安装类GUID

PnPEntities.Add(Element);
break;
}
}
}
}

if (PnPEntities.Count == 0) return null; else return PnPEntities.ToArray();
}
#endregion
}
}


    
 
 

您可能感兴趣的文章:

  • 如何使用裸设备? iis7站长之家
  • c#友好显示日期 c#日期datetime使用方法
  • 请问在工作岗位的朋友!使用java开发的公司对c#的态度如何?
  • c#自带缓存使用方法 c#移除清理缓存
  • C#中的switch case使用介绍
  • c# 空合并运算符“??”的使用详解
  • 使用C#实现在屏幕上画图效果的代码实例
  • 深入C#中使用SqlDbType.Xml类型参数的使用详解
  • c#闭包使用方法示例
  • c# split分隔字符串使用方法
  • c#的params参数使用示例
  • c#使用资源文件的示例
  • 使用C# Winform应用程序获取网页源文件的解决方法
  • C#将时间转成文件名使用方法
  • C# 使用匿名函数解决EventHandler参数传递的难题
  • 使用C#获取系统特殊文件夹路径的解决方法
  • C#使用带like的sql语句时防sql注入的方法
  • C#可选参数的相关使用
  • C# 静态构造函数使用总结
  • C# WndProc的使用方法示例
  • Django项目使用示例步骤及代码
  • linux使用shell脚本,如何创建用户,并设置用户密码?能否给出示例?
  • 使用libpcap实现抓包程序的步骤及代码示例
  • curl不使用文件存取cookie php使用curl获取cookie示例
  • python使用循环实现批量创建文件夹示例
  • jQuery 回车事件enter使用示例
  • jquery中交替点击事件toggle方法的使用示例
  • php中的strpos使用示例
  • sql使用cast进行数据类型转换示例
  • mysql求和函数使用示例
  • java使用正则表达校验手机号码示例(手机号码正则)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 问一个问题。请问如何在文件系统管理并使用设备,也就是当一个设备装载,下载时。文件系统是如何实现的
  • 如何使用裸设备?
  • 两个设备使用Jtag接口通信
  • 自己编写一个简单的字符设备驱动程序以后,改怎么使用它?
  • 如何使用程序访问硬件设备,急...
  • 请问USB的设备在SCO上能直接使用吗?
  • 编写so时,使用了“打开设备语句”。
  • 视屏采集和I2C设备使用的问题请教
  • 如何在linux上使用串口设备
  • linux下宽带上网和使用usb设备问题
  • 编译内核的后,我的一个类似USB键盘的HID类设备使用不了了,怎么办?
  • 声频设备正在被使用,是怎么个概念?
  • 各位高人,请问在SCOUNIX下怎样使用USB设备呀,比如说鼠标
  • linux下怎样使用usb移动存储设备?
  • 请问如何在一个文件系统修改源码管理并使用多个卷(存储设备)
  • 关于linux下编程如果处理设备在使用过程被卸去的问题
  • Fedora10 命令行下如何使用 USB 存储设备
  • 请教下,应用程序使用通过驱动程序使用设备的过程
  • RedHat下如何使用多lun的设备
  • 红旗Linux下使用USB设备的问题
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3