Accessing user32 without decls

BlitzMax Forums/BlitzMax Beginners Area/Accessing user32 without decls

The forum is locked. These are the original blitzbasic.com forums, kept so they can still be read. No new topics, replies or edits can be made here. To join in, head over to the Blitz3D+ forums.

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:
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 =)