不是需要procedure WMDeviceChange(var Msg: TMessage); message WM_DEVICECHANGE;要写个程序,安全删除U盘程序,现在想安全删除指定盘符的U盘(弹出、禁用)。

解决方案 »

  1.   

    用第三方的 unplug.exe 简单、方便
      

  2.   

    function TForm1.EjectMedia(DriveLetter:   String):   Boolean;
    var
      hr:THandle;
      buffer: Cardinal;
    begin
      hr := CreateFile(PChar('\\.\'+DriveLetter+':'),GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,NIL,OPEN_EXISTING,0,0);
      if hr <> INVALID_HANDLE_VALUE then
        if DeviceIOControl(hr,IOCTL_STORAGE_EJECT_MEDIA,NIL,0,NIL,0,buffer,NIL) then
          result := true else result := false;
      CloseHandle(hr);
    end;
      

  3.   

    hr := CreateFile(PChar('\\.\'+DriveLetter+':'),GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,NIL,OPEN_EXISTING,0,0);
    在PChar('\\.\'+DriveLetter+':')中使用('\\.\'+‘u盘盘符’+':')使用不行。
    u盘的图标仍在,u盘中的内容仍然可以读写。
      

  4.   

    email:[email protected] hr <> INVALID_HANDLE_VALUE then 
    hr等于INVALID_HANDLE_VALUE,直接到CloseHandle(hr),结束函数
      

  5.   

    只要好用分可以再加,200分用了60分,可以再加100分。获取U盘序列号(ID)的方法(物理序列号),剩下的分都给你。
      

  6.   

    代码可以发到邮箱email:[email protected] 
      

  7.   


    EMAIL已发, ID号好像JEDI控件里有
      

  8.   

    问题出现在这一句if hr <> INVALID_HANDLE_VALUE then ,
    hr =INVALID_HANDLE_VALUE,下面执行不了
      

  9.   

     dinoalex问题解决U盘(弹出、启用),与delphi的版本无关。那100分如何给你。