工作需要,需要随时检测U盘的插入或拔出状态,然后根据状态做出相关操作。在网上搜索到下列方法:
今天一位老兄要我帮忙做一个软件,需要把在U盘插入USB接口激活之后自动把U盘里的内容拷贝到硬上。拷贝文件不难,麻烦的就是不知道怎么检测U盘是否激活,激活后又是哪个盘符。
google了一下,在MSDN上看了几个例子,找到了检测U盘插入,并确定其盘符的方法。
下面给出窗口的回调函数:
原理很简单检测U盘是否被插入是通过监听WM_DEVICECHANGE消息来实现的。18,19行是从WM_DEVICECHANGE的lParam里获取盘符。
FirstDriveFromMask是一个用返回盘符(A,B,C ....)的简单函数
具体是哪个盘符的,我这边不太关系,主要是需要截获U盘插拔消息WM_DEVICECHANG,然后进行相关处理。最终在PreTranslateMessage(MSG* pMsg)里if (WM_DEVICECHANGE == pMsg->message)判断里来进行的处理。
至此,问题解决。
上述方式在win xp下运行是完全没问题的,可是在Win7或Vista下却根本没有WM_DEVICECHANG消息,在网络搜索后发现是由于win7的安全机制引起,于是采用下述方式来实现:
在Win7 64bit 下验证OK。