用什么方法可以实现一在电脑中插入USB移动硬盘,或者在读卡器中插入存储卡,就在程序中响应一个事件?就象XP的那样,一插入外接设备就会弹出对话框.

解决方案 »

  1.   

    使用 RegisterDeviceNotification 函数的
    不过可能要 D6 、VCSP6 或者 VC.net 才能直接编译在 VC 中 需要在stdafx.h中定义 #define WINVER 0x0500 #include <dbt.h>
    否则 HDEVNOTIFY 没有定义不过不知道能不能使用 DWORD 代替?
      

  2.   

    USB被看成一个驱动器~~
    当激活或关闭的时候系统会给所有窗体发送一个WM_DEVICECHANGE消息~~
    所以监控这个消息就可以实现了~~type
      TForm1 = class(TForm)
    //....
      private
        procedure WMDEVICECHANGE(var Msg: TMessage); message WM_DEVICECHANGE;
    //....
      end;procedure TFormBookBrowse.WMDEVICECHANGE(var Msg: TMessage);
    const
      DBT_DEVICEARRIVAL = $8000;
      DBT_DEVICEREMOVECOMPLETE = $8004;
    begin
      inherited;
    //用Msg.LParam区分是光驱还是USB,数值自己打日志得到~~
      case Msg.WParam of
        DBT_DEVICEARRIVAL: begin
          { TODO -oZswang -c2003-11-22 : 驱动器就绪 }
        end;
        DBT_DEVICEREMOVECOMPLETE: begin
          { TODO -oZswang -c2003-11-22 : 驱动器关闭 }
        end;
      end;
    end;