我正在编写一个应用程序,通过侦听WM_DEVICECHANGE 消息来检测某个 USB 大容量存储设备何时插入以及何时拔出。
我还注册了我的应用程序来监听WM_DEVICECHANGE消息DBT_DEVTYP_DEVICEINTERFACE(使用RegisterDeviceNotification API 调用),当插入或拔出 USB 大容量存储设备时,我会同时收到DBT_DEVICEARRIVAL和消息。DBT_DEVICEREMOVECOMPLETE
现在,当插入具有多个卷的 USB 设备,然后再拔下时,就会出现问题。
插入设备后,我收到以下消息:
WM_DEVICECHANGE(DBT_DEVICEARRIVAL类型DBT_DEVTYP_DEVICEINTERFACE)WM_DEVICECHANGE(DBT_DEVICEARRIVAL类型DBT_DEVTYP_VOLUME)WM_DEVICECHANGE(DBT_DEVICEARRIVAL类型DBT_DEVTYP_VOLUME)
以及拔出时的以下消息:
WM_DEVICECHANGE(DBT_DEVICEREMOVECOMPLETE类型DBT_DEVTYP_VOLUME)WM_DEVICECHANGE(DBT_DEVICEREMOVECOMPLETE类型DBT_DEVTYP_DEVICEINTERFACE)
因此,即使有两卷,也只有一条删除消息。为什么??
我有两个问题:
- 如何将
DBT_DEVTYP_DEVICEINTERFACE消息与DBT_DEVTYP_VOLUME消息相关联(本质上,我如何知道哪个VOLUME消息对应于哪个DEVICEINTERFACE消息 - 因为我为设备获取了它们)? - 有没有办法让 Windows 通知我两个卷删除?