• 10587阅读
  • 7回复

Windows下判断U盘插入并取出盘符路径的代码。 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2007-09-05
— 本帖被 XChinux 执行加亮操作(2007-09-05) —
#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;
}
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线银色子弹

只看该作者 1楼 发表于: 2010-03-04
正在做U盘的识别,正好用得上!
我现在的项目是在做一个特定U盘设备的识别与操作。在U盘插上后先判断是不是我需要的设备,然后对U盘中的文件进行操作。
现在利用LibUSB-Win32能够识别出U盘设备了,但是无法与盘符相对应,现在一直没有解决。
目前我改变了思路,首先对是否有U盘插入进行响应,得到U盘的盘符,然后在判断该设备是否是我想要的设备。
不知这个方法是否可行,还望指点
离线银色子弹

只看该作者 2楼 发表于: 2010-03-04
发现了先获取盘符再判断设备的问题了,如果程序启动的时候,就有多个u盘已经插在了计算机上,这种情况下就没法判断哪个u盘是我想要的设备了。
问题又回到了如何获取u盘盘符的问题了
离线yangfanxing
只看该作者 3楼 发表于: 2010-03-05
U盘上放个很诡异的保护文件,读取下判断可否?比如就写入一行复杂点儿的字符串。能读到该字符串的便是想要的U盘了吧~~~
(或者修改U盘备注名?)
PHPWind好恶心。。。不想看这种界面。。。
离线snowdream
只看该作者 4楼 发表于: 2010-03-05
强贴留名~
QQ:273247606
希望与大家一起交流QT~
离线北落师门
只看该作者 5楼 发表于: 2010-03-06
这种消息感觉需要hook
离线luoyes

只看该作者 6楼 发表于: 2010-03-12
mark 也许以后能用上
离线67284727

只看该作者 7楼 发表于: 2010-03-14
谢谢共享
快速回复
限100 字节
 
上一个 下一个