NAME
     Win32::FileOp - 0.11

DESCRIPTION
    Module for file operations with fancy dialog boxes, for moving
    files to recycle bin, reading and updating INI files and file
    operations in general.

    Unless mentioned otherwise all functions work both under WinNT
    and Win9x.

    Version 0.11

  Functions

    `GetDesktopHandle' `GetWindowHandle'

    `Copy' `CopyConfirm' `CopyConfirmEach' `CopyEx'

    `Move' `MoveConfirm' `MoveConfirmEach' `MoveEx'

    `MoveFile' `MoveFileEx' `CopyFile' `MoveAtReboot'

    `Recycle' `RecycleConfirm' `RecycleConfirmEach' `RecycleEx'

    `Delete' `DeleteConfirm' `DeleteConfirmEach' `DeleteEx'
    `DeleteAtReboot'

    `UpdateDir' `FillInDir'

    `Compress' `Uncompress' `Compressed' `SetCompression'
    `GetCompression' `CompressDir' `UncompressDir'

    `AddToRecentDocs' `EmptyRecentDocs'

    `WriteToINI' `WriteToWININI' `ReadINI' `ReadWININI'

    `DeleteFromINI' `DeleteFromWININI'

    `OpenDialog' `SaveAsDialog' `BrowseForFolder'

    `Map' `Unmap' `Disconnect' `Mapped'

    `Subst' `Unsubst' <Substed>

    To get the error message from most of these functions, you
    should not use $!, but $^E or
    Win32::FormatMessage(Win32::GetLastError())!

    GetDesktopHandle
       use Win32::FileOp
       $handle = GetDesktopHandle()

      Same as: $handle = $Win32::FileOp::DesktopHandle

      Used to get desktop window handle when confirmation is used.
      The value of the handle can be gotten from
      $Win32::FileOp::DesktopHandle.

      Returns the Desktop Window handle.

    GetWindowHandle
       use Win32::FileOp
       $handle = GetWindowHandle()

      Same as: $handle = $Win32::FileOp::WindowHandle

      Used to get the console window handle when confirmation is
      used. The value of the handle can be gotten from
      $Win32::FileOp::WindowHandle.

      Returns the Console Window handle.

    Copy
       Copy ($FileName => $FileOrDirectoryName [, ...])
       Copy (\@FileNames => $DirectoryName [, ...] )
       Copy (\@FileNames => \@FileOrDirectoryNames [, ...])

      Copies the specified files. Doesn't show any confirmation nor
      progress dialogs.

      It may show an error message dialog, because I had to omit
      FOF_NOERRORUI from its call to allow for autocreating
      directories.

      You should end the directory names by backslash so that they
      are not mistaken for filenames. It is not necessary if the
      directory already exists or if you use Copy \@filenames =>
      $dirname.

      Returns true if successful.

      Rem: Together with Delete, Move, DeleteConfirm, CopyConfirm,
      MoveConfirm, CopyEx, MoveEx, DeleteEx and Recycle based on
      Win32 API function SHFileOperation().

    CopyConfirm
       CopyConfirm ($FileName => $FileOrDirectoryName [, ...])
       CopyConfirm (\@FileNames => $DirectoryName [, ...] )
       CopyConfirm (\@FileNames => \@FileOrDirectoryNames [, ...])

      Copies the specified files. In case of a collision, shows a
      confirmation dialog. Shows progress dialogs.

      Returns true if successful.

    CopyConfirmEach
      The same as CopyConfirm.

    CopyEx
       CopyEx ($FileName => $FileOrDirectoryName, [...], $options)
       CopyEx (\@FileNames => $DirectoryName, [...], $options)
       CopyEx (\@FileNames => \@FileOrDirectoryNames, [...], $options)

      Copies the specified files. See below for the available
      options (`FOF_' constants).

      Returns true if successful.

    Move
      Moves the specified files. Parameters as `Copy'

      It may show an error message dialog, because I had to omit
      FOF_NOERRORUI from its call to allow for autocreating
      directories.

    MoveConfirm
      Moves the specified files. Parameters as `CopyConfirm'

    MoveConfirmEach
      The same as MoveConfirm

    MoveEx
      Moves the specified files. Parameters as `CopyEx'

    MoveAtReboot
       MoveAtReboot ($FileName => $DestFileName, [...])

      This function moves the file during the next start of the
      system.

    MoveFile
       MoveFile ($FileName => $DestFileName [, ...])

      Move files. This function uses API function MoveFileEx as well
      as MoveAtReboot. It may be a little quicker than `Move', but
      it doesn't understand wildcards and the $DestFileName may not
      be a directory.

      REM: Based on Win32 API function MoveFileEx().

    MoveFileEx
       MoveFileEx ($FileName => $DestFileName [, ...], $options)

      This is a simple wrapper around the API function MoveFileEx,
      it calls the function for every pair of files with the
      $options you specify. See below for the available options
      (`FOF_'... constants).

      REM: Based on Win32 API function MoveFileEx().

    CopyFile
       CopyFile ($FileName => $DestFileName [, $FileName2 => $DestFileName2 [, ...]])

      Copy a file somewhere. This function is not able to copy
      directories!

      REM: Based on Win32 API function CopyFile().

    Recycle
       Recycle @filenames

      Send the files into the recycle bin. You will not get any
      confirmation dialogs.

      Returns true if successful.

    RecycleConfirm
       RecycleConfirm @filenames

      Send the files into the recycle bin. You will get a
      confirmation dialog if you have "Display delete confirmation
      dialog" turned on in your recycle bin. You will confirm the
      deletion of all the files at once.

      Returns true if successful. Please remember that this function
      is successful even if the user chose [No] on the confirmation
      dialog!

    RecycleConfirmEach
       RecycleConfirmEach @filenames

      Send the files into the recycle bin. You will get a separate
      confirmation dialog for each file if you have "Display delete
      confirmation dialog" turned on in your recycle bin. You will
      confirm the deletion of all the files at once.

      Returns the number of files that were successfully deleted.

    RecycleEx
       RecycleEx @filenames, $options

      Send the files into the recycle bin. You may specify the
      options for deleting, see below. You may get a confirmation
      dialog if you have "Display delete confirmation dialog" turned
      on in your recycle bin, if so, you will confirm the deletion
      of all the files at once.

      Returns true if successful. Please remember that this function
      is successful even if the user chose [No] on the confirmation
      dialog!

      The $options may be constructed from `FOF_'... constants.

    Delete
       Delete @filenames

      Deletes the files. You will not get any confirmation dialogs.

      Returns true if successful.

    DeleteConfirm
       DeleteConfirm @filenames

      Deletes the the files. You will get a confirmation dialog to
      confirm the deletion of all the files at once.

      Returns true if successful. Please remember that this function
      is successful even if the user selected [No] on the
      confirmation dialog!

    DeleteConfirmEach
       DeleteConfirmEach @filenames

      Deletes the files. You will get a separate confirmation dialog
      for each file.

      Returns the number of files that were successfully deleted.

    DeleteEx
       DeleteEx @filenames, $options

      Deletes the files. You may specify the options for deleting,
      see below. You may get a confirmation dialog if you have
      "Display delete confirmation dialog" turned on in your recycle
      bin.

      Returns true if successful. Please remember that this function
      is successful even if the user selected [No] on the
      confirmation dialog!

    DeleteAtReboot
       DeleteAtReboot @files

      This function moves the file during the next start of the
      system.

    UpdateDir
       UpdateDir $SourceDirectory, $DestDirectory [, \&callback]

      Copy the newer or updated files from $SourceDir to $DestDir.
      Processes subdirectories! The &callback function is called for
      each file to be copied. The parameters it gets are exactly the
      same as the callback function in File::Find. That is $_,
      $File::Find::dir and $File::Find::name.

      If this function returns a false value, the file is skipped.

       Ex.

        UpdateDir 'c:\dir' => 'e:\dir', sub {print '.'};
        UpdateDir 'c:\dir' => 'e:\dir', sub {if (/^s/i) {print '.'}};

    FillInDir
       FillInDir $SourceDirectory, $DestDirectory [, \&callback]

      Copy the files from $SourceDir not present in $DestDir.
      Processes subdirectories! The &callback works the same as in
      UpdateDir.

    Compress
       Compress $filename [, ...]

      Compresses the file(s) or directories using the transparent
      WinNT compression (The same as checking the "Compressed"
      checkbox in Explorer properties fo the file).

      It doesn't compress all files and subdirectories in a
      directory you specify. Use ComressDir for that.
      Compress($directory) only sets the compression flag for the
      directory so that the new files are compressed by default.

      WinNT only!

      REM: Together with other compression related functions based
      on DeviceIoControl() Win32 API function.

    Uncompress
       Uncompress $filename [, ...]

      Uncompresses the file(s) using the transparent WinNT
      compression (The same as unchecking the "Compressed" checkbox
      in Explorer properties fo the file).

      WinNT only!

    Compressed
       Compressed $filename

      Checks the compression status for a file.

    SetCompression
       SetCompression $filename [, $filename], $value

      Sets the compression status for file(s). The $value should be
      either 1 or 0.

    GetCompression
       GetCompression $filename

      Checks the compression status for a file.

    CompressDir
       CompressDir $directory, ... [, \&callback]

      Recursively descends the directory(ies) specified and
      compresses all files and directories within. If you specify
      the \&callback, the specified function gets executed for each
      of the files and directories. If the callback returns false,
      no compression is done on the file/directory.

      The parameters the callback gets are exactly the same as the
      callback function in File::Find. That is $_, $File::Find::dir
      and $File::Find::name.

    UncompressDir
       UncompressDir $directory, ... [, \&callback]

      The counterpart of CompressDir.

    AddToRecentDocs
       AddToRecentDocs $filename [, ...]

      Add a shortcut(s) to the file(s) into the Recent Documents
      folder. The shortcuts will appear in the Documents submenu of
      Start Menu.

      The paths may be relative.

      REM: Based on Win32 API function SHAddToRecentDocs().

    EmptyRecentDocs
       EmptyRecentDocs;

      Deletes all shortcuts from the Recent Documents folder.

      REM: Based on Win32 API function SHAddToRecentDocs(). Strange
      huh?

    WriteToINI
       WriteToINI $INIfile, $section, $name1 => $value [, $name2 => $value2 [, ...]]

      Copies a string into the specified section of the specified
      initialization file. You may pass several name/value pairs at
      once.

      Returns 1 if successful, undef otherwise. See
      Win32::GetLastError &
      Win32::FormatMessage(Win32::GetLastError) if failed for the
      error code and message.

      REM: Based on Win32 API function WritePrivateProfileString().

    WriteToWININI
       WriteToWININI $section, $name1 => $value1 [, $name2 => $value2 [, ...]]

      Copies a string into the specified section of WIN.INI. You may
      pass several name/value pairs at once.

      Please note that some values or sections of WIN.INI and some
      other INI files are mapped to registry so they do not show up
      in the INI file even if they were successfully written!

      REM: Based on Win32 API function WriteProfileString().

    ReadINI
          $value = ReadINI $INIfile, $section, $name [, $defaultvalue]

      Reads a value from an INI file. If you do not specify the
      default and the value is not found you'll get undef.

      REM: Based on Win32 API function GetPrivateProfileString().

    ReadWININI
          $value = ReadWININI $section, $name [, $defaultvalue]

      Reads a value from WIN.INI file. If you do not specify the
      default and the value is not found you'll get undef.

      Please note that some values or sections of WIN.INI and some
      other INI files are mapped to registry so even that they do
      not show up in the INI file this function will find and read
      them!

      REM: Based on Win32 API function GetProfileString().

    DeleteFromINI
       DeleteFromINI $INIfile, $section, @names_to_delete

      Delete a value from an INI file.

      REM: Based on Win32 API function WritePrivateProfileString().

    DeleteFromWININI
       DeleteFromWININI $section, @names_to_delete

      Delete a value from WIN.INI.

      REM: Based on Win32 API function WriteProfileString().

    ReadINISections
       @sections = ReadINISections($inifile);
       \@sections = ReadINISections($inifile);
       ReadINISections($inifile,\@sections);

      Enumerate the sections in a INI file. If you do not specify
      the INI file, it enumerates the contents of win.ini.

      REM: Based on Win32 API function GetPrivateProfileString().

    ReadINISectionKeys
       @sections = ReadINISectionKeys($inifile, $section);
       \@sections = ReadINISectionKeys($inifile, $section);
       ReadINISectionKeys($inifile, $section, \@sections);

      Enumerate the keys in a section of a INI file. If you do not
      specify the INI file, it enumerates the contents of win.ini.

      REM: Based on Win32 API function GetPrivateProfileString().

    OpenDialog
       $filename = OpenDialog \%parameters [, $defaultfilename]
       @filenames = OpenDialog \%parameters [, $defaultfilename]

       $filename = OpenDialog %parameters [, $defaultfilename]
       @filenames = OpenDialog %parameters [, $defaultfilename]

      Creates the standard Open dialog allowing you to select some
      files.

      Returns a list of selected files or undef if the user pressed
      [Escape]. It also sets two global variables :

       $Win32::FileOp::ReadOnly = the user requested a readonly access.
       $Win32::FileOp::SelectedFilter = the id of filter selected in the dialogbox

       %parameters
        title => the title for the dialog, default is 'Open'
              'Open file'
        filters => definition of file filters
              { 'Filter 1' => '*.txt;*.doc', 'Filter 2' => '*.pl;*.pm'}
              [ 'Filter 1' => '*.txt;*.doc', 'Filter 2' => '*.pl;*.pm']
              [ 'Filter 1' => '*.txt;*.doc', 'Filter 2' => '*.pl;*.pm' , $default]
              "Filter 1\0*.txt;*.doc\0Filter 2\0*.pl;*.pm"
        defaultfilter => the number of the default filter counting from 1.
                         Please keep in mind that hashes do not preserve
                         ordering!
        dir => the initial directory for the dialog, default is the current directory
        filename => the default filename to be showed in the dialog
        extension => the default extension, this function appends this extension to
                     the filename if the user fails to type an extension. This
                     string can be any length, but only the first three characters
                     are appended. The string should not contain a period (.).
        handle => the handle to the window which will own this dialog
                  Default is the console of the perl script.
                  If you do not want to tie the dialog to any window use
                  handle => 0
        options => options for the dialog, see bellow OFN_... constants

      There is a little problem with the underlying function. You
      have to preallocate a buffer for the selected filenames and if
      the buffer is too smallyou will not get any results. I've
      consulted this with the guys on Perl-Win32-Users and there is
      not any nice solution. The defalut size of buffer is 256B if
      the options do not include OFN_ALLOWMULTISELECT and 64KB if
      they do. You may change the later via variable
      $Win32::FileOp::BufferSize.

      REM: Based on Win32 API function GetOpenFileName().

    SaveAsDialog
      Creates the Save As dialog box, parameters are the same as for
      OpenDialog.

      REM: Based on Win32 API function GetSaveFileName().

    BrowseForFolder
       BrowseForFolder [$title [, $rootFolder [, $options]]]

      Creates the standard "Browse For Folder" dialog. The $title
      specifies the text to be displayed below the title of the
      dialog. The $rootFolder may be one of the `CSIDL_'...
      constants. For $options you should use the `BIF_'...
      constants. Description of the constants is bellow.

      REM: Based on Win32 API function SHBrowseForFolder().

    Map
       Map $drive => $share;
       $drive = Map $share;
       Map $drive => $share, \%options;
       $drive = Map $share, \%options;

      Map a drive letter or LTPx to a network resource. If
      successfull returns the drive letter/LPTx.

      If you do not specify the drive letter, the function uses the
      last free letter. Since the function doesn't require the ':'
      in the drive name you may use the function like this:

       Map H => '\\\\server\share';
       as well as
       Map 'H:' => '\\\\server\share';

       Options:
        persistent = 0/1, should the connection be restored on next logon?
        user       = username to be used to connect the device
        passwd     = password to be used to connect the device
        overwrite  = 0/1, should the drive be remapped if it was already connected?

       Example:
        Map I => '\\\\servername\share', {persistent=>1,overwrite=>1};

      REM: Based on Win32 API function WNetAddConnection3().

    Disconnect
       Disconnect $drive_or_share;
       Disconnect $drive_or_share, \%options;

      Breaks an existing network connection. It can also be used to
      remove remembered network connections that are not currently
      connected.

      $drive_or_share specifies the name of either the redirected
      local device or the remote network resource to disconnect
      from. If this parameter specifies a redirected local resource,
      only the specified redirection is broken; otherwise, all
      connections to the remote network resource are broken.

       Options:
        persistent = 0/1, if you do not use persistent=>1, the connection will be closed, but
                     the drive letter will still be mapped to the device
        force      = 0/1, disconnect even if there are some open files

       See also: Unmap

      REM: Based on Win32 API function WNetCancelConnection2().

    Unmap
       Unmap $drive_or_share;
       Unmap $drive_or_share, \%options;

      The only difference from Disconnect is that persistent=>1 is
      the default.

      REM: Based on Win32 API function WNetCancelConnection2().

    Mapped
       %drives = Mapped;
       $share = Mapped $drive;
       $drive = Mapped $share; # currently not implemented !!!

      This function retrieves the name of the network resource
      associated with a local device. Or vice versa.

      If you do not specify any parameter, you get a hash of drives
      and shares.

      To get the error message from most of these functions, you
      should not use $!, but
      Win32::FormatMessage(Win32::GetLastError())!

      REM: Based on Win32 API function WNetGetConnection().

    Subst
       Subst Z => 'c:\temp';
       Subst 'Z:' => '\\\\servername\share\subdir';

      This function substitutes a drive letter for a directory, both
      local and UNC.

      Be very carefull with this, cause it'll allow you to change
      the substitution even for C:. ! Which will most likely be
      lethal !

      Works only on WinNT.

      REM: Based on DefineDosDevice()

       =item SubstDev

       SubstDev F => 'Floppy0';
       SubstDev G => 'Harddisk0\Partition1';

      Allows you to make a substitution to devices. For example if
      you want to make an alias for A: ...

      To get the device mapped to a drive letter use Substed() in
      list context.

      Works only on WinNT.

      REM: Based on DefineDosDevice()

    Unsubst
       Unsubst 'X';

      Deletes the substitution for a drive letter. Again, be very
      carefull with this!

      Works only on WinNT.

      REM: Based on DefineDosDevice()

    Substed
       %drives = Substed;
       $substitution = Substed $drive;
       ($substitution, $device) = Substed $drive;

      This function retrieves the name of the resource(s) associated
      with a drive letter(s).

      If used with a parameter :

      In scalar context you get the substitution. If the drive is
      the root of a local device you'll get an empty string, if it's
      not mapped to anything you'll get undef.

      In list context you'll get both the substitution and the
      device/type of device :

       Substed 'A:' => ('','Floppy0')
       Substed 'B:' => undef
       Substed 'C:' => ('','Harddisk0\Partition1')
       Substed 'H:' => ('\\\\servername\homes\username','UNC')
        # set by subst H: \\servername\homes\username
       Substed 'S:' => ('\\\\servername\servis','LanmanRedirector')
        # set by net use S: \\servername\servis
       Substed 'X:' => ()
        # not mapped to anything

      If used without a parameter gives you a hash of drives and
      their corresponding sunstitutions.

      Works only on WinNT.

      REM: Based on Win32 API function QueryDosDevice().

  Options

    FOF_
       FOF_SILENT = do not show the progress dialog
       FOF_RENAMEONCOLLISION = rename the file in case of collision
                  ('file.txt' -> 'Copy of file.txt')
       FOF_NOCONFIRMATION = do not show the confirmation dialog
       FOF_ALLOWUNDO = send file(s) to RecycleBin instead of deleting
       FOF_FILESONLY = skip directories
       FOF_SIMPLEPROGRESS = do not show the filenames in the process dialog
       FOF_NOCONFIRMMKDIR = do not confirm creating directories
       FOF_NOERRORUI = do not report errors
       FOF_NOCOPYSECURITYATTRIBS = do not copy security attributes

    OFN_
       OFN_ALLOWMULTISELECT

      Specifies that the File Name list box allows multiple
      selections. If you also set the OFN_EXPLORER flag, the dialog
      box uses the Explorer-style user interface; otherwise, it uses
      the old-style user interface.

       OFN_CREATEPROMPT

      If the user specifies a file that does not exist, this flag
      causes the dialog box to prompt the user for permission to
      create the file. If the user chooses to create the file, the
      dialog box closes and the function returns the specified name;
      otherwise, the dialog box remains open.

       OFN_EXPLORER

      Since I cannot implement hook procedures through Win32::API
      (AFAIK), this option in not necessary.

       OFN_FILEMUSTEXIST

      Specifies that the user can type only names of existing files
      in the File Name entry field. If this flag is specified and
      the user enters an invalid name, the dialog box procedure
      displays a warning in a message box. If this flag is
      specified, the OFN_PATHMUSTEXIST flag is also used.

       OFN_HIDEREADONLY

      Hides the Read Only check box.

       OFN_LONGNAMES    

      For old-style dialog boxes, this flag causes the dialog box to
      use long filenames. If this flag is not specified, or if the
      OFN_ALLOWMULTISELECT flag is also set, old-style dialog boxes
      use short filenames (8.3 format) for filenames with spaces.
      Explorer-style dialog boxes ignore this flag and always
      display long filenames.

       OFN_NOCHANGEDIR    

      Restores the current directory to its original value if the
      user changed the directory while searching for files.

       OFN_NODEREFERENCELINKS

      Directs the dialog box to return the path and filename of the
      selected shortcut (.LNK) file. If this value is not given, the
      dialog box returns the path and filename of the file
      referenced by the shortcut

       OFN_NOLONGNAMES    

      For old-style dialog boxes, this flag causes the dialog box to
      use short filenames (8.3 format). Explorer-style dialog boxes
      ignore this flag and always display long filenames.

       OFN_NONETWORKBUTTON

      Hides and disables the Network button.

       OFN_NOREADONLYRETURN

      Specifies that the returned file does not have the Read Only
      check box checked and is not in a write-protected directory.

       OFN_NOTESTFILECREATE    

      Specifies that the file is not created before the dialog box
      is closed. This flag should be specified if the application
      saves the file on a create-nonmodify network sharepoint. When
      an application specifies this flag, the library does not check
      for write protection, a full disk, an open drive door, or
      network protection. Applications using this flag must perform
      file operations carefully, because a file cannot be reopened
      once it is closed.

       OFN_NOVALIDATE    

      Specifies that the dialog boxes allow invalid characters in
      the returned filename.

       OFN_OVERWRITEPROMPT    

      Causes the Save As dialog box to generate a message box if the
      selected file already exists. The user must confirm whether to
      overwrite the file.

       OFN_PATHMUSTEXIST    

      Specifies that the user can type only valid paths and
      filenames. If this flag is used and the user types an invalid
      path and filename in the File Name entry field, the dialog box
      function displays a warning in a message box.

       OFN_READONLY    

      Causes the Read Only check box to be checked initially when
      the dialog box is created. If the check box is checked when
      the dialog box is closed $Win32::FileOp::ReadOnly is set to
      true.

       OFN_SHAREAWARE    

      Specifies that if a call to the OpenFile function fails
      because of a network sharing violation, the error is ignored
      and the dialog box returns the selected filename.

       OFN_SHOWHELP

      Causes the dialog box to display the Help button. The
      hwndOwner member must specify the window to receive the
      HELPMSGSTRING registered messages that the dialog box sends
      when the user clicks the Help button.

    BIF_
       BIF_DONTGOBELOWDOMAIN

      Does not include network folders below the domain level in the
      tree view control.

       BIF_RETURNONLYFSDIRS

      Only returns file system directories. If the user selects
      folders that are not part of the file system, the OK button is
      grayed.

       BIF_RETURNFSANCESTORS

      Only returns file system ancestors. If the user selects
      anything other than a file system ancestor, the OK button is
      grayed.

      This option is strange, cause it seems to allow you to select
      only computers. I don't know the definition of a filesystem
      ancestor, but I didn't think it would be a computer. ?-|

       BIF_BROWSEFORCOMPUTER

      Only returns computers. If the user selects anything other
      than a computer, the OK button is grayed.

       BIF_BROWSEFORPRINTER

      Only returns printers. If the user selects anything other than
      a printer, the OK button is grayed.

       BIF_STATUSTEXT

      Since it is currently impossible to define callbacks, this
      options is useless.

    CSIDL_
      This is a list of available options for BrowseForFolder().

      CSIDL_BITBUCKET

      Recycle bin --- file system directory containing file objects
      in the user's recycle bin. The location of this directory is
      not in the registry; it is marked with the hidden and system
      attributes to prevent the user from moving or deleting it.

      CSIDL_CONTROLS

      Control Panel --- virtual folder containing icons for the
      control panel applications.

      CSIDL_DESKTOP

      Windows desktop --- virtual folder at the root of the name
      space.

      CSIDL_DESKTOPDIRECTORY

      File system directory used to physically store file objects on
      the desktop (not to be confused with the desktop folder
      itself).

      CSIDL_DRIVES

      My Computer --- virtual folder containing everything on the
      local computer: storage devices, printers, and Control Panel.
      The folder may also contain mapped network drives.

      CSIDL_FONTS

      Virtual folder containing fonts.

      CSIDL_NETHOOD

      File system directory containing objects that appear in the
      network neighborhood.

      CSIDL_NETWORK

      Network Neighborhood --- virtual folder representing the top
      level of the network hierarchy.

      CSIDL_PERSONAL

      File system directory that serves as a common repository for
      documents.

      CSIDL_PRINTERS

      Printers folder --- virtual folder containing installed
      printers.

      CSIDL_PROGRAMS

      File system directory that contains the user's program groups
      (which are also file system directories).

      CSIDL_RECENT

      File system directory that contains the user's most recently
      used documents.

      CSIDL_SENDTO

      File system directory that contains Send To menu items.

      CSIDL_STARTMENU

      File system directory containing Start menu items.

      CSIDL_STARTUP

      File system directory that corresponds to the user's Startup
      program group.

      CSIDL_TEMPLATES

      File system directory that serves as a common repository for
      document templates.

      Not all options make sense in all functions!

  Variables

     $Win32::FileOp::ProgressTitle

    This variable (if defined) contains the text to be displayed on
    the progress dialog if using FOF_SIMPLEPROGRESS. This allows you
    to present the user with your own message about what is
    happening to his computer.

    If the options for the call do not contain FOF_SIMPLEPROGRESS,
    this variable is ignored.

  Examples

        use Win32::FileOp;

        CopyConfirm ('c:\temp\kinter.pl' => 'c:\temp\copy\\',
                     ['\temp\kinter1.pl', 'temp\kinter2.pl']
                     => ['c:\temp\copy1.pl', 'c:\temp\copy2.pl']);

        $Win32::FileOp::ProgressTitle = "Moving the temporary files ...";
        MoveEx 'c:\temp\file.txt' => 'd:\temp\\',
               ['c:\temp\file1.txt','c:\temp\file2.txt'] => 'd:\temp',
               FOF_RENAMEONCOLLISION | FOF_SIMPLEPROGRESS;
        undef $Win32::FileOp::ProgressTitle;

        Recycle 'c:\temp\kinter.pl';

  Handles

    All the functions keep Win32::API handles between calls. If you
    want to free the handles you may undefine them, but NEVER EVER
    set them to anything else than undef !!! Even "$handlename =
    $handlename;" would destroy the handle without repair! See docs
    for Lazy.pm for explanation.

    List of handles and functions that use them:

     $Win32::FileOp::fileop : Copy, CopyEx, CopyConfirm, Move, MoveEx, MoveConfirm
      Delete, DeleteEx, DeleteConfirm, Recycle, RecycleEx, RecycleConfirm
     $Win32::FileOp::movefileex : MoveFileEx MoveFile MoveAtReboot
     $Win32::FileOp::movefileexDel : DeleteAtReboot
     $Win32::FileOp::copyfile : CopyFile
     $Win32::FileOp::writeINI : WriteToINI MoveAtReboot DeleteAtReboot
     $Win32::FileOp::writeWININI : WriteToWININI
     $Win32::FileOp::deleteINI : DeleteFromINI
     $Win32::FileOp::deleteWININI : DeleteFromWININI
     $Win32::FileOp::readINI : ReadINI
     $Win32::FileOp::readWININI : ReadWININI
     $Win32::FileOp::GetOpenFileName : OpenDialog
     $Win32::FileOp::GetSaveFileName : SaveAsDialog
     $Win32::FileOp::SHAddToRecentDocs : AddToRecentDocs EmptyRecentDocs
     $Win32::FileOp::DesktopHandle
     $Win32::FileOp::WindowHandle : OpenDialog SaveDialog
     $Win32::FileOp::WNetAddConnection3 : Map
     $Win32::FileOp::WNetGetConnection : Mapped
     $Win32::FileOp::WNetCancelConnection2 : Unmap Disconnect Map
     $Win32::FileOp::GetLogicalDrives : FreeDriveLetters Map

  Notes

    By default all functions are exported! If you do not want to
    polute your namespace too much import only the functions you
    need. You may import either single functions or whole groups.

    The available groups are :

     BASIC = Move..., Copy..., Recycle... and Delete... functions plus constants
     _BASIC = FOF_... constants only
     HANDLES = DesktopHandle GetDesktopHandle WindowHandle GetWindowHandle
     INI = WriteToINI WriteToWININI ReadINI ReadWININI ReadINISectionKeys
           DeleteFromINI DeleteFromWININI
     DIALOGS = OpenDialog, SaveAsDialog and BrowseForFolder plus OFN_...,
               BIF_... and CSIDL_... constants
     _DIALOGS = only OFN_..., BIF_... and CSIDL_... constants
     RECENT = AddToRecentDocs, EmptyRecentDocs
     DIRECTORY = UpdateDir, FillInDir
     COMPRESS => Compress Uncompress Compressed SetCompression GetCompression
                 CompressedSize CompressDir UncompressDir
     MAP => Map Unmap Disconnect Mapped
     SUBST => Subst Unsubst Substed SubstDev

    Examples:

     use Win32::FileOp qw(:BASIC GetDesktopHandle);
     use Win32::FileOp qw(:_BASIC MoveEx CopyEx);
     use Win32::FileOp qw(:INI :_DIALOGS SaveAsDialog);

    This module contains all methods from Win32::RecycleBin. The
    only change you have to do is to use this module instead of the
    old Win32::RecycleBin. Win32:RecycleBin is not supported
    anymore!

  TO-DO

    WNetConnectionDialog, WNetDisconnectDialog

  AUTHORS

     Module built by :
      Jan Krynicky <Jenda@Krynicky.cz>
      $Bill Luebkert <dbe@wgn.net>
      Mike Blazer <blazer@mail.nevalink.ru>
      Aldo Calpini <a.calpini@romagiubileo.it>
      Michael Yamada <myamada@gj.com>

