Extracción segura de un pendrive


Para los interesados en saber cómo extraer un pendrive de forma segura con Delphi, aquí os dejo un documento con varias funciones que os resolverán esta tarea.
function OpenVolume(ADrive: char): THandle;
function LockVolume(AVolumeHandle: THandle): boolean;
function DismountVolume(AVolumeHandle: THandle): boolean;
function PreventRemovalOfVolume(AVolumeHandle: THandle; APreventRemoval: boolean): boolean;
function AutoEjectVolume(AVolumeHandle: THandle): boolean;
function EjectVolume(ADrive: char): boolean;



También se puede extraer el pendrive mediante llamada a la función HotPlugEjectDevice de la librería hotplug.dll de Windows.

Su definición en Delphi es:
function HotPlugEjectDevice(hwndParent: Cardinal; lpDeviceInstanceId: PWideChar): LongBool; stdcall external 'hotplug';

El código con WinExec es el siguiente:
WinExec(PChar('c:\windows\system32\rundll32 hotplug.dll,HotplugEjectDevice '),SW_SHOWNORMAL);

y para hacer aparecer la ventana de desconectar hardware sería:
WinExec(PChar('c:\windows\system32\rundll32 shell32.dll,Control_RunDLL hotplug.dll'),SW_SHOWNORMAL);

3 comentarios:

  1. El winexec no me hace nada...:C
    Me sale una ventana diciendo que no encuentra la hotplug.dll

    ResponderEliminar
  2. hotplug.dll debe estar en c:\windows\system32

    ResponderEliminar
  3. Buenas amigo, una consulta como lo puedo usar en lazarus, pues me expulsa las memorias usb, pero no los discos duros usb, saludos.

    ResponderEliminar