U盘插入与拔出识别

在很多应用程序中,我们往往希望程序能够自动检测出即插即用型设备的插入和拔出.在windows平台上,当PnP设备插入或柭出时系统会发出WM_DEVICECHANGE消息,应用程序只需截获该消息并作出相应的处理,就可以实现上述功能.下面我们以一个MFC开发环境,写出一个能够识别出U盘插入和拔出的程序例子.
1.新建一个基于对话框的MFC程序PnPTest.
2.手工在PnPTestDlg类中加入虚函数WindowProc, 在该函数中截获WM_DEVICECHANGE消息.其代码如下:

LRESULT CPnPTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
// TODO: Add your specialized code here and/or call the base class
if(message == WM_DEVICECHANGE) //0x8000,0x8004
{
CString str;
DEV_BROADCAST_HDR
* dhr = (DEV_BROADCAST_HDR *)lParam;
switch(wParam)
{
case DBT_DEVICEARRIVAL:
if(dhr->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv 
= (PDEV_BROADCAST_VOLUME)dhr;
if(lpdbv->dbcv_flags==0)
{
AfxMessageBox(
"U盘被插入!");

}

}

break;
case DBT_DEVICEREMOVECOMPLETE:
if(dhr->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv 
= (PDEV_BROADCAST_VOLUME)dhr;
if(lpdbv->dbcv_flags==0)
{
AfxMessageBox(
"U盘被拔出!");
}

}

break;
default:
break;
}

}

return CDialog::WindowProc(message, wParam, lParam);
}

posted @ 2009-05-13 21:55  Jeno  阅读(1203)  评论(0编辑  收藏  举报