当设备被插入/拔出的时候,WINDOWS会向每个窗体发送WM_DEVICECHANGE 消息,当消息的wParam 值等于 DBT_DEVICEARRIVAL 时,表示Media设备被插入并且已经可用;如果wParam值等于DBT_DEVICEREMOVECOMPLETE,表示Media设备已经被移出。
它们的lParam都指向一个 DEV_BROADCAST_HDR结构体,其原形如下:
这个结构体仅仅是一个“头”(HDR),其后还有附加数据,dbch_size表示结构体实例的字节数,当其中的dbch_devicetype字段值等于DBT_DEVTYP_VOLUME时,表示当前设备是逻辑驱动器,且lParam实际上指向的应该是DEV_BROADCAST_VOLUME 结构体实例(真佩服这种逻辑),DEV_BROADCAST_VOLUME 结构体原形如下:
其中dbcv_unitmask 字段表示当前改变的驱动器掩码,第一位表示驱动器号A,第二位表示驱动器号B,第三位表示驱动器号C,以此类推…… dbcv_flags 表示驱动器的类别,如果等于1,则是光盘驱动器;如果是2,则是网络驱动器;如果是硬盘、U盘则都等于0
所以,我只需要在程序中捕捉WM_DEVICECHANGE 消息,然后根据具体情况去处理即可。
下面看我的一段重载WndProc处理WM_DEVICECHANGE的过程。。
本文深入探讨了Windows系统中如何通过WM_DEVICECHANGE消息监听USB设备的插入和移除。当设备状态变化时,系统会发送不同类型的参数,通过分析DEV_BROADCAST_HDR和DEV_BROADCAST_VOLUME结构体,可以识别设备类型,如光盘、网络或USB驱动器,并针对USB设备进行特定处理。示例代码展示了如何在应用程序中捕获和处理这些事件。

1026

被折叠的 条评论
为什么被折叠?



