本文共 1829 字,大约阅读时间需要 6 分钟。
实现某些功能的时候使用到了USB设备,需要根据USB设备的插拔来更改程序的状态,这个时候就用到了WM_DEVICECHANGE消息。
需要注意的是:
1. WM_DEVICECHANGE消息只能手动添加,类向导中没有
2. 这个消息只有顶层窗口才会收到(如果你是开发嵌在网页中的OCX,那么你无法在OCX的ctrl中接收到这个消息)
afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData);
BOOL CMainDlg::OnDeviceChange(UINT nEventType, DWORD dwData){ PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)dwData; switch (nEventType) { case DBT_DEVICEARRIVAL: if (m_bListenUSB && lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME) { m_bListenUSB = false; PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb; m_cDrivePath[0] = FirstDriveFromMask(lpdbv ->dbcv_unitmask);//得到u盘盘符 } break; default: break; } return FALSE; }
TCHAR FirstDriveFromMask(ULONG unitmask){ char i; for (i = 0; i < 26; ++i) { if (unitmask & 0x1)//看该驱动器的状态是否发生了变化 break; unitmask = unitmask >> 1; } return (i + 'A');}
BEGIN_MESSAGE_MAP(CThreadDlg, CDialog) ON_WM_DEVICECHANGE()END_MESSAGE_MAP()
转载地址:http://lzxui.baihongyu.com/