Vaciar la papelera de Windows  

Enviado Por: Radikal (Q3 Team)
Web : http://www.q3.nu
Email: radikal@q3.nu
Fecha: 11/04/00

Truco accedido 57 veces

 


Tenemos un truco para borrar ficheros enviándolos a la papelera de Windows, en concreto el truco:

[199] - Borrar ficheros enviandolos a la papelera de Windows

En este otro, veremos cómo vaciarla.

  • Pon un TButton en tu form, y pon este código en su evento OnClick:


     procedure TForm1.Button1Click(Sender: TObject);
    
       procedure VaciaPapelera;
    
       type
         TSHEmptyRecycleBin = function (Wnd: HWND;
                                        LPCTSTR: PChar;
                                        DWORD: Word): integer; stdcall;
       var
         MangoLib           : THandle;
         SHEmptyRecycleBin  : TSHEmptyRecycleBin;
       begin
          {Cargamos SHell32.DLL}
          {Load Shell32.DLL}
          MangoLib := LoadLibrary(PChar('Shell32.dll'));
    
          {Si no se pudo... error}
          {if not... error}
          if MangoLib = 0 then
            Raise Exception.Create( 'No se pudo cargar Shell32.DLL'+#13+
                                    'Cannot load Shell32.DLL');
    
          {Buscamos dentro de la DLL la funcion que queremos}
          {Search into DLL the required funtion}
          @SHEmptyRecycleBin := GetProcAddress(MangoLib, 'SHEmptyRecycleBinA');
    
          {Si no existe... error}
          {If don't exists... error}
          if @SHEmptyRecycleBin = nil then
          begin
            FreeLibrary(MangoLib);
            Raise Exception.Create( 'No se pudo encontrar SHEmptyRecycleBinA en Shell32.DLL'+#13+
                                    'Cannot find SHEmptyRecycleBinA in Shell32.DLL');
          end;
    
         {Vaciamos la papelera, sin sonido ni confirmación}
         {Empty the Recycle bin...}
         SHEmptyRecycleBin(Application.Handle,'',7);
    
         {Liberamos la DLL}
         {Free the DLL}
         FreeLibrary(MangoLib);
       end;
    
     begin
       try
         VaciaPapelera;
       except
         ShowMessage('Fallo al vaciar la papelera de Windows...');
       end;
     end;
    



    Funcionamiento:
    Simplemente se trata de llamar a la funcion SHEmptyRecycleBin que está dentro de la DLL Shell32.DLL. La aparente complicación de este truco viene de que Delphi no declara esta función en ninguna API, así que tenemos que hacerlo nosotros.
    Para ello simplemente cargamos la DLL con LoadLibrary y luego buscamos la función dentro de ella. Si alguno de estos dos pasos falla, generamos una excepcion que podremos tratar, enmascarar o lo que queramos en aquel punto donde llamemos a la función.