有没有哪位大牛写了这个的Procedure

解决方案 »

  1.   

    const 
         DBT_DEVICEARRIVAL = $8000;  // system detected a new device
         DBT_DEVICEREMOVECOMPLETE = $8004;  // device is gone
         DBT_DEVTYP_VOLUME = $00000002;  // logical volume
         DBTF_MEDIA = $0001;  // media comings and goingstype
      PDEV_BROADCAST_HDR = ^TDEV_BROADCAST_HDR;
      TDEV_BROADCAST_HDR = packed record
        dbch_size : DWORD;
        dbch_devicetype : DWORD;
        dbch_reserved : DWORD;
      end;
      PDEV_BROADCAST_VOLUME = ^TDEV_BROADCAST_VOLUME;
      TDEV_BROADCAST_VOLUME = packed record
         dbcv_size : DWORD;
         dbcv_devicetype : DWORD;
         dbcv_reserved : DWORD;
         dbcv_unitmask : DWORD;
         dbcv_flags : WORD;
      end;
    private
      procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;procedure TFrm_Main.WMDeviceChange(var Msg: TMessage);
    var
      lpdb : PDEV_BROADCAST_HDR;
      lpdbv : PDEV_BROADCAST_VOLUME;
      unitmask:DWORD;
      i,attr:integer;
      inifile:TIniFile;
    begin
      lpdb := PDEV_BROADCAST_HDR(Msg.LParam);
      case Msg.WParam of
        DBT_DEVICEARRIVAL :
          if lpdb.dbch_devicetype=DBT_DEVTYP_VOLUME then
          begin
            lpdbv := PDEV_BROADCAST_VOLUME(lpdb);
            unitmask:=lpdbv.dbcv_unitmask
          end;
        DBT_DEVICEREMOVECOMPLETE:
        begin
          MessageDlg('Your disk is removed!',mtWarning,[mbOK],0);
        end;  
      end;
    end;自己再改一下.