Wince下检测SD/USB插拔

原文地址::http://blog.csdn.net/hugohong/article/details/6072138


相关网帖

1、WINCE下检测SD卡----http://blog.csdn.net/huang5556019/article/details/7773532


在wince系统中,如何检测USB/SD卡的拔插呢?可能有的会写一个线程专门去侦察USB/SD 的拔插情况,我觉得这样又费资源又费时间,很不划算,有没有更好的办法呢?当然有,今天我就介绍一种新的方法:WM_DEVICECHANGE,如下:

[cpp]  view plain copy
  1. LRESULT Cxxx::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)  
  2. {  
  3.     // TODO: 在此添加专用代码和/或调用基类  
  4.     if (message == WM_DEVICECHANGE )  
  5.     {  
  6.         PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;  
  7.         switch(wParam)  
  8.         {  
  9.         case DBT_DEVICEARRIVAL:  
  10.             if( lpdb->dbch_devicetype == DBT_DEVTYP_PORT )  
  11.             {  
  12.                 PDEV_BROADCAST_PORT lpbp;  
  13.                 lpbp = (PDEV_BROADCAST_PORT)lpdb;  
  14.                 TRACE(_T("device:%s/r/n"), lpbp->dbcp_name);  
  15.                 if (_tcscmp(lpbp->dbcp_name, _T("DSK2:")) == 0)  
  16.                 {  
  17.                     AfxMessageBox(_T("sd device insert!"));  
  18.                 }  
  19.                 else if (_tcscmp(lpbp->dbcp_name, _T("DSK3:")) == 0)  
  20.                 {  
  21.                     AfxMessageBox(_T("usb device insert!"));  
  22.                 }  
  23.             }  
  24.             break;  
  25.               
  26.         case DBT_DEVICEREMOVECOMPLETE:  
  27.             if( lpdb->dbch_devicetype == DBT_DEVTYP_PORT )  
  28.             {  
  29.                 PDEV_BROADCAST_PORT lpbp;  
  30.                 lpbp = (PDEV_BROADCAST_PORT)lpdb;  
  31.                 TRACE(_T("device:%s/r/n"), lpbp->dbcp_name);  
  32.                 if (_tcscmp(lpbp->dbcp_name, _T("DSK2:")) == 0)  
  33.                 {  
  34.                     AfxMessageBox(_T("sd remove!"));  
  35.                 }  
  36.                 else if (_tcscmp(lpbp->dbcp_name, _T("DSK3:")) == 0)  
  37.                 {  
  38.                     AfxMessageBox(_T("usb remove!"));  
  39.                 }  
  40.             }  
  41.             break;  
  42.               
  43.         default:  
  44.             break;  
  45.         }  
  46.     }  
  47.       
  48.     return CDialog::DefWindowProc(message, wParam, lParam);  
  49. }  
 

这样的话,又快又准确; 不过注意的是,我在注册表里已经设定的SD卡为DSK2, USB为DSK3,要不然的话那个先插那个就是DSK2(flash 为DSK1)了, 就这么简单!


//====================================================================================================

备注::

1、记得包含头文件------#include "dbt.h"




你可能感兴趣的:(Wince下检测SD/USB插拔)