Inicio > Software Lotus Notes , Lotus Notes Tutorial , LotusScript , Notas del diseñador script> Lotus Notes de lectura / escritura Portapapeles de Windows

Lotus Script Notas de lectura / escritura Portapapeles de Windows

Si usted tiene una necesidad de leer el portapapeles de Windows (o escribir en él), mientras que en LotusScript, esta clase personalizada hace que sea fácil. Crear una biblioteca de secuencias de comandos, y lo llaman Portapapeles de Windows. Ir a la zona (declaraciones) de la biblioteca de scripts, y poner en esta definición de clase.

En primer lugar, es necesario declarar las clases de la API que se necesita:

Declarar Private Function GetClipboardData Lib "User32" (ByVal wFormat As Long) como de largo
Declarar Private Function SetClipboardData Lib "user32" (ByVal wFormat hData Long, ByVal As Long) como de largo
Declarar Lib privado OpenClipboard función "User32" Alias ​​"OpenClipboard" (ByVal hwnd As Long) como de largo
Declarar Lib privado CloseClipboard función "User32" Alias ​​"CloseClipboard" () As Long
Declarar Private Function GlobalLock Lib "kernel32" Alias ​​"GlobalLock" (ByVal hMem As Long) como de largo
Declarar Private Function GlobalUnlock Lib "kernel32" Alias ​​"GlobalUnlock" (ByVal hMem As Long) como de largo
Declarar Private Function GlobalAlloc Lib "kernel32" (ByVal wFlags dwBytes Long, ByVal As Long) como de largo
Declarar Private Function GlobalFree Lib "kernel32" (ByVal hMem As Long) como de largo
Declarar Private Function EmptyClipboard Lib "user32" () As Long
Declarar Private Function lstrcpyLP2Str Lib "kernel32" Alias ​​"lstrcpyA" (ByVal lpString1 As String, _
LpString2 ByVal As Long) como de largo
Declarar Private Function lstrlenLP Lib "kernel32" Alias ​​"lstrlenA" (lpString ByVal As Long) como de largo
Declarar Private Sub Lib MoveMemory "kernel32" Alias ​​"RtlMoveMemory" (strDest ByVal As Any, _
LpSource ByVal As Any, ByVal Longitud Cualquiera)
Declarar Private Function GetFocus Lib "User32" Alias ​​"GetFocus" () As Long

Usted también necesitará una constante definida, por lo que añadir las siguientes:

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

Por último, añadir en la definición de clase. En primer lugar, vamos a ir sobre la propiedad que se lee desde el portapapeles

Clase WindowsClipboard

Public Property Get Contenido As String
HClipboard As largo
LpStrl As largo
Resultl As largo
Clipboardstr Dim As String

Si (OpenClipboard (0 &) <> 0) Then
hClipboard = GetClipboardData (CF_TEXT)
Si (hClipboard <> 0) Then
LpStrl = GlobalLock (hClipboard)
Clipboardstr = Space $ (lstrlenLP (LpStrl))
Resultl = lstrcpyLP2Str (Clipboardstr, LpStrl)
GlobalUnlock (hClipboard)
Más
Clipboardstr = "NULL"
End If
CloseClipboard call ()
Más
Clipboardstr = ""
End If
Contenido = Clipboardstr
 End Property 'Finaliza el método "get" para los "Contenidos" de propiedad

Lo primero que hace la clase es conseguir una manija en el portapapeles. A continuación, el portapapeles está bloqueado. Un área temporal en blanco de los datos se realiza por lo que hay un bloque lo suficientemente grande de datos de cadena para almacenar los resultados. Los datos del portapapeles es puesto en esa área en blanco en el portapapeles y se desbloquea para liberarlo de nuevo. Los resultados se devuelven al usuario.

Para establecer el contenido del portapapeles, se utiliza la propiedad el mismo contenido, pero esta vez se establece la propiedad en lugar de Obtener.
Contenido público Property Set As String
LSize As largo
HMem As largo
Dim pMemory como de largo
Dim temp As Variant

lSize = Len (Contenidos) 1
hMem = GlobalAlloc (GMEM_MOVABLE O GMEM_DDESHARE, lSize)
Si hMem = 0 o IsNull (hMem) A continuación, la salida de Propiedad
pMemory = GlobalLock (hMem)
Si pMemory = 0 o IsNull (pMemory) A continuación,
GlobalFree (hMem)
Salir de la Propiedad
End If
Llame MoveMemory (pMemory, Contenidos, lSize)
Llame GlobalUnlock (hMem)
Si (OpenClipboard (0 &) <> 0) Then
Si (EmptyClipboard () <> 0) Then
temp = SetClipboardData (CF_TEXT, hMem)
End If
temp = CloseClipboard ()
End If
GlobalFree (hMem)
 End Property 'Finaliza el método "set" para los "Contenidos" de propiedad
Fin de la clase

En primer lugar, averiguar la cantidad de memoria que se asignará. Este será uno de los personajes más que el tamaño de los datos enviados. A continuación, asignar memoria suficiente para almacenar el texto y poner el texto en la posición de memoria asignada. (Se trata de bloquear la memoria, a continuación, mover el texto en la memoria bloqueada, y luego desbloquear la memoria). Entonces tenemos un mango en el portapapeles, al igual que la "obtener" la propiedad lo hizo. Una vez que tenemos que manejar, destruir lo que esté en el portapapeles. Esto podría ser un texto o gráficos, o cualquier otra cosa. Después del portapapeles se ha limpiado, entonces los datos en la memoria se coloca en el portapapeles. Entonces las cosas se limpian - en el portapapeles se cierra y la memoria es liberada.

Para utilizar esta clase, que es bastante fácil. En primer lugar, construir un agente. Asegúrese de incluir la biblioteca de scripts con el uso Declaración de "Portapapeles de Windows" en la zona (Opciones). A continuación, el código de prueba es sólo unas pocas líneas:

Dim x As WindowsClipboard
X = Juego WindowsClipboard nuevo ()
Msgbox x.Contents
x.Contents = "Compruebe el ajuste de los datos del portapapeles mediante el establecimiento de un texto"
Msgbox x.Contents

Esto le dará dos cuadros de mensaje - una con el contenido del portapapeles desde antes de ejecutar el agente y el otro con el contenido del portapapeles nos propusimos durante la ejecución del agente.

Visto 11739 veces por 2999 espectadores

  1. No hay comentarios aún.
  1. Aún no hay trackbacks.