您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> Windows >> windows如何查看新插入U盘的盘符已解决

windows如何查看新插入U盘的盘符已解决

来源:网络整理     时间:2016/5/18 10:07:36     关键词:Windows

关于网友提出的“windows如何查看新插入U盘的盘符已解决”问题疑问,本网通过在网上对“windows如何查看新插入U盘的盘符已解决”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题:windows如何查看新插入U盘的盘符已解决
描述:

需求如题所示

现在通过监听WM_DEVICECHANGE消息能够知道什么时候插入/拔出了U盘,测试代码中打印出的信息:

Adding USB\VID_0951&PID_1642\001CC0EC32BCAD103712367C
Adding USBSTOR\DISK&VEN_KINGSTON&PROD_DT_101_G2&REV_1.00\001CC0EC32BCAD103712367C&0
Removing USBSTOR\DISK&VEN_KINGSTON&PROD_DT_101_G2&REV_1.00\001CC0EC32BCAD103712367C&0
Removing USB\VID_0951&PID_1642\001CC0EC32BCAD103712367C

如何通过这些信息取得系统分配给U盘的盘符。

我正在查,但告诉我相关的API能节省我一些时间,谢谢。


已解决,更新

解决的方法是接收到WM_DEVICECHANGE消息后,进行如下处理:

char FirstDriveFromMask(ULONG unitmask)
{
   char i;

   for (i = 0; i < 26; ++i)
   {
      if (unitmask & 0x1)
         break;
      unitmask >>= 1;
   }

   return (i + 'A');
}
LRESULT DeviceChange(UINT message, WPARAM wParam, LPARAM lParam)
{
    if ( DBT_DEVICEARRIVAL == wParam || DBT_DEVICEREMOVECOMPLETE == wParam ) 
    {
        PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR)lParam;
        if (pHdr->dbch_devicetype == DBT_DEVTYP_VOLUME) 
        {
            PDEV_BROADCAST_VOLUME pDevVolume = (PDEV_BROADCAST_VOLUME)lParam;
            char driverLabel = FirstDriveFromMask(pDevVolume->dbcv_unitmask);
            if (wParam == DBT_DEVICEARRIVAL) {
                printf("add %c\r\n", driverLabel);
            } else {
                printf("remove %c\r\n", driverLabel);
            }
        }
    }
    return 0;
}

以前写过类似东西的顺便说一句,
监听消息之外……其实这玩意用WMI会更方便一些,主要是不依赖GUI了。。

        public void ControlUSBConnectionStatu()
        {
            try
            {
                getEventQuery = new WqlEventQuery("Select * from Win32_VolumeChangeEvent");
                getEventWatcher = new ManagementEventWatcher(getEventQuery);
                getEventWatcher.EventArrived += new EventArrivedEventHandler(getEventWatcher_EventArrived);
               getEventWatcher.Start();
            }
            catch (Exception se)
            { }
        }
        void getEventWatcher_EventArrived(object sender, EventArrivedEventArgs e)
        {
            if (work == null) return;
            ManagementBaseObject mbo = e.NewEvent;
            switch ((UInt16)mbo["EventType"])
            {
                case 2: // 插入
                    mbo["DriveName"] // 这个就是了
                case 3: // 弹出
            }
        }


以上介绍了“windows如何查看新插入U盘的盘符已解决”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/1156168.html

相关图片

相关文章