Domino Code Fragment

Code Name*
API Calls in Script Library to write to and from Windows Clipboard
Date*
04/28/2024
Source (or email address if you prefer)*
Rlatulippe@romac.com
IP address:.18.217.228.35
Description*
Script to write to the windows clipboard.
Type*
LotusScript
Categories*
(Misc)
Implementation:
Required Client:
Server:
Limitations:
Comments:
Files/Graphics attachments (if applicable): Code:
******* Script Library

' Windows Clipboard functions
Declare Function OpenClipboard Lib "user32" Alias "OpenClipboard" (Byval hwnd As Long) As Long
Declare Function CloseClipboard Lib "user32" Alias "CloseClipboard" () As Long
Declare Function EmptyClipboard Lib "user32" Alias "EmptyClipboard" () As Long
Declare Function GetClipboardData Lib "user32" Alias "GetClipboardData" (Byval wFormat As Long) As Long
Declare Function SetClipboardData Lib "user32" Alias "SetClipboardData" (Byval wFormat As Long, Byval hMem As Long) As Long
Declare Function IsClipboardFormatAvailable Lib "user32" Alias "IsClipboardFormatAvailable" (Byval wFormat As Long) As Long


' Windows memory functions
Declare Function GlobalAlloc Lib "kernel32" Alias "GlobalAlloc" (Byval wFlags As Long, Byval dwBytes As Long) As Long
Declare Function GlobalLock Lib "kernel32" Alias "GlobalLock" (Byval hMem As Long) As Long
Declare Function GlobalUnlock Lib "kernel32" Alias "GlobalUnlock" (Byval hMem As Long) As Long
Declare Function GlobalSize Lib "kernel32" Alias "GlobalSize" (Byval hMem As Long) As Long
Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (Byval lpString1 As Long, Byval lpString2 As String) As Long


' Notes functions
Declare Function NEMGetCurrentSubprogramWindow Lib "nnotesws.dll" () As Long


' Windows constants
Const GMEM_MOVEABLE = &H40
Const GMEM_ZEROINIT = &H2
Const CF_TEXT = &H01



Sub SetClipboardText(text As String)
Dim hwnd As Long
Dim hGlobalMemory As Long
Dim lpGlobalMemory As Long
Dim ret As Long


On Error Goto error_handler

' Get a handle to current window
hwnd = NEMGetCurrentSubProgramWindow()
If hwnd Then
' Allocate memory
Print "GlobalAlloc"
hGlobalMemory = GlobalAlloc(Clng(GMEM_MOVEABLE Or GMEM_ZEROINIT), Clng(Len(text)+1))
If hGlobalMemory Then
Print "GlobalLock"
lpGlobalMemory = GlobalLock(hGlobalMemory)
If lpGlobalMemory Then
' Copy text to global memory
Print "lstrcpy"
ret = lstrcpy(lpGlobalMemory, text)
Print "Unlock"
Call GlobalUnlock(hGlobalMemory)
' Set clipboard contents
If OpenClipboard(hwnd) Then
ret = EmptyClipboard()
Print "SetClipboard"
ret = SetClipboardData(CF_TEXT, hGlobalMemory)
Print "CloseClipboard"
ret = CloseClipboard()
End If
Else
Msgbox "Can't allocated global memory pointer.", 32, "Error"
End If
Else
Msgbox "Can't allocated global memory handle.", 32, "Error"
End If
Else
Msgbox "Can't get window handle.", 32, "Error"
End If
Exit Sub
error_handler:
Print "Error: " + Error$(Err)
Resume Next
End Sub
******** Agent


Option Public
Use "Clipboard"


Sub Initialize
Print "Start agent"
SetClipboardText("Let's hope this works.")
End Sub