PDA

Click to See Complete Forum and Search --> : Explorer Edit Menu


Fozzie
Feb 16th, 2001, 05:43 PM
Hi all
I've written some code for files selected in explorer to be dragged and dropped in to my application (Not Rocket Science).

Q. How do I access the files if they have been copied by explorer (Edit Menu - Copy) ie Paste them in to my application. They aren't present on the clipboard.

Do you know the answer or have you had a similar problem. Any pointers greatly appreciated

FOUND THE ANSWER

http://support.microsoft.com/support/kb/articles/Q231/7/21.ASP

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