Startseite > Lotus Notes-Software , Lotus Notes-Tutorial , LotusScript , Notes-Designer > Lotus Notes Script Lesen / Schreiben Windows-Zwischenablage

Lotus Notes Script Lesen / Schreiben Windows-Zwischenablage

Wenn Sie eine Notwendigkeit, um die Windows-Zwischenablage zu lesen (oder schreiben Sie sie), während in LotusScript, macht diese benutzerdefinierte Klasse es einfach. Erstellen Sie ein Skript-Bibliothek, und nennen es Windows-Zwischenablage. Gehe in die (Deklarationen) Bereich des Script-Bibliothek, und legte in dieser Klasse Definition.

Zuerst müssen Sie die API-Klassen, die Sie benötigen erklären:

Declare Private Function GetClipboardData Lib "user32" (ByVal Wformat As Long) As Long
Declare Private Function SetClipboardData Lib "user32" (ByVal Wformat As Long, ByVal hData As Long) As Long
Declare Private Function OpenClipboard Lib "user32" Alias ​​"OpenClipboard" (ByVal hwnd As Long) As Long
Declare Private Function CloseClipboard Lib "user32" Alias ​​"CloseClipboard" () As Long
Declare Private Function GlobalLock Lib "kernel32" Alias ​​"GlobalLock" (ByVal HMEM As Long) As Long
Declare Private Function GlobalUnlock Lib "kernel32" Alias ​​"GlobalUnlock" (ByVal HMEM As Long) As Long
Declare Private Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Declare Private Function GlobalFree Lib "kernel32" (ByVal HMEM As Long) As Long
Declare Private Function EmptyClipboard Lib "user32" () As Long
Declare Private Function lstrcpyLP2Str Lib "kernel32" Alias ​​"lstrcpyA" (ByVal lpString1 As String, _
LpString2 ByVal As Long) As Long
Declare Private Function lstrlenLP Lib "kernel32" Alias ​​"lstrlenA" (ByVal lpString As Long) As Long
Declare Private Sub MoveMemory Lib "kernel32" Alias ​​"RtlMoveMemory" (ByVal strDest As Any, _
LpSource ByVal As Any, ByVal Length As Any)
Declare Private Function GetFocus Lib "user32" Alias ​​"GetFocus" () As Long

Du brauchst auch Soem konstant definiert, so fügen sie die nächste:

Private Const CF_TEXT = 1
Private Const GMEM_MOVABLE = & H2 &
Private Const GMEM_DDESHARE = ​​& H2000 &

Schließlich wird in der Klassendefinition hinzufügen. Lassen Sie uns zuerst über das Grundstück gehen, das wird aus der Zwischenablage lesen

Klasse WindowsClipboard

Public Property Get Inhalt As String
Dim As Long hClipboard
Dim As Long LpStrl
Dim As Long resultl
Dim Clipboardstr As String

Wenn (OpenClipboard (0 &) <> 0) Then
hClipboard = GetClipboardData (CF_TEXT)
Wenn (hClipboard <> 0) Then
LpStrl = GlobalLock (hClipboard)
Clipboardstr = Space $ (lstrlenLP (LpStrl))
Resultl = lstrcpyLP2Str (Clipboardstr, LpStrl)
GlobalUnlock (hClipboard)
Sonst
Clipboardstr = "NULL"
End If
Anruf CloseClipboard ()
Sonst
Clipboardstr = ""
End If
Inhalt = Clipboardstr
 End Property 'Beendet die Methode "GET" für den "Inhalt" Eigentum

Das erste, was die Klasse tut, ist in den Griff bekommen in die Zwischenablage. Dann wird die Zwischenablage gesperrt. Eine temporäre leeren Bereich der Daten wird so gibt es eine groß genug Block von String-Daten, um die Ergebnisse zu halten. Die Daten aus der Zwischenablage wird in diese leere Stelle setzen und die Zwischenablage ist entsperrt, um es zu befreien, wieder auf. Die Ergebnisse sind an den Benutzer zurückgegeben.

Für die Einstellung den Inhalt der Zwischenablage wird in diesem die gleichen Inhalte Eigentum, aber dieses Mal die Eigenschaft wird anstelle von Get Set.
Public Property Set Inhalt As String
Dim As Long LSIZE
Dim As Long HMEM
Dim As Long pMemory
Dim Temp As Variant

LSIZE = Len (Inhalt) +1
HMEM = GlobalAlloc (GMEM_MOVABLE Oder GMEM_DDESHARE, LSIZE)
Wenn HMEM = 0 oder IsNull (HMEM) Then Exit Property
pMemory = GlobalLock (HMEM)
Wenn pMemory = 0 oder IsNull (pMemory) Then
GlobalFree (HMEM)
Exit Property
End If
Rufen MoveMemory (pMemory, Inhalt, LSIZE)
Anruf GlobalUnlock (HMEM)
Wenn (OpenClipboard (0 &) <> 0) Then
Wenn (EmptyClipboard () <> 0) Then
temp = SetClipboardData (CF_TEXT, HMEM)
End If
temp = CloseClipboard ()
End If
GlobalFree (HMEM)
 End Property 'Beendet die "Set"-Methode für den "Inhalt" Eigentum
End Class

Erstens, herauszufinden, wie viel Speicher zugewiesen werden muss. Dies wird ein weiteres Zeichen als die Größe der Daten, die gesendet werden. Dann genügend Speicher, um diesen Text zu halten und setzen Sie den Text in den zugewiesenen Speicherplatz. (Dies beinhaltet Sperren des Speichers, dann bewegen Sie den Text in die verriegelte Speicher, dann die Erschließung des Speichers). Dann erhalten wir einen Griff in die Zwischenablage, genauso wie die "get"-Eigenschaft haben. Sobald wir diesen Griff haben, wischen wir aus, was ist in der Zwischenablage. Dies könnte Text oder Grafiken, oder irgendetwas anderes zu sein. Nachdem der Zwischenablage gelöscht worden ist, dann werden die Daten im Speicher wird in die Zwischenablage gelegt. Dann sind die Dinge aufgeräumt - der Zwischenablage wird geschlossen und Speicher freigegeben wird.

Um diese Klasse zu verwenden, ist es ziemlich einfach. Zuerst bauen einen Agenten. Achten Sie darauf, um das Skript-Bibliothek mit der Aussage Use "Windows-Zwischenablage" in der (Optionen) Umgebung gehört. Dann wird Ihr Test-Code ist nur ein paar Zeilen:

Dim x As WindowsClipboard
Set x = New WindowsClipboard ()
Msgbox x.Contents
x.Contents = "Überprüfen Sie die Einstellung der Daten in der Zwischenablage, indem man in einem Text"
Msgbox x.Contents

Dadurch erhalten Sie zwei Meldungsfelder - eins mit den Inhalt der Zwischenablage ab, bevor Sie lief den Agenten, der andere mit den Inhalt der Zwischenablage, die wir während der Abwicklung des Agenten eingestellt.

Angesehen 11868 mal von 3028 Zuschauern

  1. Noch keine Kommentare.
  1. Bisher keine Trackbacks.