本帖最后由 yqy3483 于 2012-08-17 14:46:28 编辑

解决方案 »

  1.   

    这些东西都假的。
    只是注册表里的项。
    如果只用c#而不依赖第三方的dll.没有办法做出来的。
    .net根本没有提供这个功能。
    就算是u盘现在也分为很多种的。现在U盘的芯片组好象就是那十来家。把各家的规范找来可能会有助于你做这个东东。
    楼主用这个WMI也可以做。不过做出来的东西是不准确的。
      

  2.   

    1、可以在收到插入U盘的消息时记录下当前的Drive(可以用全局变量来记录,假设名为_currentDrive),同时开启监听线程。2、在监听线程中透过_currentDrive.IsReady来判断新插入的U盘是否准备就绪。如果准备就绪,就读取所有的U盘列表,并在U盘列表查找_currentDrive.Name中是否存在,存在则进一步获取系列号
      

  3.   

    非常简单 把 USB口 全部封上  内部传输线拔掉 背部 usb 全部捣毁
      

  4.   

    直接 BIOS 里 屏蔽就完事了 ,搞那么复杂。
      

  5.   

    我也遇到过这种问题,最后解决了,你可以试试我的方法:
    在检测到U盘插入事件的时候,新开启一个线程用来获取U盘序列号。  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盘有插入 
                                      System.Threading.Thread myTh1 = new System.Threading.Thread(UisIn);    //U盘序列号获取写在这个UisIn里。
                                    myTh1.Start(); 
                                break;
                            case DBT_DEVICEREMOVECOMPLETE: //U盘卸载
                                          System.Threading.Thread myTh2 = new System.Threading.Thread(UisOut);
                                    myTh2.Start(); 
                                break;
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
                base.WndProc(ref m);
            }
      

  6.   

    WIN7下面,工具是VS2010,插入U盘始终无法得到DBT_DEVICEARRIVAL,只有DBT_DEVNODES_CHANGED ,请问snvlongquan,这段代码可以用吗??