Accueil > Lotus Notes logiciel , Lotus Notes Tutoriel , LotusScript , notes Designer > Lotus Notes Script de lecture / écriture Presse-papiers Windows

Lotus Notes Script de lecture / écriture Presse-papiers Windows

Si vous avez un besoin de lire le presse-papiers de Windows (ou à y écrire) alors que dans LotusScript, cette classe personnalisée, il est facile. Créer une bibliothèque de scripts, et appelez-le Presse-papiers Windows. Allez dans la zone (Déclarations) de la bibliothèque de scripts, et de mettre dans cette définition de la classe.

Tout d'abord, vous devez déclarer les classes de l'API que vous aurez besoin:

Déclarer privé Fonction GetClipboardData Lib "User32" (ByVal Wformat As Long) As Long
Déclarer privé Fonction SetClipboardData Lib "user32" (ByVal Wformat As Long, ByVal hData As Long) As Long
Déclarer privé Lib OpenClipboard Fonction "User32" Alias ​​"OpenClipboard" (ByVal hwnd As Long) As Long
Déclarer privé Lib CloseClipboard Fonction "User32" Alias ​​"CloseClipboard" () As Long
Déclarer privé Fonction GlobalLock Lib "kernel32" Alias ​​"GlobalLock" (ByVal hMem As Long) As Long
Déclarer privé Fonction GlobalUnlock Lib "kernel32" Alias ​​"GlobalUnlock" (ByVal hMem As Long) As Long
Déclarer privé Fonction Lib GlobalAlloc "kernel32" (ByVal comme wFlags longues, dwBytes ByVal As Long) As Long
Déclarer privé Fonction GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Déclarer privé Fonction Lib EmptyClipboard "user32" () As Long
Déclarer privé Fonction lstrcpyLP2Str Lib "kernel32" Alias ​​"lstrcpyA" (ByVal lpString1 As String, _
ByVal lpString2 As Long) As Long
Déclarer privé Fonction lstrlenLP Lib "kernel32" Alias ​​"lstrlenA" (ByVal lpString As Long) As Long
Déclarer Private Sub MoveMemory Lib "kernel32" Alias ​​"RtlMoveMemory" (ByVal strDest As Any, _
ByVal lpSource As Any, ByVal Longueur As Any)
Déclarer privé Fonction GetFocus Lib "User32" Alias ​​"GetFocus" () As Long

Vous aurez aussi besoin SOEM constante définie, il faut donc ajouter ceux suivante:

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

Enfin, ajouter dans la définition de la classe. Tout d'abord, passons sur la propriété qui sera lu à partir du presse-papiers

WindowsClipboard classe

Public Property Get matières As String
HClipboard As long
LpStrl As long
Resultl As long
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)
D'autre
Clipboardstr = "NULL"
End If
CloseClipboard Appel ()
D'autre
Clipboardstr = ""
End If
Table des matières = Clipboardstr
End Property  «Fin de la méthode" GET "pour le" Contenu "la propriété

La première chose que la classe fait est d'obtenir une poignée à la planchette. Ensuite, le presse-papiers est verrouillé. Une zone temporaire de données vierge est faite de sorte qu'il ya un gros bloc assez de données de chaîne pour stocker les résultats. Le presse-papiers de données est mis dans cette zone vide et le presse-papiers est déverrouillé pour le libérer à nouveau. Les résultats sont retournés à l'utilisateur.

Pour le réglage des presse-papiers, celui-ci utilise la même propriété matières, mais cette fois la propriété est définie, au lieu de Get.
Publics matières Property Set As String
LSize As long
HMem As long
Dim pMemory As Long
Temp As Variant

lSize = Len (matières) +1
hMem = GlobalAlloc (GMEM_MOVABLE Ou GMEM_DDESHARE, lSize)
Si hMem = 0 ou IsNull (hMem) Then Exit la propriété
pMemory = GlobalLock (hMem)
Si pMemory = 0 ou IsNull (pMemory) Puis
GlobalFree (hMem)
Sortir de la propriété
End If
Appelez MoveMemory (pMemory, matières, lSize)
Appel 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  «Fin du" Set "méthode pour le« Contenu »la propriété
End Class

Tout d'abord, comprendre comment la quantité de mémoire doit être alloué. Ce sera l'un plus de caractère que la taille des données envoyées. Puis allouer suffisamment de mémoire pour maintenir ce texte et de mettre le texte dans l'emplacement mémoire allouée. (Cela implique de verrouillage de la mémoire, puis en déplaçant le texte dans la mémoire verrouillée, puis le déverrouillage de la mémoire). Alors nous obtenons une poignée pour le presse-papiers, tout comme le "get" la propriété a fait. Une fois que nous avons que la poignée, nous effacer tout ce qui est sur le presse-papiers. Cela pourrait être du texte ou des graphiques, ou n'importe quoi d'autre. Après le presse-papiers a été effacé, alors les données en mémoire est placé sur le presse-papiers. Ensuite, les choses sont nettoyées - le presse-papiers est fermé et la mémoire est libérée.

Pour utiliser cette classe, il est assez facile. Tout d'abord, la construction d'un agent. Assurez-vous d'inclure la bibliothèque de scripts avec l'utilisation mention «Presse-papiers Windows" dans la zone (Options). Ensuite, votre code de test est en quelques lignes:

Dim x As WindowsClipboard
Set x = WindowsClipboard New ()
X.Contents MsgBox
x.Contents = "Vérifiez le réglage des données du presse-papiers en mettant dans un texte"
X.Contents MsgBox

Cela vous donnera deux boîtes de message - l'un avec le contenu du presse-papiers à partir de quand vous avez lancé l'agent, l'autre avec le contenu du presse-papiers nous nous étions fixés lors de la marche de l'agent.

Vue 11893 fois par 3038 spectateurs

  1. Pas encore de commentaires.
  1. Aucun trackback pour l'instant.