FAQ VCL
Корзина

:: Меню ::
:: На главную ::
:: FAQ ::
:: Заметки ::
:: Практика ::
:: Win API ::
:: Проекты ::
:: Скачать ::
:: Секреты ::
:: Ссылки ::

:: Сервис ::
:: Написать ::

:: MVP ::

:: RSS ::

Яндекс.Метрика

Как удалить файл в корзину?

// Способ первый
uses
  {...,} ShlObj, ActiveX, ShellAPI;

procedure DelToRecycleBin(fName: string);
var
  fOperation: IFileOperation;
  DelItem: IShellItem;
begin
  if Succeeded(CoCreateInstance(CLSID_FileOperation, Nil, CLSCTX_INPROC_SERVER,
    IID_IFileOperation, fOperation)) then
  begin
    // Устанавливаем флаги выполняемой операции
    fOperation.SetOperationFlags(FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT);
    // Создаем объект IShellItem из пути к файлу
    if Succeeded(SHCreateItemFromParsingName(PChar(fName), nil, IID_IShellItem, DelItem)) then
    begin
      // Подготавливаем операцию удаления файла
      if Succeeded(fOperation.DeleteItem(DelItem, nil)) then
      begin
        // Выполняем операцию
        fOperation.PerformOperations;
      end;
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  DelToRecycleBin('c:\test.txt');
end;

// Способ второй
uses
  {...,} ShellAPI;

function DeleteFile( sFileName: string ): boolean;
var
  fos: TSHFileOpStruct;
begin
   sFileName := sFileName + #0;
   FillChar( fos, SizeOf( fos ), 0 );
   with fos do
   begin
      wFunc := FO_DELETE;
      pFrom := PChar( sFileName );
      fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION or FOF_SILENT;
   end;
   Result := ( 0 = ShFileOperation( fos ) );
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   DeleteFile( 'c:\test.txt' );
end;

// Способ третий
uses
  {...,} ShellAPI;

function DeleteFile( const FileName: string; Wnd: HWND = 0 ): boolean;
var
  FileOp: TSHFileOpStruct;
begin
   FillChar( FileOp, SizeOf( FileOp ), 0 );
   if Wnd = 0 then
      Wnd := Application.Handle;
   FileOp.Wnd := Wnd;
   FileOp.wFunc := FO_DELETE;
   FileOp.pFrom := PChar( FileName );
   FileOp.fFlags := FOF_ALLOWUNDO or FOF_NOERRORUI or FOF_SILENT;
   Result := ( SHFileOperation( FileOp ) = 0 ) and ( not FileOp.fAnyOperationsAborted );
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   DeleteFile( 'c:\test.txt', Handle );
end;


Как очистить корзину?

procedure EmptyRecycleBin;
const
  SHERB_NOCONFIRMATION = $00000001;
  SHERB_NOPROGRESSUI = $00000002;
  SHERB_NOSOUND = $00000004;

type
  TSHEmptyRecycleBin = function ( Wnd: HWND; pszRootPath: PChar;
  dwFlags: DWORD): HRESULT; stdcall;

var
  SHEmptyRecycleBin: TSHEmptyRecycleBin;
  LibHandle: THandle;

begin
   LibHandle := LoadLibrary( PChar( 'Shell32.dll' ) );
   if LibHandle <> 0 then
      @SHEmptyRecycleBin := GetProcAddress( LibHandle, 'SHEmptyRecycleBinA' )
   else
   begin
      MessageDlg( 'Failed to load Shell32.dll.', mtError, [mbOK], 0 );
      Exit;
   end;

   if @SHEmptyRecycleBin <> nil then
      SHEmptyRecycleBin( Application.Handle, nil,
                         SHERB_NOCONFIRMATION or SHERB_NOPROGRESSUI or SHERB_NOSOUND );
   FreeLibrary( LibHandle );
   @SHEmptyRecycleBin := nil;
end;


Как показать корзину Windows?

uses
  {...,} ActiveX, ShlObj, ShellApi; 

procedure FreePidl( pidl: PItemIDList );
var
  allocator: IMalloc;
begin
   if Succeeded( ShlObj.SHGetMalloc( allocator ) ) then
   begin
      allocator.Free( pidl );
      {$IFDEF VER90}
      allocator.Release;
      {$ENDIF}
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  exInfo: TShellExecuteInfo;
begin
   FillChar( exInfo, SizeOf( exInfo ), 0 );
   with exInfo do
   begin
      cbSize := SizeOf( exInfo );
      fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_IDLIST;
      Wnd := Handle;
      nShow := SW_SHOWNORMAL;
      lpVerb := 'open';
      ShGetSpecialFolderLocation( Handle, CSIDL_BITBUCKET, PItemIDLIst( lpIDList ) );
   end;
   ShellExecuteEx( @exInfo );
   FreePIDL( exInfo.lpIDList );
end;


Как изменить заголовок корзины?

uses
  {...,} Registry; 

procedure RenameRecycle( NewName: string );
var
  Reg: TRegistry;
begin
   Reg := TRegistry.Create;
   Reg.RootKey := HKEY_CLASSES_ROOT;
   Reg.OpenKey( '\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}', false );
   Reg.WriteString( '', NewName );
   Reg.CloseKey;
   Reg.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   RenameRecycle( 'Помойка' );
end;

// Чтобы увидеть изменения, нужно перезагрузить компьютер

При использовании материала - ссылка на сайт обязательна