I had some trouble getting your example to work properly, and after i read up on it on MSDN it became a little clearer ;)
SetClipboardData takes over ownership if its data so passing it anything other than memory handles from GlobalAlloc/LocalAlloc resulted in failure (atleast on my end ;)
this is how i got it work:
If i understood your question properly you want to append data to the clipboard? than this should suffice.
hope this helps =)
SetClipboardData takes over ownership if its data so passing it anything other than memory handles from GlobalAlloc/LocalAlloc resulted in failure (atleast on my end ;)
this is how i got it work:
SuperStrict ' ' Clipboard ' Const CF_TEXT:Int = 1 Const CF_BITMAP:Int = 2 Const CF_METAFILEPICT:Int = 3 Const CF_SYLK:Int = 4 Const CF_DIF:Int = 5 Const CF_TIFF:Int = 6 Const CF_OEMTEXT:Int = 7 Const CF_DIB:Int = 8 Const CF_PALETTE:Int = 9 Const CF_PENDATA:Int = 10 Const CF_RIFF:Int = 11 Const CF_WAVE:Int = 12 Const CF_UNICODETEXT:Int = 13 Const CF_ENHMETAFILE:Int = 14 Const CF_HDROP:Int = 15 Const CF_LOCALE:Int = $10 Const CF_MAX:Int = 17 Const CF_DIBV5:Int = 17 Extern "win32" Function OpenClipboard:Int( hwnd:Int = 0) = "OpenClipboard@4" Function CloseClipboard:Int() = "CloseClipboard@0" Function GetClipboardData:Int( format:Int) = "GetClipboardData@4" Function SetClipboardData:Int( format:Int, handle:Int) = "SetClipboardData@8" Function EmptyClipboard:Int() = "EmptyClipboard@0" Function IsClipboardFormatAvailable:Int( format:Int) = "IsClipboardFormatAvailable@4" EndExtern ' ' Global Memory ' Const GMEM_FIXED:Int = 0 Const GMEM_MOVEABLE:Int = 2 Const GMEM_NOCOMPACT:Int = $10 Const GMEM_NODISCARD:Int = $20 Const GMEM_ZEROINIT:Int = $40 Const GMEM_MODIFY:Int = $80 Const GMEM_DISCARDABLE:Int = $100 Const GMEM_NOT_BANKED:Int = $1000 Const GMEM_SHARE:Int = $2000 Const GMEM_DDESHARE:Int = $2000 Const GMEM_NOTIFY:Int = $4000 Const GMEM_LOWER:Int = GMEM_NOT_BANKED Const GMEM_VALID_FLAGS:Int = 32626 Const GMEM_INVALID_HANDLE:Int = $8000 Const GHND:Int = GMEM_MOVEABLE | GMEM_ZEROINIT Const GPTR:Int = GMEM_FIXED | GMEM_ZEROINIT Extern "win32" Function GlobalAlloc:Int( flags:Int, size:Int) = "GlobalAlloc@8" Function GlobalReAlloc:Int( mem:Int, size:Int, flags:Int) = "GlobalReAlloc@8" Function GlobalSize:Int( mem:Int) = "GlobalSize@4" Function GlobalFlags:Int( mem:Int) = "GlobalFlags@4" Function GlobalLock:Byte Ptr( mem:Int) = "GlobalLock@4" Function GlobalHandle:Int( mem:Byte Ptr) = "GlobalHandle@4" Function GlobalUnlock:Int( mem:Int) = "GlobalUnlock@4" Function GlobalFree:Int( mem:Int) = "GlobalFree@4" EndExtern Function WriteClipboardText( s:String) If s = Null Then Return If OpenClipboard() Then Local data:Int = GlobalAlloc( GMEM_MOVEABLE, s.Length + 1) Local p:Byte Ptr = GlobalLock( data) MemCopy( p, s.ToCString(), s.Length + 1) GlobalUnlock( data) EmptyClipboard() SetClipboardData( CF_TEXT, data) CloseClipboard() GlobalFree( data) EndIf EndFunction Function ReadClipboardText:String() Local s:String If OpenClipboard() Then If IsClipboardFormatAvailable( CF_TEXT) Then Local data:Int = GetClipboardData( CF_TEXT) Local p:Byte Ptr = GlobalLock( data) s = String.FromCString( p) GlobalUnlock( data) EndIf CloseClipboard() EndIf Return s EndFunction WriteClipboardText( "Hello World!") Print "read: " + ReadClipboardText()
If i understood your question properly you want to append data to the clipboard? than this should suffice.
Function AppendClipboardText( s:String) WriteClipboardText( ReadClipboardText() + s) EndFunction
hope this helps =)