HOWTO: Obtain Files Copied from Windows Explorer

ID: Q231721


The information in this article applies to:
  • Microsoft Visual Basic Professional and Enterprise Editions for Windows, versions 5.0, 6.0


SUMMARY

When Windows Explorer is used to cut or copy files, it places information about the files in the clipboard. A Visual Basic application can read this information from the clipboard and act upon it.


MORE INFORMATION

Step by Step Example

  1. Start a new Visual Basic Standard EXE project. Form1 is created by default.


  2. Add a ListBox (List1) and a CommandButton (Command1) control to Form1.


  3. Paste the following code into the General Declarations section of Form1:


  4. 
    Option Explicit
    
    Private Const CF_HDROP = 15
    
    Private Type POINT
        x As Long
        y As Long
    End Type
    
    Private Type DROPFILES
        pFiles As Long
        pt As POINT
        fNC As Long
        fWide As Long
    End Type
    
    Private Declare Function GlobalSize Lib "kernel32" _
       (ByVal hMem As Long) As Long
    Private Declare Function GlobalLock Lib "kernel32" _
       (ByVal hMem As Long) As Long
    Private Declare Function GlobalUnlock Lib "kernel32" _
       (ByVal hMem As Long) As Long
    
    Private Declare Function OpenClipboard Lib "user32" _
       (ByVal hwnd As Long) As Long
    Private Declare Function CloseClipboard Lib "user32" () As Long
    Private Declare Function GetClipboardData Lib "user32" _
       (ByVal wFormat As Long) As Long
    
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
       (Destination As Any, Source As Any, ByVal Length As Long)
    
    Private Sub ShowFilesOnClipboard()
       Dim lHandle As Long
       Dim lpResults As Long
       Dim lRet As Long
       Dim df As DROPFILES
       Dim strDest As String
       Dim lBufferSize As Long
       Dim arBuffer() As Byte
       Dim vNames As Variant
       Dim i As Long
    
       If OpenClipboard(0) Then
          lHandle = GetClipboardData(CF_HDROP)
          ' If you don't find a CF_HDROP, you don't want to process anything
          If lHandle > 0 Then
             lpResults = GlobalLock(lHandle)
             
             lBufferSize = GlobalSize(lpResults)
             ReDim arBuffer(0 To lBufferSize)
             
             CopyMemory df, ByVal lpResults, Len(df)
             Call CopyMemory(arBuffer(0), ByVal lpResults + df.pFiles, _
                             (lBufferSize - Len(df)))
    
             If df.fWide = 1 Then
                ' it is wide chars--unicode
                strDest = arBuffer
             Else
                strDest = StrConv(arBuffer, vbUnicode)
             End If
             GlobalUnlock lHandle
             vNames = Split(strDest, vbNullChar)
             i = 0
             While Len(vNames(i)) > 0
                List1.AddItem vNames(i)
                i = i + 1
             Wend
          End If
       End If
       CloseClipboard
    End Sub
    
    Private Sub Command1_Click()
       Call ShowFilesOnClipboard
    End Sub 
  5. Run the project and use Windows Explorer to select and copy several files.


  6. Press Command1 and note that the list of files that you copied is displayed in List1.


Additional query words:

Keywords : kbAPI kbClipboard kbSDKWin32 kbVBp kbVBp500 kbVBp600 kbGrpVB kbDSupport
Version : WINDOWS:5.0,6.0
Platform : WINDOWS
Issue type : kbhowto


Last Reviewed: November 8, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.