ホーム > ロータスノーツのソフトウェアロータスノーツのチュートリアルロータスドミノデザイナー > Lotus Notesのスクリプトは、読み取り/書き込みWindowsのクリップボード

Windowsのクリップボードの読み込み/書き込みLotus Notesのスクリプト

あなたがLotusScriptの中にWindowsのクリップボードに(またはそれへの書き込み)を読む必要がある場合は、このカスタムクラスは、それが容易になります。 スクリプトライブラリを作成し、それをWindowsのクリップボードと呼びます。 スクリプトライブラリの(Declarations)の領域に移動し、このクラス定義に入れて。

まず、あなたが必要となるAPIのクラスを宣言する必要があります。

ロングとしてプライベート関数GetClipboardDataをリブ "からUser32"(ByValをwFormatロングなど)を宣言する
ロングとしてプライベート関数SetClipboardDataリブ "USER32"(ロングとしてロングは、ByVal HDATAとしてByValのwFormat)を宣言
ロングとしてプライベート機能OpenClipboard Libを "からUser32"エイリアス "OpenClipboard"(ロングとしてByVal hwnd)を宣言する
ロングとしてプライベート関数のCloseClipboard Libを "からUser32"エイリアス "CloseClipboard"を()を宣言
ロングとしてプライベート関数は、GlobalLockリブ "kernel32の"エイリアス "は、GlobalLock"(ロングとしてByVal HMemの)宣言
ロングとしてプライベート関数GlobalUnlockリブ "kernel32の"エイリアス "GlobalUnlock"(ロングとしてByVal HMemの)宣言
ロングとしてプライベート関数GlobalAllocのリブ "kernel32の"を(ロングとしてロングは、ByVal dwBytesとしてByVal wFlags)を宣言
ロングとしてプライベート関数のGlobalFreeリブ "kernel32の"(ByValをHMemのロングなど)を宣言する
ロングとしてプライベート関数EmptyClipboardリブ "USER32"を()を宣言
プライベート関数lstrcpyLP2Strリブ "kernel32の"エイリアス "lstrcpyA"を(文字列としてByVal lpString1、_宣言
ロングアズ·ロングとしてByVal lpString2)
ロングとしてプライベート関数lstrlenLPリブ "kernel32の"エイリアス "lstrlenA"(ロングとしてByValポインタを指定)を宣言
します。Private Sub MoveMemory Libの "kernel32の"エイリアス "RtlMoveMemory"(任意としてByVal strDestのを宣言します_
任意としてByVal lpSource、任意としてByVal長)
ロングとしてプライベート関数GetFocusリブ "からUser32"エイリアス "GetFocusを"()を宣言

また、定義されているsoem定数が必要となりますので、これらの次を追加します。

プライベートのConst CF_TEXT = 1
プライベートのConst GMEM_MOVABLE =&H2&
プライベートのConst GMEM_DDESHARE =​​&H2000&

最後に、クラス定義に追加します。 最初は、クリップボードから読み取るするプロパティを介して行こう

クラスWindowsClipboard

パブリックプロパティは、Stringなどのコンテンツを取得する
ロングとしてDim hClipboard
ロングとして暗いLpStrl
ロングとして暗いResultl
文字列として薄暗いClipboardstr

次に、(OpenClipboard(0&)<> 0)の場合
hClipboard = GetClipboardDataを(CF_TEXT)
次に、(hClipboard <> 0)の場合
LpStrl =は、GlobalLock(hClipboard)
Clipboardstr =スペース$(lstrlenLP(LpStrl))
Resultl = lstrcpyLP2Str(Clipboardstr、LpStrl)
GlobalUnlock(hClipboard)

Clipboardstr = "NULL"
終了する場合
コー​​ルCloseClipboard()

Clipboardstr = ""
終了する場合
内容は= Clipboardstr
最後のプロパティÂ "は"コンテンツ "プロパティの" get "メソッドを終了します

クラスが最初に行うことは、クリップボードへのハンドルを取得します。 クリップボードがロックされています。 結果を保持する文字列データの十分な大きさのブロックがあるかようにデータの一時的な空白領域が作成されます。 クリップボードのデータは、空白の領域に配置され、クリップボードには再びそれを解放するためにロックが解除されます。 結果がユーザーに返されます。

クリップボードの内容を設定するために、これは同じ内容のプロパティを使用していますが、この時間はプロパティを設定する代わりに取得されています。
文字列としてパブリックプロパティセット内容
ロングとして暗いLSIZE
ロングとして暗いHMemの
ロングとして暗いpMemory
バリアント型として暗い温度

LSIZE = LEN(内容)1
HMemの=のGlobalAlloc(GMEM_MOVABLEまたはGMEM_DDESHARE、LSIZE)
HMemの= 0またはISNULL(HMemの)は、プロパティを終了した場合
pMemory =は、GlobalLock(HMemの)
その後、pMemory = 0またはISNULL(pMemory)の場合
のGlobalFree(HMemの)
プロパティを終了する
終了する場合
MoveMemory(pMemory、コンテンツ、LSIZE)を呼び出す
コー​​ルGlobalUnlock(HMemの)
次に、(OpenClipboard(0&)<> 0)の場合
(EmptyClipboard()<> 0)次に、もし
TEMP = SetClipboardData(CF_TEXT、HMemの)
終了する場合
TEMP = CloseClipboard()
終了する場合
のGlobalFree(HMemの)
最後のプロパティÂ "は"コンテンツ "プロパティの" set "メソッドを終了します
エンドクラス

まず、メモリを割り当てる必要がどの程度把握。 これは、送信されるデータのサイズよりも1文字となります。 次に、このテキストを保持し、割り当てられたメモリ位置にテキストを配置するのに十分なメモリを割り当てる必要があります。 (これは、メモリのロックを解除し、ロックされたメモリにテキストを移動すると、メモリをロック含む)。 その後、我々は "取得"プロパティがやったように、クリップボードへのハンドルを取得します。 我々はそのハンドルを取得したら、我々は、クリップボードにあるものを一掃。 これは、テキスト、またはグラフィックス、または何か他の可能性があります。 クリップボードがクリアされた後、メモリ内のデータがクリップボードに配置されます。 その後の事はクリーンアップされます - クリップボードが閉じて、メモリが解放されます。

このクラスを使用するには、それはかなり簡単です。 まず、エージェントを構築します。 (オプション)領域内のステートメントの使用 "をWindowsのクリップボード"でスクリプトライブラリを含めるようにしていることを確認してください。 次に、テストコードはほんの数行です。

WindowsClipboardます。Dim x As
集合X =新しいWindowsClipboard()
MsgBoxのx.Contents
x.Contentsは= "いくつかのテキストに置くことによって、クリップボードのデータの設定を確認してください"
MsgBoxのx.Contents

これは、2つのメッセージボックスを提供します - あなたはエージェントを実行する前から、クリップボードの内容を持つもの、我々はエージェントの実行時に設定、クリップボードの内容を持つ他の。

3055視聴者が11929回を見た方は

  1. コメントはまだありません。
  1. トラックバックはまだありません。