C#开发,一种用于检测USB设备的USB库

用于检测USB设备的USB库

在这里插入图片描述

本文是关于USB库的,USBClassLibrary 它使您可以管理USB设备的Attach和Detach事件并检测您自己的设备。
在项目属性的“构建”选项卡中,不要在“平台目标”下拉列表中选择“任何CPU” ,而是选择x86或x64。
类库下载链接:DLL下载

1、Windows Forms

//引用
using USBClassLibrary;

private USBClassLibrary.USBClass USBPort;

private List<USBClassLibrary.USBClass.DeviceProperties> ListOfUSBDeviceProperties;

USBPort = new USBClass();

ListOfUSBDeviceProperties = new List<USBClassLibrary.USBClass.DeviceProperties>();
//设备的插入与移除
USBPort.USBDeviceAttached += new USBClass.USBDeviceEventHandler(USBPort_USBDeviceAttached);
USBPort.USBDeviceRemoved += new USBClass.USBDeviceEventHandler(USBPort_USBDeviceRemoved);
//注册您的表单,以便在添加或删除设备时接收Windows消息
USBPort.RegisterForDeviceChange(true, this.Handle);
//设备是否连接
if (USBClass.GetUSBDevice(MyDeviceVID, MyDevicePID,  ref ListOfUSBDeviceProperties, false))
{
   //My Device is connected
   MyUSBDeviceConnected = true;
}

//设备变动事件
private void USBPort_USBDeviceAttached(object sender, 
             USBClass.USBDeviceEventArgs e)
{
   if (!MyUSBDeviceConnected)
   {
      if (USBClass.GetUSBDevice(MyDeviceVID, MyDevicePID, 
                                ref ListOfUSBDeviceProperties, false))
      {
         //My Device is connected
         MyUSBDeviceConnected = true;
      }
   }
}
private void USBPort_USBDeviceRemoved(object sender, 
             USBClass.USBDeviceEventArgs e)
{
   if (!USBClass.GetUSBDevice(MyDeviceVID, MyDevicePID, 
                              ref ListOfUSBDeviceProperties, false))
   {
      //My Device is removed
      MyUSBDeviceConnected = false;
   }
}
//处理窗体中的Windows消息,将它们传递给USBClass类
protected override void WndProc(ref Message m)
{
   bool IsHandled = false;
   USBPort.ProcessWindowsMessage(m.Msg, m.WParam, m.LParam, ref IsHandled);
   base.WndProc(ref m);
}

2、WPF

//using 在代码中添加 指令:
using USBClassLibrary;
//声明一个实例 USBClass
private USBClassLibrary.USBClass USBPort;
//DeviceProperties 如果要读取设备的属性,则声明该类的实例List <T>
private List<USBClassLibrary.USBClass.DeviceProperties> ListOfUSBDeviceProperties;
//创建USBClass 该类的实例
USBPort = new USBClass();
//创建DeviceProperties 该类的实例List <T>  
ListOfUSBDeviceProperties = new List<USBClassLibrary.USBClass.DeviceProperties>(); 
//为USBClass 该类公开的事件添加处理程序
USBPort.USBDeviceAttached += new USBClass.USBDeviceEventHandler(USBPort_USBDeviceAttached);
USBPort.USBDeviceRemoved += new USBClass.USBDeviceEventHandler(USBPort_USBDeviceRemoved);
//覆盖OnSourceInitialized以便:
//检索Windows句柄
//添加一个接收所有窗口消息的事件处理程序
//注册您的表单以在添加或删除设备时接收Windows消息 
protected override void OnSourceInitialized(EventArgs e)
{
   base.OnSourceInitialized(e);
   HwndSource source = PresentationSource.FromVisual(this) as HwndSource;
   source.AddHook(WndProc);
   //USB Connection
   USBPort.RegisterForDeviceChange(true, source.Handle);
   USBTryMyDeviceConnection();
   MyUSBDeviceConnected = false;
} 
//处理表单中的Windows消息以将其传递给 USBClass 类
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
   USBPort.ProcessWindowsMessage(msg, wParam, lParam, ref handled);
            
   return IntPtr.Zero;
}
//然后,检查您的设备是否尚未连接
if (USBClass.GetUSBDevice(MyDeviceVID, MyDevicePID,  ref ListOfUSBDeviceProperties, false))
{
   //My Device is connected
   MyUSBDeviceConnected = true;
}

//然后,检查您的设备是否尚未连接
private void USBPort_USBDeviceAttached(object sender, 
             USBClass.USBDeviceEventArgs e)
{
   if (!MyUSBDeviceConnected)
   {
      if (USBClass.GetUSBDevice(MyDeviceVID, MyDevicePID, 
                                ref ListOfUSBDeviceProperties, false))
      {
         //My Device is connected
         MyUSBDeviceConnected = true;
      }
   }
}
private void USBPort_USBDeviceRemoved(object sender, 
             USBClass.USBDeviceEventArgs e)
{
   if (!USBClass.GetUSBDevice(MyDeviceVID, MyDevicePID, 
                              ref ListOfUSBDeviceProperties, false))
   {
      //My Device is removed
      MyUSBDeviceConnected = false;
   }
} 


3、其它设备属性

public struct DeviceProperties
{
   public string FriendlyName;
   public string DeviceDescription;
   public string DeviceType;
   public string DeviceManufacturer;
   public string DeviceClass;
   public string DeviceLocation;
   public string DevicePath;
   public string DevicePhysicalObjectName;
   public string COMPort;
}

public static bool GetUSBDevice(UInt32 VID, UInt32 PID, ref List<deviceproperties> ListOfDP, bool GetCOMPort, Nullable<uint32> MI=null)
{
   ...
    DP.DevicePhysicalObjectName = String.Empty;
    if (Win32Wrapper.SetupDiGetDeviceRegistryProperty(h, ref DevInfoData, 
      (UInt32)Win32Wrapper.SPDRP.SPDRP_PHYSICAL_DEVICE_OBJECT_NAME, 
      ref RegType, intptrBuffer, BUFFER_SIZE, ref RequiredSize))
    {
      DP.DevicePhysicalObjectName = Marshal.PtrToStringAuto(intptrBuffer);
    }
    ...
}

4、获取关连的com信息

如果您的设备模拟串行端口,则可以检索其COM端口。

该GetUSBDevice函数具有第四个参数GetCOMPort:

public static bool GetUSBDevice(UInt32 VID, UInt32 PID, ref List<deviceproperties> ListOfDP, bool GetCOMPort, Nullable<uint32> MI=null)


if (USBClass.GetUSBDevice(MyDeviceVID, MyDevicePID, 
             ref ListOfUSBDeviceProperties, true))
{
   String COMPort;
   //My Device is connected
   MyUSBDeviceConnected = true;
   COMPort = DP.COMPort;
}
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: USB设备远程共享是指通过网络连接的方式,将USB设备连接到一台计算机上,然后让其他计算机也能够通过网络使用该USB设备的功能。这种方式可以使多台计算机同时使用同一个USB设备,方便了用户的操作。 USB设备远程共享的原理是在连接USB设备的计算机上安装一个USB设备服务器软件,该软件会将USB设备转换成网络数据包进行传输。其他要使用该USB设备的计算机需要安装USB设备客户端软件,通过网络连接到USB设备服务器,然后就可以像连接本地USB设备一样使用远程共享的USB设备了。 远程共享USB设备的好处是可以实现多台计算机之间资源共享,节省了用户的成本和空间。例如,在一家公司的办公室中,只需要一台打印机,并通过USB设备远程共享让所有员工的电脑都能够使用这台打印机,就能够满足工作的需求,而不需要给每个员工都配备一台打印机。 USB设备远程共享也有一些限制,首先是网络的速度和稳定性,如果网络不稳定或者速度很慢,使用远程共享的USB设备可能会变得卡顿或者无法使用。其次,一些特殊的USB设备可能不支持远程共享功能,需要根据具体的USB设备来判断是否可以进行远程共享。 总的来说,USB设备远程共享是一种便利的技术,可以使多台计算机共享一个USB设备,提高了办公效率和资源利用率。但是在使用过程中,还需要考虑网络的稳定性和设备的兼容性等问题。 ### 回答2: USB设备远程共享是指通过网络将USB设备连接到远程计算机并共享该设备的功能。这种功能通常用在远程办公、远程控制和远程协作等场景中。 USB设备远程共享的实现需要使用特定的软件或硬件设备,其中最常见的方式是使用USB设备服务器。USB设备服务器是一种可以将USB设备连接到网络的设备,它会将USB接口转为网络接口,使得USB设备可以通过网络与远程计算机进行通信。 通过USB设备服务器,用户可以在本地计算机上安装相应的驱动程序和共享软件,然后将USB设备连接到USB设备服务器。通过网络,远程计算机可以访问共享软件,并将其识别为远程设备,从而实现对USB设备的远程共享和控制。 USB设备远程共享的优势在于可以实现远程设备的共享和使用,不再局限于物理连接。这对于需要在远程环境中使用USB设备的用户来说非常方便。例如,在远程会议中,用户可以将摄像头、麦克风等USB设备连接到USB设备服务器并共享给远程参会人员,从而实现更好的远程协作体验。此外,也可以通过远程共享USB设备来远程访问文件、打印文档等操作,提高工作效率。 需要注意的是,USB设备远程共享需要保证网络的稳定性和带宽的充足性,以确保远程设备的实时响应和流畅使用。此外,也要注意安全性问题,避免远程设备被未授权的用户滥用或侵犯隐私。因此,在进行USB设备远程共享时,需要选择可靠的软件和设备,并采取相应的安全措施来保护用户的数据和隐私。 ### 回答3: USB设备远程共享是指通过网络将USB设备连接到一台远程计算机上,使得远程计算机可以访问和使用USB设备。 实现USB设备远程共享的一种方法是使用虚拟化技术。虚拟化技术可以创建一个虚拟的USB设备接口,将USB设备的信号传输通过网络发送给远程计算机,远程计算机接收到信号后就可以像本地USB设备一样使用该设备USB设备远程共享的好处包括: 1. 方便共享:可以将一台USB设备共享给多台计算机使用,提高设备的利用率。 2. 节省成本:无需购买额外的USB设备,节省了硬件成本。 3. 提高灵活性:用户可以在任何地点通过网络访问和使用USB设备,无需受到地理位置限制。 4. 增强安全性:可以对USB设备进行权限管理和监控,有效防止数据泄漏和设备滥用的风险。 至于实现USB设备远程共享的具体方法,可以使用专门的USB设备共享软件或者使用远程桌面协议。这些软件和协议可以将本地USB设备映射到远程计算机上,并提供相应的控制和访问权限。 总之,USB设备远程共享是一种方便实用的技术,可以提高USB设备的利用率和灵活性,同时也增强了数据安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值