WPF USB设备采集开源工具介绍

最近项目需要需要试试采集电脑USB 设备信息 找到了 开源 示例 代码非常好  公共库也很友好  可能知名度太低   才4star  

 

https://github.com/vurdalakov/usbdevices.git

 

示例图

 

 

 代码结构

 

 UsbDevicesDotNet是公共库

UsbDevicesViewer是WPF界面

别的是控制台测试

 

获取电脑所有USB设备信息 

List<UsbDevice> UsbDevices = UsbDevice.GetDevices(new Guid(UsbDeviceWinApi.GUID_DEVINTERFACE_USB_DEVICE)).ToList()

 

 设备事件

        private Win32UsbControllerDevices win32UsbControllerDevices = new Win32UsbControllerDevices();
        private DeviceManagementNotifications deviceManagementNotifications = new DeviceManagementNotifications();



        private void EnableDeviceWatcher(Boolean enable)
        {
            if (enable)
            {
                this.win32UsbControllerDevices.DeviceConnected += OnWin32UsbControllerDevicesDeviceConnected;
                this.win32UsbControllerDevices.DeviceDisconnected += OnWin32UsbControllerDevicesDeviceDisconnected;
                //this.win32UsbControllerDevices.DeviceModified += OnWin32UsbControllerDevicesDeviceModified;

                this.win32UsbControllerDevices.StartWatcher();

                this.deviceManagementNotifications.DeviceConnected += OnDeviceManagementNotificationsDeviceConnected;
                this.deviceManagementNotifications.DeviceDisconnected += OnDeviceManagementNotificationsDeviceDisconnected;

                this.deviceManagementNotifications.Start(new Guid(UsbDeviceWinApi.GUID_DEVINTERFACE_USB_DEVICE));
            }
            else
            {
                this.deviceManagementNotifications.Stop();

                //this.deviceManagementNotifications.DeviceConnected -= OnDeviceManagementNotificationsDeviceConnected;
                //this.deviceManagementNotifications.DeviceDisconnected -= OnDeviceManagementNotificationsDeviceDisconnected;

                this.win32UsbControllerDevices.StopWatcher();

                this.win32UsbControllerDevices.DeviceConnected -= OnWin32UsbControllerDevicesDeviceConnected;
                this.win32UsbControllerDevices.DeviceDisconnected -= OnWin32UsbControllerDevicesDeviceDisconnected;
                //this.win32UsbControllerDevices.DeviceModified -= OnWin32UsbControllerDevicesDeviceModified;
            }
        }

/// <summary>
        /// 设备插入事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnWin32UsbControllerDevicesDeviceConnected(object sender, Win32UsbControllerDeviceEventArgs e)
        {
            var _thisDevice = e.Device;
        }

        /// <summary>
        /// 设备拔出事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnWin32UsbControllerDevicesDeviceDisconnected(Object sender, Win32UsbControllerDeviceEventArgs e)
        {
            var _thisDevice = e.Device;
        }


        /// <summary>
        /// 设备管理器广播插入
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnDeviceManagementNotificationsDeviceConnected(Object sender, DeviceManagementNotificationsEventArgs e)
        {
            var _DeviceClass = e.DeviceClass;
            var _DevicePath = e.DevicePath;
        }
        /// <summary>
        /// 设备管理器广播拔出
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnDeviceManagementNotificationsDeviceDisconnected(Object sender, DeviceManagementNotificationsEventArgs e)
        {
            var _DeviceClass = e.DeviceClass;
            var _DevicePath = e.DevicePath;
        }

 

 

 

控制台示例


static void Main(string[] args)
        {
            UsbDevice[] usbDevices = UsbDevice.GetDevices();

            Console.WriteLine("{0} USB devices:\n", usbDevices.Length);

            foreach (UsbDevice usbDevice in usbDevices)
            {
                Console.WriteLine("VID_{0}&PID_{1}", usbDevice.Vid, usbDevice.Pid);
                Console.WriteLine("Hub:Port = {0}:{1}", usbDevice.Hub, usbDevice.Port);
                Console.WriteLine("Device ID     = {0}", usbDevice.DeviceId);

                foreach (var deviceInterface in usbDevice.Interfaces)
                {
                    Console.WriteLine("Interface ID  = {0}", deviceInterface.InterfaceId);
                }

                Console.WriteLine("LocationInformation = {0}", usbDevice.GetRegistryPropertyValue(UsbDeviceWinApi.DeviceRegistryPropertyKeys.SPDRP_LOCATION_INFORMATION));

                foreach (String locationPath in usbDevice.GetRegistryPropertyValue(UsbDeviceWinApi.DeviceRegistryPropertyKeys.SPDRP_LOCATION_PATHS) as String[])
                {
                    Console.WriteLine("LocationPaths = {0}", locationPath);
                }

                if (!String.IsNullOrEmpty(usbDevice.BusReportedDeviceDescription))
                {
                    Console.WriteLine("DeviceDescription = {0}", usbDevice.BusReportedDeviceDescription);
                }

                Console.WriteLine();
                
            }
            Console.ReadLine();
        }

  

 


没有找到该示例的文档 全靠看demo 如果谁有文档还望 也给我一份


posted @ 2018-10-12 12:54  摇光Summer  阅读(1139)  评论(0编辑  收藏  举报