您的位置:首页 > 编程语言

Windows下判断U盘插入并取出盘符路径的代码(转)

2010-03-06 19:40 281 查看
#include <windows.h>
#include <dbt.h>

char FirstDriveFromMask(ULONG unitmask)
{
char i;
for (i = 0; i < 26; ++i)
{
if (unitmask & 0x1)
break;
unitmask = unitmask >> 1;
}
return (i + 'A');
}

bool Application::winEventFilter(MSG *msg, long *result)
{
bool ret = false;
if (msg->message != WM_DEVICECHANGE)
return ret;

PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)msg->lParam;
static int iCnt = 0;
char szDrivePath[3];

switch (msg->wParam)
{
case DBT_DEVICEARRIVAL:
if (lpdb->dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
//if (lpdbv->dbcv_flags & DBTF_MEDIA)
{
sprintf(szDrivePath, "%c:\\",
FirstDriveFromMask(lpdbv->dbcv_unitmask));
const wchar_t *path = QString(szDrivePath).toStdWString().c_str();
if (szDrivePath[0] > 'B'
&& GetDriveType(path) == DRIVE_REMOVABLE)
{
iCnt++;
if (iCnt%3 == 0)
{
qDebug() << "Incoming: " << szDrivePath;
ret = true;
}
}
}
}
break;
case DBT_DEVICEREMOVECOMPLETE:
break;
default:;
}
return ret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: