目录

MFC之设备插入拔出检测

目录

通过注册消息处理函数,检测Windows上的设备插入、拔出事件。

主要有以下步骤:

  1. 添加消息映射
BEGIN_MESSAGE_MAP(demoDlg, CDialogEx)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_WM_TIMER()
    ON_WM_DEVICECHANGE()
END_MESSAGE_MAP()
  1.  声明消息处理函数
afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData);
  1. 实现消息处理函数
BOOL demoDlg::OnDeviceChange(UINT nEventType, DWORD dwData)
{
    DEV_BROADCAST_DEVICEINTERFACE* dbd = (DEV_BROADCAST_DEVICEINTERFACE*)dwData;
    //这里进行信息匹配,比如 GUID 等信息

    //针对各个事件进行处理.
    switch (nEventType) {
    case DBT_DEVICEARRIVAL:		//设备插入
        ... ...
        break;
    case DBT_DEVICEREMOVECOMPLETE:	//设备拔出
        ... ...
        break;
    default:
        break;
    }
    return TRUE;
}
  1. 注册设备插拔通知事件
DEV_BROADCAST_DEVICEINTERFACE DevInt;
memset(&DevInt, 0, sizeof(DEV_BROADCAST_DEVICEINTERFACE));
DevInt.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE);
DevInt.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
DevInt.dbcc_classguid = { 0x4d1e55b2, 0xf16f, 0x11cf, { 0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } }; //HID_CLASS
if (!RegisterDeviceNotification(this->GetSafeHwnd(), &DevInt, DEVICE_NOTIFY_WINDOW_HANDLE))
    return FALSE;

搞定!