现在程序在插拔U盘时可以响应到WM_DEVICECHANGE的消息了,现还有2问题:1.我怎样才能得到U盘符呢?比如是F盘,我怎样才能得到F?2.当接入的U盘数超过盘符名Z怎么来表示?偶是新手,菜鸟一个,盼各位指教,不甚感谢!
LONG CMainFrame::OnDeviveChange(WPARAM wParam, LPARAM lParam)
{
         CString str;
DEV_BROADCAST_HDR * dhr = (DEV_BROADCAST_HDR *)lParam;
switch(wParam)
{
          case DBT_DEVICEARRIVAL:
          {
              //得到插入的USB盘符,求助
           }
           break;
          case DBT_DEVICEREMOVECOMPLETE:
          {
              //得到拔除的USB盘符,求助
           }
           break;
          }}

解决方案 »

  1.   

    case DBT_DEVICEARRIVAL:
    if(dhr->dbch_devicetype == DBT_DEVTYP_VOLUME)
    {
    PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)dhr;
    if(lpdbv->dbcv_flags & DBTF_MEDIA)
    {
    str.Format("Drive %c 插入", FirstDriveFromMask(lpdbv ->dbcv_unitmask));
    //AfxMessageBox(str);
    }
    else
    {
    char ch = FirstDriveFromMask(lpdbv ->dbcv_unitmask);
    str.Format("%c:\\",ch);
    CopyUFile((LPTSTR)(LPCTSTR)str);
    }
    }
    char CTestUSBDlg::FirstDriveFromMask (ULONG unitmask)
    {
      char i;  for (i = 0; i < 26; ++i)
      {
         if (unitmask & 0x1)
            break;
         unitmask = unitmask >> 1;
      }  return (i + 'A');
    }