• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            面對現實,超越自己
            逆水行舟,不進則退
            posts - 269,comments - 32,trackbacks - 0

            一、查看是否有優盤插入

            1 #define MESSAGEBOX_TITLE    "標題"
            2 #define PLEASE_INSERT_UDISK "請插入U盤以保存打印文件"
            3   UsbDiskClass g_usbObject;
            4   if ( g_usbObject.szMoveDiskName[1== '\0' )
            5               MessageBox(NULL, PLEASE_INSERT_UDISK, MESSAGEBOX_TITLE, MB_OK | MB_ICONWARNING);

            二、檢測優盤函數
             1 /****************************************************************************
             2 *
             3 *    FUNCTION: chFirstDriverFrameMask(ULONG unitmask)
             4 *
             5 *    PURPOSE:  get the logic name of driver
             6 *
             7 ****************************************************************************/
             8 char chFirstDriveFromMask (ULONG unitmask)
             9 {
            10 
            11        char i;
            12        for (i = 0; i < 26++i)  
            13        {
            14         if (unitmask & 0x1
            15                break;
            16         unitmask = unitmask >> 1;
            17        }
            18        return (i + 'A');
            19  }
            20 
            21 /****************************************************************************
            22 *
            23 *    FUNCTION: ReInitUSB_Disk_Letter()
            24 *
            25 *    PURPOSE:  get the usb disks, and filling the 'szMoveDiskName' with them
            26 *
            27 ****************************************************************************/
            28 // Drive type names
            29 #define DRVUNKNOWN  0
            30 #define DRVFIXED  1
            31 #define DRVREMOTE  2
            32 #define DRVRAM   3
            33 #define DRVCD   4
            34 #define DRVREMOVE  5
            35 
            36 void UsbDiskClass::ReInitUSB_Disk_Letter()
            37 {
            38        int k = 0;
            39        DWORD   MaxDriveSet, CurDriveSet;
            40        DWORD   drive, drivetype;
            41        TCHAR   szBuf[300];
            42        HANDLE   hDevice;
            43        PSTORAGE_DEVICE_DESCRIPTOR pDevDesc;
            44 
            45        for(k=0; k<26; k++)
            46         szMoveDiskName[k] = '\0'
            47        k = 1;  
            48        // Get available drives we can monitor
            49        MaxDriveSet = CurDriveSet = 0;
            50        //test code 
            51        TCHAR TCFwp[50],TCF2[50];
            52        MaxDriveSet = GetLogicalDrives();
            53 
            54      //test code output-------------------------------------
            55        wsprintf(TCFwp,_T("%ld"), MaxDriveSet);
            56        MessageBox(NULL, TCFwp, TEXT("十進制的"), MB_OK); //十進制輸出
            57        _itot(MaxDriveSet, TCF2, 2); //_itot(MaxDriveSet, TCF2, 2); _UNICODE Defined
            58        MessageBox(NULL, TCF2, TEXT("二進制的"), MB_OK); //二進制輸出
            59      //test code output-------------------------------------
            60 
            61       CurDriveSet = MaxDriveSet;
            62        for ( drive = 2/*0*/; drive < 32++drive )  
            63        {
            64               if ( MaxDriveSet & (1 << drive) )  
            65               {
            66                      DWORD temp = 1<<drive;
            67                      TCHAR szDrvName[33];
            68                      _stprintf( szDrvName, _T("%c:\\"), 'A'+drive );
            69                      switch ( GetDriveType( szDrvName ) )  
            70                      {
            71                        case DRIVE_REMOVABLE: // The drive can be removed from the drive.
            72                       drivetype = DRVREMOVE;
            73                       szMoveDiskName[k] = chFirstDriveFromMask(temp);
            74                       szMoveDiskName[0]=k;
            75                       k++;
            76                       break;
            77                     }
            78              }
            79        }
            80 
            81 }

             三、直接循環查找

            1 CString strdir=_T("");
            2 for(char cc='A';cc<='Z';cc++)
            3 {
            4     strdir.Format("%c:",cc);
            5     if(GetDriveType((LPCTSTR)strdir)==DRIVE_REMOVABLE)  //判斷是不是U盤
            6             return strdir;
            7 }
            8 return strdir=_T("");        //沒找到就返回空

            缺點:循環次數過多
               
            有限次數查找:

             1 char a = 'A;    
             2 CString DriveName; 
             3 DWORD dwDrives = GetLogicalDrives(); 
             4 while (dwDrives > 0
             5 
             6      if (dwDrives % 2 == 1
             7      { 
             8          TCHAR szDrvName[33];
             9          _stprintf( szDrvName, _T("%c:\\"), a );
            10          if(GetDriveType((LPCTSTR)szDrvName)== DRIVE_REMOVABLE)  //判斷是不是U盤
            11                 return szDrvName;
            12      } 
            13      a++
            14      dwDrives /= 2
            15  } 

            四、其他方法
            轉自:http://www.cnblogs.com/over140/archive/2010/05/03/1726263.html

            [MFC]U盤檢測

            前言

              本文主要是講在MFC中使用消息隊列,并在消息中捕獲系統USB插入、卸載U盤的事件。

            正文

              一、MFC中使用消息隊列

                1.1  聲明

            virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);

                1.2  實現

            LRESULT CTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
            {
                
            return CDialog::WindowProc(message,wParam,lParam);
            }
                  本示例是繼承CDialog。

             

              二、捕獲U盤插入、卸載事件

            LRESULT CTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
            {
                
            switch (message)
                {
                    
            //WM_DEVICECHANGE,系統硬件改變發出的系統消息
                    case WM_DEVICECHANGE:
                    {
                        PDEV_BROADCAST_HDR lpdb=(PDEV_BROADCAST_HDR)lParam;
                        
            switch(wParam)
                        {
                            
            case WM_DEVICECHANGE:
                                
            break;
                            
            case DBT_DEVICEARRIVAL://DBT_DEVICEARRIVAL,設備檢測結束,并且可以使用
                            {
                                
            if(lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)//邏輯卷
                                {
                                    PDEV_BROADCAST_VOLUME lpdbv =  (PDEV_BROADCAST_VOLUME)lpdb;
                                    
            switch(lpdbv->dbcv_flags)
                                    {
                                        
            case 0:                //U盤
                                        {
                                            CString decDriver;
                                            decDriver = FirstDriveFromMask(lpdbv ->dbcv_unitmask);
                                            TRACE1("檢測到U盤:[%s]插入!\n",decDriver.GetBuffer(0));
                                        }
                                            
            break;
                                        
            case DBTF_MEDIA:    //光盤
                                            TRACE1("檢測到光盤:[%c]插入!\n",FirstDriveFromMask(lpdbv ->dbcv_unitmask));
                                            
            break;
                                    }
                                }
                            }
                                
            break;
                            
            case DBT_DEVICEREMOVECOMPLETE://DBT_DEVICEREMOVECOMPLETE,設備卸載或者拔出
                            {
                                
            if(lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)//邏輯卷
                                {
                                    PDEV_BROADCAST_VOLUME lpdbv =  (PDEV_BROADCAST_VOLUME)lpdb;
                                    
            switch(lpdbv->dbcv_flags)
                                    {
                                        
            case 0:                //U盤
                                        {
                                            CString decDriver;
                                            decDriver = FirstDriveFromMask(lpdbv ->dbcv_unitmask);
                                            TRACE1("檢測到U盤:[%s]拔出!\n",decDriver.GetBuffer(0));
                                        }
                                            
            break;
                                        
            case DBTF_MEDIA:    //光盤
                                            
                                            
            break;
                                    }
                                }
                            }
                                
            break;
                        }
                    }
                    
            break;
                }
                
            return CDialog::WindowProc(message,wParam,lParam); 
            }


             

             

            posted on 2012-03-14 14:01 王海光 閱讀(1128) 評論(0)  編輯 收藏 引用 所屬分類: MFC
            久久国产精品久久国产精品| 亚洲国产另类久久久精品黑人| 久久久av波多野一区二区| 99国产精品久久久久久久成人热| 成人国内精品久久久久一区| 日本精品久久久久中文字幕| 九九久久精品国产| 久久综合亚洲欧美成人| 久久亚洲美女精品国产精品| 成人综合伊人五月婷久久| 国产69精品久久久久99尤物| 久久夜色精品国产www| 热re99久久6国产精品免费| 秋霞久久国产精品电影院| 久久无码AV一区二区三区| 久久精品男人影院| 中文国产成人精品久久不卡| 久久国产高清一区二区三区| 久久久久亚洲AV无码专区首JN| 久久精品国产一区二区三区日韩| 久久99热这里只有精品66| 国产人久久人人人人爽| 久久天天躁狠狠躁夜夜2020| 国产成人综合久久综合| 久久精品国产亚洲av麻豆图片| 久久国产精品二国产精品| 丰满少妇人妻久久久久久| 97久久国产露脸精品国产| 精品国产日韩久久亚洲| 久久九色综合九色99伊人| 久久99精品综合国产首页| 久久精品亚洲一区二区三区浴池| 久久亚洲AV无码精品色午夜| 久久久WWW成人免费毛片| 伊人丁香狠狠色综合久久| 中文字幕一区二区三区久久网站| 精品久久久久久久久午夜福利| 色诱久久久久综合网ywww| 色综合久久久久综合体桃花网| 亚洲伊人久久精品影院| 性欧美大战久久久久久久久|