zoukankan      html  css  js  c++  java
  • WM_DEVICECHANGE 说明

      在Windows当中,当设备被插入/拔出的时候,WINDOWS会向每个窗体发送WM_DEVICECHANGE 消息,当消息的wParam 值等于 DBT_DEVICEARRIVAL 时,表示Media设备被插入并且已经可用;如果wParam值等于DBT_DEVICEREMOVECOMPLETE,表示Media设备已经被移出。

    它们的lParam都指向一个 DEV_BROADCAST_HDR结构体,其原形如下:

    typedef struct _DEV_BROADCAST_HDR

     {

      DWORD dbch_size;

      DWORD dbch_devicetype;

      DWORD dbch_reserved;

    } DEV_BROADCAST_HDR, *PDEV_BROADCAST_HDR;

    这个结构体仅仅是一个“头”(HDR),其后还有附加数据,dbch_size表示结构体实 例的字节数,当其中的dbch_devicetype字段值等于DBT_DEVTYP_VOLUME时,表示当前设备是逻辑驱动器,且lParam实际上 指向的应该是DEV_BROADCAST_VOLUME 结构体实例(真佩服这种逻辑),DEV_BROADCAST_VOLUME 结构体原形如下:

    typedef struct _DEV_BROADCAST_VOLUME {

         DWORD dbcv_size;

        DWORD dbcv_devicetype;

         DWORD dbcv_reserved;

         DWORD dbcv_unitmask;

         WORD dbcv_flags;

     } DEV_BROADCAST_VOLUME, *PDEV_BROADCAST_VOLUME;

    其中dbcv_unitmask 字段表示当前改变的驱动器掩码,第一位表示驱动器号A,第二位表示驱动器号B,第三位表示驱动器号C,以此类推…… dbcv_flags 表示驱动器的类别,如果等于1,则是光盘驱动器;如果是2,则是网络驱动器;如果是硬盘、U盘则都等于0

    所以,我只需要在程序中捕捉WM_DEVICECHANGE 消息,然后根据具体情况去处理即可,


  • 相关阅读:
    正则表达式体会
    checkbox、全选反选,获取值
    弹出窗体值回调
    页面点击任意js事件,触发360、IE浏览器新页面
    XML增、删、改
    面试题
    行列转换
    DataTable 和Json 字符串互转
    前台js与后台方法互调
    文件与base64二进制转换
  • 原文地址:https://www.cnblogs.com/imhurley/p/2016548.html
Copyright © 2011-2022 走看看