* Based on http://www.berezniker.com/content/pages/visual-foxpro/copy-unicode-text-clipboard && Copy Unicode text into Clipboard FUNCTION CopyUnicodeText2Clipboard(tcUnicodeText) LOCAL lnDataLen, lcDropFiles, llOk, i, lhMem, lnPtr, lcUnicodeText, lhMem2, lnPtr2, lcTextDBCS #DEFINE CF_UNICODETEXT 13 #define CF_TEXT 1 && 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. lcUnicodeText = tcUnicodeText + CHR(0)+CHR(0) lnDataLen = LEN(lcUnicodeText) && Copy Unicode text into the allocated memory lhMem = GlobalAlloc(GMEM_MOVABLE+GMEM_ZEROINIT+GMEM_SHARE, lnDataLen) lnPtr = GlobalLock(lhMem) Sys(2600, lnPtr, lcUnicodeText) =GlobalUnlock(lhMem) lcTextDBCS = Strconv(lcUnicodeText,6) lhMem2 = GlobalAlloc(GMEM_MOVABLE+GMEM_ZEROINIT+GMEM_SHARE, Len(m.lcTextDBCS)) lnPtr2 = GlobalLock(lhMem2) Sys(2600,lnPtr, m.lcTextDBCS) =GlobalUnlock(lhMem2) && Open clipboard and store Unicode text into it llOk = (OpenClipboard(0) <> 0) IF llOk =EmptyClipboard() llOk = (SetClipboardData(CF_UNICODETEXT, 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 llOk = (SetClipboardData(CF_TEXT, lhMem2) <> 0) IF NOT llOk =GlobalFree(lhMem2) ENDIF && Close clipboard =CloseClipboard() ENDIF RETURN llOkThis would copy the text in two formats and produce the same order of the clipboard formats that you get when you copy from Excel.