|     
      
    Recycle Bin in Windows part 1 
    This 2 part API tip will show you how to 
    send files to, clear, and view Recycle Bin. In this article it is assumed 
    that your system settings are set to send the deleted files to the Recycling 
    Bin. Most of API material presented in this tip is also in API Viewer which 
    comes with Visual Basic. One function and several constants were not in API 
    Viewer. Please copy them for your own use. In part 1 you will learn how to 
    delete a file (thus send it to Recycle Bin) and how to clear the contents of 
    Recycle Bin straight from your app! 
    First of all, every time you delete a 
    file in Windows, a dialog box comes up asking if you want to send file to 
    the Recycling Bin. In this tip, do delete a file, I'll use Shell function 
    called SHFileOperation, which is declared in API Viewer as: 
    Public Declare Function SHFileOperation 
    Lib "shell32.dll" (lpFileOp As SHFILEOPSTRUCT) As Long 
     
    This function returns 0 if successful. Now you can 
    see that this function uses SHFILEOPSTRUCT which can be also found in API 
    Viewer. If you don't have API Viewer, here is the declaration: 
     
    Public Type SHFILEOPSTRUCT 
   hwnd As Long              
    'handle to a window, can be 0 
   wFunc As Long             
    'one of the 4 available constants shown later 
   pFrom As String             
    'string indicating a path to the file that function will work on (must be 
    zero terminated) 
   pTo As String               
    'string indicating the resulting file after operation   
   fFlags As Integer            
    'shown later 
   fAnyOperationsAborted As Long   
   hNameMappings As Long 
   lpszProgressTitle As Long ' only used if FOF_SIMPLEPROGRESS 
    End Type 
    wFunc can be one of the following 
    constants: 
     
    Public Const FO_COPY = &H2 'copy operation 
    Public Const FO_DELETE = &H3 'delete operation 
    Public Const FO_MOVE = &H1 'move operation 
    Public Const FO_RENAME = &H4 'rename operation, don't use with multiple 
    files 
     
    fFlags can be one of the following constants: 
     
    Public Const FOF_ALLOWUNDO = &H40 
    Public Const FOF_CONFIRMMOUSE = &H2 
    Public Const FOF_FILESONLY = &H80 
    Public Const FOF_MULTIDESTFILES = &H1 'The pTo member specifies multiple 
    destination files (one for each source file) rather 'than one directory 
    where all source files are to be deposited 
    Public Const FOF_NOCONFIRMATION = &H10 'Respond with "Yes to All" for any 
    dialog box that is displayed. 
    Public Const FOF_NOCONFIRMMKDIR = &H200 'Do not confirm the creation of a 
    new directory if the operation requires one to be 'created. 
    Public Const FOF_RENAMEONCOLLISION = &H8 'Give the file being operated on a 
    new name in a move, copy, or rename 'operation if a file with the target 
    name already exists 
    Public Const FOF_SILENT = &H4 'Do not display a progress dialog box 
    Public Const FOF_SIMPLEPROGRESS = &H100 'Display a progress dialog box but 
    do not show the file names. 
    Public Const FOF_WANTMAPPINGHANDLE = &H20 
    hNameMappings and FOF_WANTMAPPINGHANDLE 
    will be used by VB programmers rarely and are not discussed here. So, copy 
    the API information presented here, and paste it into your module. Every 
    time I use API functions, I like to add to the project a Module where I keep 
    my all API declarations. It's convenient that way. 
    To send a file to a Recycle Bin, call 
    SHFileOperation with SHFileOPStuct wFunc member set to FO_DELETE. Here is 
    the example of the function that will delete a file: 
    Public Function Recycle(sFilename 
    As String, bSilent As Boolean) As Boolean 
    'recycles the file specified in sFilename 
    On Error GoTo er 
     
    Dim rc As Long 
    Dim shfo As SHFILEOPSTRUCT 
     
    With shfo 
  .wFunc = FO_DELETE 'set the flag to delete the file 
  .pFrom = sFilename & Chr$(0) 'zero terminate file name 
  .fFlags = FOF_ALLOWUNDO + FOF_NOCONFIRMATION 'some additional flags 
  'check if we want silent or with progress bar delete 
  If Not bSilent Then .fFlags = .fFlags + FOF_SIMPLEPROGRESS 
    End With 
  'perform the operation 
  Recycle = (SHFileOperation(shfo) = 0) 
    Exit Function 
     
    er: Recycle = False 
    End Function 
     
    Pretty straightforward operation: set 
    SHFILEOPSTRUCT members to the values you want, and then call SHFileOperation 
    function with the structure passed to it. SHFileOperation can be reused for 
    other purposes, like moving, copying, and renaming files. 
    So you can delete a file, but that's not 
    too impressive! Files can be easily deleted many other ways. Here is 
    something impressive: emptying the contents of the Recycle Bin straight from 
    your app! Here is the function that will do the trick: 
     
    Public Declare Function SHEmptyRecycleBin Lib 
    "Shell32" Alias "SHEmptyRecycleBinA" (ByVal hwnd As Long, ByVal _        
    pszRootPath As String, ByVal dwFlags As Long) As Long 
     
    This function is not present in API Viewer! It was 
    taken from MSDN Library. Copy the declaration and use it as you wish! hwnd 
    parameter can be 0, pszRootPath should be a string to a drive letter 
    containing your Recycling Bin. When I tested the app, it seemed not to 
    metter which drive letter you pass, so just pass C: all the time. If you do 
    notice that it matters what letter is passed, please let me know. dwFlags 
    also were not in API Viewer and were taken from shellapi.h file. 
     
    Public Const SHERB_NOCONFIRMATION = 1 
    Public Const SHERB_NOPROGRESSUI = 2 
    Public Const SHERB_NOSOUND = 4 
    Using this function is relatively simple, 
    here is the example: 
     
    Public Function EmptyRecycleBin(Optional 
    hwnd As Long, Optional bSilent _  
    As Boolean, Optional sRBLoc As String) As Long 
    'empties the recycle bin 
    On Error GoTo er 
     
    Dim lFlags As Long 
     
   'check for correct handle to window 
   If IsNumeric(hwnd) = False Then hwnd = 0 
    
   'see if silent or not 
   If bSilent Then lFlags = SHERB_NOPROGRESSUI 
    
   'empty the recycle bin 
   EmptyRecycleBin = SHEmptyRecycleBin(hwnd, sRBLoc, lFlags) 
     
   Exit Function 
    er: 
   EmptyRecycleBin = -1 
    End Function 
     
    Easy! Don't you think? Next tip will show you how 
    to open Recycle Bin from your application! It's really cool.  
      
 
      Written By Laimonas Simutis. 2002.
      laijerrad@yahoo.com 
 
        
       |