Mega Code Archive

 
Categories / Delphi / System
 

How To Operate On The Recycle Bin

Title: How To Operate On The Recycle Bin This FAQ covers a couple of functions which involve the recycle bin. The first involves deleting a file to the recycle bin, and the other involves emptying the recycle bin. SHFileOperation (or how do I delete a file to the recycle bin?) SHFileOperation SHFileOperation encapsulates the file operation interface for Explorer. This allows you to copy, move, rename, or delete files. While there are some benefits built in to doing any of these operations, which are evident from observing the operation of Explorer and studying the documentation, the most interesting one involves the ability to delete a file to the recycle bin instead of to nothingness. Here is how to do that. This presents a sufficient example for calling SHFileOperation for the other functions, if you provide the proper parms. CODE function RecycleDelete(whndle: THandle; inpath: string): integer; { deletes 'inpath', removing it to the recycle bin. You can specify a list of files, as long as you put #0 between the files, and double-terminate it with #0. } var FileOp: TSHFileOpStructA; begin inpath := inpath + #0; with FileOp do begin wnd := whndle; wFunc := FO_DELETE; //FO_COPY, FO_DELETE, FO_MOVE, FO_RENAME pFrom := PChar(inpath); fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION; fAnyOperationsAborted := false; hNameMappings := nil; lpszProgressTitle := nil; end; Result := SHFileOperationA(FileOp); { at this point, if you allow confirmation, you can interrogate FileOp.fAnyOperationsAborted to determine if the user aborted your operation. } end; The first thing is that any string must be double-terminated. This is why I'm assigning the #0 to inpath upon entry. The comments describe the other features of inputting files. FOF_ALLOWUNDO - allows going to the recycle bin (or UNDO). Removing this makes it into a regular delete function. FOF_NOCONFIRMATION - removes the dialog box asking if you really want to do this. More options are seen in the documentation both for delete and the other operations depending on what you need. SHEmptyRecycleBin This function empties the recycle bin. SHEmptyRecycleBin CODE function SHEmptyRecycleBin(Wnd:HWnd; pszRootPath:PChar; pwFlags:Word):Integer; stdcall; external 'SHELL32.DLL' name 'SHEmptyRecycleBinA'; function EmptyRecycleBin(Confirm: Boolean): integer; const SHERB_NOCONFIRMATION = $00000001; SHERB_NOPROGRESSUI = $00000002; SHERB_NOSOUND = $00000004; begin if Confirm then Result := SHEmptyRecycleBin(0, nil, 0) else Result := SHEmptyRecycleBin(0, nil, SHERB_NOCONFIRMATION); end; The parms are pretty self-explanatory. The interesting part is the nil string (pszRootPath). Making it nil empties recycle bins on all drives. You can define this to be a root path (e.g. "C:\"), and it will empty only that recycle bin.