Domino Code Fragment

Code Name*
API Call to access the Clipboard in Notes?
Date*
04/28/2024
Source (or email address if you prefer)*
Rlatulippe@romac.com
IP address:.3.139.90.131
Description*
This function (thanks to Manfred_Doerwald@IDG.DE) calls Win32 functions to put a field in the clipboard:
Type*
LotusScript
Categories*
(Misc)
Implementation:
Required Client:
Server:
Limitations:
Comments:
Files/Graphics attachments (if applicable): Code:

This goes in (Options):


'dataformat ID for ANSI text with ending null (\0). CR(13)/ LF(10) are for end of line.
Public Const CF_TEXT = &H001
This goes in (Declarations):



Declare Function OpenClipboard Lib "User32.dll" Alias "OpenClipboard" (Byval hWnd As Long) As Long
Declare Function EmptyClipboard Lib "User32.dll" Alias "EmptyClipboard" ( ) As Long
Declare Function SetClipboardData Lib "User32.dll" Alias "SetClipboardData" (Byval wFormat As Integer,Byval hAnsiText As Long ) As String
Declare Function GetClipboardData Lib "User32.dll" Alias "GetClipboardData" (Byval wFormat As Integer) As String
Declare Function CloseClipboard Lib "User32.dll" Alias "CloseClipboard" ( ) As Long


Declare Function MYlstrcpy Lib "Kernel32.dll" Alias "lstrcpyA" (Byval Buffer As Long, Byval COPYString As String) As Long
Declare Function GlobalAlloc Lib "Kernel32.dll" Alias "GlobalAlloc" (Byval wFlags As Long, Byval dwBytes As Long) As Long
Declare Function GlobalLock Lib "Kernel32.dll" Alias "GlobalLock"(Byval hMem As Long) As Long
Declare Function GlobalUnlock Lib "Kernel32.dll" Alias "GlobalUnlock" (Byval hMem As Long) As Long
Declare Function GlobalFree Lib "Kernel32.dll" Alias "GlobalFree" (Byval hMem As Long) As Long
This goes in the Click event for a button:



Sub Click(Source As Button)
Dim Status As Long
Dim ptr As Long, ghand As Long,handle As Long
Dim Text As String
Dim workspace As New NotesUIWorkspace
Dim Uidoc As NotesUIDocument
Dim item As NotesItem
Dim s As New notessession
Dim db As NotesDatabase
Dim col As NotesDocumentCollection
Dim doc As notesDocument

Set db = s.currentdatabase
Set col = db.unprocesseddocuments
Set doc = col.getfirstdocument

' Control of platform 16/32-Bit
If Instr(s.platform,"16") Then
Messagebox ("Wrong Windows-platform; this agent runs only under Windows NT/95")
Exit Sub
End If
' Select Notes field
Set item = doc.GetFirstItem("xxxxxx")
' open clipboard
Status = OpenClipboard(handle)
If Status <> 0 Then
' Example: reading clipboard contense
'Text = GetClipboardData(CF_TEXT)
'Delete clipboard contense
Status = EmptyClipboard()
' for testing purpose make a textstring
'Text = "Manfred Doerwald"
'get global storage for field contense
ghand = GlobalAlloc(0,(Len(item.Values(0))+1))

'or global storage for textstring contense
'ghand = GlobalAlloc(0,(Len(Text)+1))
'lock global storage
ptr = GlobalLock(ghand)
'copy contense of field to global storage
Status = MYlstrcpy(ptr,item.Values(0))
'or copy of textstring contense
'Status = MYlstrcpy(ptr,Text)
'free global storage
Status = GlobalUnlock(ghand)
'write to clipboard
Call SetClipboardData(CF_TEXT, ptr)
'close clipboard
Status = CloseClipboard()
'free handle of global storage
Status = GlobalFree(ghand)
Else
Messagebox ("Error opening the clipboard!")
Exit Sub
End If
End Sub