Working with USB devices in .NET

前端 未结 12 1218
暖寄归人
暖寄归人 2020-11-27 10:56

Using .Net (C#), how can you work with USB devices?

How can you detect USB events (connections/disconnections) and how do you communicate with devices (read/write).

12条回答
  •  被撕碎了的回忆
    2020-11-27 11:12

    I used the following code to detect when USB devices were plugged and unplugged from my computer:

    class USBControl : IDisposable
        {
            // used for monitoring plugging and unplugging of USB devices.
            private ManagementEventWatcher watcherAttach;
            private ManagementEventWatcher watcherRemove;
    
            public USBControl()
            {
                // Add USB plugged event watching
                watcherAttach = new ManagementEventWatcher();
                //var queryAttach = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2");
                watcherAttach.EventArrived += new EventArrivedEventHandler(watcher_EventArrived);
                watcherAttach.Query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2");
                watcherAttach.Start();
    
                // Add USB unplugged event watching
                watcherRemove = new ManagementEventWatcher();
                //var queryRemove = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 3");
                watcherRemove.EventArrived += new EventArrivedEventHandler(watcher_EventRemoved);
                watcherRemove.Query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 3");
                watcherRemove.Start();
            }
    
            /// 
            /// Used to dispose of the USB device watchers when the USBControl class is disposed of.
            /// 
            public void Dispose()
            {
                watcherAttach.Stop();
                watcherRemove.Stop();
                //Thread.Sleep(1000);
                watcherAttach.Dispose();
                watcherRemove.Dispose();
                //Thread.Sleep(1000);
            }
    
            void watcher_EventArrived(object sender, EventArrivedEventArgs e)
            {
                Debug.WriteLine("watcher_EventArrived");
            }
    
            void watcher_EventRemoved(object sender, EventArrivedEventArgs e)
            {
                Debug.WriteLine("watcher_EventRemoved");
            }
    
            ~USBControl()
            {
                this.Dispose();
            }
    
    
        }
    

    You have to make sure you call the Dispose() method when closing your application. Otherwise, you will receive a COM object error at runtime when closing.

提交回复
热议问题