有时候,我们需要检测到USB设备的插入与拔出事件,比如,一个有加密锁的程序,当加密锁拔出时,程序应当给出相应提示,并可能采取退出程序的举措。要达到这个目的,我们可以通过响应WM_DEVICECHANGE消息来达到这个目的,而WPARAM则可以告诉我们USB设备是插入还是拔出的。如果WPARAM为DBT_DEVICEARRIVAL则是插入事件,如果为DBT_DEVICEREMOVECOMPLETE则为删除事件。这两个宏义于头文件Dbt.h中。以下以VC为例做成例子。
1. 在相关cpp文件中加入头文包含:
#include
2. 在相应类中添加函数:
LRESULT CtestUsbChangeDlg::OnDeviceChange(WPARAM wParam, LPARAM lParam)
{
switch(wParam)
{
case DBT_DEVICEARRIVAL: //插入
MessageBox("设备插入!");
break;
case DBT_DEVICEREMOVECOMPLETE: //删除
MessageBox("设备删除!");
break;
}
return LRESULT();
}
3. 添加消息映射:
BEGIN_MESSAGE_MAP(CTestUsbChangeDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_MESSAGE(WM_DEVICECHANGE, OnDeviceChange)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
至此,程序已经可以检测USB设备的插入与拨出操作了。事实上,WM_DEVICECHANGE不只支持USB设备的插入与拔出,其它支持热插拔的设备也应支持,不过,因条件所限,只能测试USB设备的情况。其它设备如有网友能测试,希望能告诉我测试结果。
USB设备插入与拔出的响应
最新推荐文章于 2020-12-21 15:58:25 发布