>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 >* Clipboard Functions > DECLARE LONG OpenClipboard IN user32 LONG HWND > DECLARE LONG CloseClipboard IN user32 > DECLARE LONG EmptyClipboard IN user32 > DECLARE LONG SetClipboardData In user32 LONG uFormat, LONG hMem > >* Memory Management Functions > DECLARE LONG GlobalAlloc IN kernel32 LONG wFlags, LONG dwBytes > DECLARE LONG GlobalFree IN kernel32 LONG HMEM > DECLARE LONG GlobalLock IN kernel32 LONG HMEM > DECLARE LONG GlobalUnlock IN kernel32 LONG HMEM > DECLARE LONG RtlMoveMemory In kernel32 As CopyFromStr LONG lpDest, String @lpSrc, LONG iLen > > 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 0 deleimted file list > > FOR i= 1 TO ALEN(taFileList,1) > If Alen(taFileList,2)=0 && onedimensional > lcDropFiles = lcDropFiles + taFileList[i] + CHR(0) > Else > lcDropFiles = lcDropFiles + taFileList[i,1] + CHR(0) > EndIf > ENDFOR >* Final 0 > lcDropFiles = lcDropFiles + CHR(0) > lnDataLen = LEN(lcDropFiles) >* Copy DROPFILES 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 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 so other can access it > CloseClipboard() > ENDIF > RETURN llOk >Hi Tore,