Lotus Notes Сценарий Чтение / запись буфера обмена Windows
Если у вас есть нужно читать буфер обмена (или запись в него), а в LotusScript, этот обычай класса делает его легким. Создание библиотеки скриптов, и называют это буфер обмена Windows. Идите в (деклараций) площадь библиотеки сценариев, и положил в этом определении класса.
Во-первых, необходимо объявить API классы, которые вам понадобятся:
Объявить Private Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
Объявить Private Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hData As Long) As Long
Объявить частной Lib OpenClipboard Функция "User32" Alias "OpenClipboard" (ByVal HWND As Long) As Long
Объявить частной Lib CloseClipboard Функция "User32" Alias "CloseClipboard" () As Long
Объявить Private Function GlobalLock Lib "kernel32" Alias "GlobalLock" (ByVal hMem As Long) As Long
Объявить Private Function GlobalUnlock Lib "kernel32" Alias "GlobalUnlock" (ByVal hMem As Long) As Long
Объявить Private Function GlobalAlloc Lib "kernel32" (ByVal WFlags As Long, ByVal dwBytes As Long) As Long
Объявить Private Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Объявить Private Function EmptyClipboard Lib "user32" () As Long
Объявить Private Function lstrcpyLP2Str Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, _
ByVal lpString2 As Long) As Long
Объявить Private Function lstrlenLP Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Объявить Private Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal strDest As Any, _
ByVal lpSource As Any, ByVal Длина As Any)
Объявить Private Function GetFocus Lib "user32" Alias "GetFocus" () As Long
Вам также потребуется некоторая константа определена, так что добавьте тех, следующий:
Частные CF_TEXT Const = 1
Частные Const GMEM_MOVABLE = & H2 &
Частные Const GMEM_DDESHARE = & H2000 &
Наконец, добавьте в определении класса. Во-первых, давайте перейдем тем свойством, что будет читать из буфера обмена
Класс WindowsClipboard
Общественный Property Get Содержание As String
Dim hClipboard As Long
Dim LpStrl As Long
Dim Resultl As Long
Dim Clipboardstr As String
Если (OpenClipboard (0 &) <> 0) Then
hClipboard = GetClipboardData (CF_TEXT)
Если (hClipboard <> 0) Then
LpStrl = GlobalLock (hClipboard)
Clipboardstr = пространстве $ (lstrlenLP (LpStrl))
Resultl = lstrcpyLP2Str (Clipboardstr, LpStrl)
GlobalUnlock (hClipboard)
Еще
Clipboardstr = "NULL"
End If
Вызовите CloseClipboard ()
Еще
Clipboardstr = ""
End If
Содержание = Clipboardstr
End Property  'Заканчивается "Get" метод "Содержание" собственность
Первое, что делает класс, это получить дескриптор буфера обмена. Затем буфер обмена заблокирован. Временный пустой области данных осуществляется таким образом есть достаточно большой блок строк данных для хранения результатов. Буфера обмена данные помещаются в эту пустую область в буфер обмена и разблокирован, чтобы освободить его снова. Результаты возвращаются пользователю.
Для настройки содержимого буфера обмена, использует эту же свойство Contents, но на этот раз свойство имеет значение, а не получить.
Общественный Property Set Содержание As String
Dim lSize As Long
Dim hMem As Long
Dim pMemory As Long
Dim температура As Variant
lSize = Len (Содержание) +1
hMem = GlobalAlloc (GMEM_MOVABLE Или GMEM_DDESHARE, lSize)
Если hMem = 0 или IsNull (hMem) Затем Exit Property
pMemory = GlobalLock (hMem)
Если pMemory = 0 или IsNull (pMemory), тогда
GlobalFree (hMem)
Exit Property
End If
Вызовите MoveMemory (pMemory, Содержание, lSize)
Вызовите GlobalUnlock (hMem)
Если (OpenClipboard (0 &) <> 0) Then
Если (EmptyClipboard () <> 0) Then
температура = SetClipboardData (CF_TEXT, hMem)
End If
температура = CloseClipboard ()
End If
GlobalFree (hMem)
End Property  'Заканчивается "Set" метод "Содержание" собственность
End Class
Во-первых, выяснить, сколько памяти должно быть выделено. Это будет еще один персонаж, чем размер отправляемых данных. Затем выделить достаточно памяти для хранения этого текста и поместить текст в выделенной памяти. (Это включает в себя блокировку памяти, затем переместить текст в блокированной памяти, то разблокировки памяти). Тогда мы получим дескриптор в буфер обмена, как и "получить" имущество и сделал. После того как мы, которые обрабатывают, мы уничтожить все, что в буфере обмена. Это может быть текст или графику, или что-нибудь еще. После буфер обмена была очищена, то данные в памяти помещается в буфер обмена. Потом все очищаются - буфер обмена закрыты и память освобождается.
Чтобы использовать этот класс, это довольно легко. Во-первых, построить агента. Убедитесь в том, чтобы включить библиотеки сценариев с заявлением Используйте "Windows Clipboard" в (Options) области. Тогда ваш тестовый код всего лишь несколько строк:
Dim х Как WindowsClipboard
Положим х = Новые WindowsClipboard ()
Msgbox x.Contents
x.Contents = "Проверьте настройки в буфер обмена данных, поставив в какой-то текст"
Msgbox x.Contents
Это даст вам два окна сообщений - один с содержимым буфера обмена с до запуска агента, другой с содержимым буфера обмена положить во время работы агента.
Просмотрено 11769 раз 3003 зрителей













