怎么在C#的用户控件中得到USB插入的消息?

解决方案 »

  1.   

      using   System;   
      using   System.Collections.Generic;   
      using   System.ComponentModel;   
      using   System.Data;   
      using   System.Drawing;   
      using   System.Text;   
      using   System.Windows.Forms;   
      using   System.IO;   
        
      namespace   U盘更新   
      {   
              public   partial   class   Form1   :   Form   
              {   
                      public   const   int   WM_DEVICECHANGE   =   0x219;   
                      public   const   int   DBT_DEVICEARRIVAL   =   0x8000;   
                      public   const   int   DBT_CONFIGCHANGECANCELED   =   0x0019;   
                      public   const   int   DBT_CONFIGCHANGED   =   0x0018;   
                      public   const   int   DBT_CUSTOMEVENT   =   0x8006;   
                      public   const   int   DBT_DEVICEQUERYREMOVE   =   0x8001;   
                      public   const   int   DBT_DEVICEQUERYREMOVEFAILED   =   0x8002;   
                      public   const   int   DBT_DEVICEREMOVECOMPLETE   =   0x8004;   
                      public   const   int   DBT_DEVICEREMOVEPENDING   =   0x8003;   
                      public   const   int   DBT_DEVICETYPESPECIFIC   =   0x8005;   
                      public   const   int   DBT_DEVNODES_CHANGED   =   0x0007;   
                      public   const   int   DBT_QUERYCHANGECONFIG   =   0x0017;   
                      public   const   int   DBT_USERDEFINED   =   0xFFFF;   
        
                      public   Form1()   
                      {   
                              InitializeComponent();   
                      }   
        
                      private   void   Form1_Load(object   sender,   EventArgs   e)   
                      {   
        
                      }   
                        
                      protected   override   void   WndProc(ref   Message   m)   
                      {   
                              try   
                              {   
                                      if   (m.Msg   ==   WM_DEVICECHANGE)   
                                      {   
                                              switch   (m.WParam.ToInt32())   
                                              {   
                                                      case   WM_DEVICECHANGE:   
                                                              break;   
                                                      case   DBT_DEVICEARRIVAL://U盘插入   
                                                              DriveInfo[]   s   =   DriveInfo.GetDrives();   
                                                              foreach   (DriveInfo   drive   in   s)   
                                                              {   
                                                                      if   (drive.DriveType   ==   DriveType.Removable)   
                                                                      {   
                                                                              listBox1.Items.Add("U盘已插入,盘符为:"   +   drive.Name.ToString());   
                                                                              break;   
                                                                      }   
                                                              }   
                                                              break;   
                                                      case   DBT_CONFIGCHANGECANCELED:   
                                                              break;   
                                                      case   DBT_CONFIGCHANGED:   
                                                              break;   
                                                      case   DBT_CUSTOMEVENT:   
                                                              break;   
                                                      case   DBT_DEVICEQUERYREMOVE:   
                                                              break;   
                                                      case   DBT_DEVICEQUERYREMOVEFAILED:   
                                                              break;   
                                                      case   DBT_DEVICEREMOVECOMPLETE:   //U盘卸载   
                                                              break;   
                                                      case   DBT_DEVICEREMOVEPENDING:   
                                                              break;   
                                                      case   DBT_DEVICETYPESPECIFIC:   
                                                              break;   
                                                      case   DBT_DEVNODES_CHANGED:   
                                                              break;   
                                                      case   DBT_QUERYCHANGECONFIG:   
                                                              break;   
                                                      case   DBT_USERDEFINED:   
                                                              break;   
                                                      default:   
                                                              break;   
                                              }   
                                      }   
                              }   
                              catch   (Exception   ex)   
                              {   
                                      MessageBox.Show(ex.Message);   
                              }   
                              base.WndProc(ref   m);   
                      }   
      

  2.   

    呵呵,这么说吧,这个控件是嵌在网页里面的,不需要涉及到主窗体,况且我在主窗体中先测试了,控件其他消息可以接收到,但是USB的消息接受不到
      

  3.   

    那么有谁可以先说说,为什么用户控件接收不了USB的消息?