当设备被插入/拔出的时候,WINDOWS会向每个窗体发送WM_DEVICECHANGE 消息,当消息的wParam 值等于 DBT_DEVICEARRIVAL 时,表示Media设备被插入并且已经可用;如果wParam值等于DBT_DEVICEREMOVECOMPLETE,表示Media设备已经被移出。 它们的lParam都指向一个 DEV_BROADCAST_HDR结构体,其原形如下: 1 typedef struct _DEV_BROADCAST_HDR 2 { 3 DWORD dbch_size; 4 DWORD dbch_devicetype; 5 DWORD dbch_reserved; 6 } DEV_BROADCAST_HDR, *PDEV_BROADCAST_HDR; 这个结构体仅仅是一个“头”(HDR),其后还有附加数据,dbch_size表示结构体实例的字节数,当其中的dbch_devicetype字段值等于DBT_DEVTYP_VOLUME时,表示当前设备是逻辑驱动器,且lParam实际上指向的应该是DEV_BROADCAST_VOLUME 结构体实例(真佩服这种逻辑),DEV_BROADCAST_VOLUME 结构体原形如下: 1 typedef struct _DEV_BROADCAST_VOLUME { 2 DWORD dbcv_size; 3 DWORD dbcv_devicetype; 4 DWORD dbcv_reserved; 5 DWORD dbcv_unitmask; 6 WORD dbcv_flags; 7 } DEV_BROADCAST_VOLUME, *PDEV_BROADCAST_VOLUME; 其中dbcv_unitmask 字段表示当前改变的驱动器掩码,第一位表示驱动器号A,第二位表示驱动器号B,第三位表示驱动器号C,以此类推…… dbcv_flags 表示驱动器的类别,如果等于1,则是光盘驱动器;如果是2,则是网络驱动器;如果是硬盘、U盘则都等于0 |
深入了解WM_DEVICECHANGE消息
最新推荐文章于 2023-11-20 21:30:00 发布
2008-09-29 18:22