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;
}
#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;
}
相关文章推荐
- 判断-U盘拔出和插入-获取它盘符
- [代码实例][Linux系统编程]判断相对路径或绝对路径
- 用win32 API监听U盘插拔并取得其盘符/取得当前插入U盘的盘符
- 用正则表达式判断是否是正确路径格式C#代码
- 判断U盘已插入并自动COPY所有内容的批处理-U盘自动复制
- 如何得到插入U盘的盘符
- VC中用代码判断windows的版本
- Windows Live Writer插件:在WLW中插入语法高亮代码
- Linux下判断网线是否插入的代码
- .Net - C# 如何判断程序里某个窗体是否为Windows的当前活动窗体?(附代码)
- qt代码中判断windows/linux/arm等系统
- C++ windows多线程 线程描述了进程内代码的执行路径。进程中同时可以有多个线程在执行,为了使他们能够同时运行,操作系统为每个线程轮流分配CPU时间片,为了充分地利用CPU提高软件产品的性能,一
- js判断图片路径代码兼容多浏览器
- 数据库批量备份存储过程(判断盘符、路径,错误盘符返回,不存在的路径自动创建)
- 笑谈Windows10系统插入U盘显示两个盘符的解决办法
- [原创] 如何在 Java 代码中获得 WebRoot 的物理路径?(区分 Windows 和 Linux 的情况)
- win10下插入U盘连接上电脑但不显示盘符该怎么办?
- 数据库批量备份存储过程(判断盘符、路径,错误盘符返回,不存在的路径自动创建)
- DLL的线程中创建WINDOWS窗口并接收U盘移动磁盘插入消息