>* 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) >=CopyFromStr(lnPtr, @lcUnicodeText, lnDataLen) >=GlobalUnlock(lhMem) >lcTextDBCS = Strconv(lcUnicodeText,6)+Chr(0) >lhMem2 = GlobalAlloc(GMEM_MOVABLE+GMEM_ZEROINIT+GMEM_SHARE, Len(m.lcTextDBCS)) >lnPtr2 = GlobalLock(lhMem2) >=CopyFromStr(lnPtr2, @lcTextDBCS, Len(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 llOk >