Copy Files to Clipboard
MSDN: Windows Clipboard API
$SAMPLECODE$
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 * Copy list of files into Clipboard FUNCTION CopyFiles2Clipboard(taFileList) LOCAL lnDataLen, lcDropFiles, llOk, i, lhMem, lnPtr #DEFINE CF_HDROP 15 * Global Memory Variables with Compile Time Constants #DEFINE GMEM_MOVABLE 0x0002 #DEFINE GMEM_ZEROINIT 0x0040 #DEFINE GMEM_SHARE 0x2000 * Load required Windows API functions =LoadApiDlls() llOk = .T. * Build DROPFILES structure lcDropFiles = ; CHR(20) + REPLICATE(CHR(0),3) + ; && pFiles REPLICATE(CHR(0),8) + ; && pt REPLICATE(CHR(0),8) && fNC + fWide * Add zero delimited file list FOR i= 1 TO ALEN(taFileList,1) * 1-D and 2-D (1st column) arrays lcDropFiles = lcDropFiles + IIF(ALEN(taFileList,2)=0, taFileList[i], taFileList[i,1]) + CHR(0) ENDFOR * Final CHR(0) lcDropFiles = lcDropFiles + CHR(0) lnDataLen = LEN(lcDropFiles) * Copy DROPFILES structure into the allocated memory lhMem = GlobalAlloc(GMEM_MOVABLE+GMEM_ZEROINIT+GMEM_SHARE, lnDataLen) lnPtr = GlobalLock(lhMem) =CopyFromStr(lnPtr, @lcDropFiles, lnDataLen) =GlobalUnlock(lhMem) * Open clipboard and store DROPFILES into it llOk = (OpenClipboard(0) <> 0) IF llOk =EmptyClipboard() llOk = (SetClipboardData(CF_HDROP, lhMem) <> 0) * If call to SetClipboardData() is successful, the system will take ownership of the memory * otherwise we have to free it IF NOT llOk =GlobalFree(lhMem) ENDIF * Close clipboard =CloseClipboard() ENDIF RETURN llOk FUNCTION LoadApiDlls * Clipboard Functions DECLARE LONG OpenClipboard IN WIN32API LONG HWND DECLARE LONG CloseClipboard IN WIN32API DECLARE LONG EmptyClipboard IN WIN32API DECLARE LONG SetClipboardData IN WIN32API LONG uFormat, LONG hMem * Memory Management Functions DECLARE LONG GlobalAlloc IN WIN32API LONG wFlags, LONG dwBytes DECLARE LONG GlobalFree IN WIN32API LONG HMEM DECLARE LONG GlobalLock IN WIN32API LONG HMEM DECLARE LONG GlobalUnlock IN WIN32API LONG HMEM DECLARE LONG RtlMoveMemory IN WIN32API As CopyFromStr LONG lpDest, String @lpSrc, LONG iLen RETURN
Comments
Sergey, you are the man!
Just great!