Windowsのクリップボードの内容がテキストとして読み取れる場合、組み込み変数Clipboardでアクセスすることができる。
テキストの各行はCR+LF(`r`n)区切りで格納される。
Explorerなどでファイルをクリップボードに格納した場合、フルパスが改行(`r`n)区切りでClipboardに格納される。
parsing loopの例のようにすると、1ファイルずつ処理することができる。
Sortコマンドでファイル名を名前順に並べることができる。
clipboard = my text ; クリップボードのテキストを変更 clipboard = ; クリップボードを空にする clipboard = %clipboard% ;テキスト以外の形式をテキストに変換 clipboard = %clipboard% Text to append. ;クリップボードにテキストを追加 StringReplace, clipboard, clipboard, ABC, DEF, All ; クリップボードの内容を置換 ; Ctrl+Cを送信してコピーされた内容を表示 clipboard = Send, ^c ClipWait MsgBox, Control-C copied the following contents to the clipboard:`n`n%clipboard%
組み込み変数ClipboardAllを使用すると、クリップボードに格納される全データをまとめて他の変数にコピーできる。
主に、クリップボードを経由する処理を行うときに、処理前の内容を保存しておいて復元するために使用する。
書き戻すときは、ClipboardAllではなくClipboard変数に代入する。
FileAppend、FileReadコマンドを使用すれば、内容をファイルに保存しておくことも可能。
コピーされた変数は、更に他の変数にコピーすることができる。
コピーされた変数同士は、Ifコマンドの「<>」や「=」で比較することができる。
StringLenコマンドで、コピーされたデータのサイズを取得することもできる。
ClipboardAll変数から他の変数へコピーするときは、「#MaxMem」指令による変数サイズの上限設定は無視される。
ClipboardAll変数は、他の変数へのコピーとFileAppendコマンド以外で参照した場合は、常に空になる。
また、ClipboardAllをコピーした変数は、通常の変数とは異なりバイナリデータを格納した状態になるので、正常に処理することはできない。
アクセスできないデータがある場合、そのデータは無視して他のデータだけが処理される。
データは、データ本体の前にフォーマットタイプとデータサイズがそれぞれ4バイトのリトルエンディアン(下位バイトが先)のバイト列で付加されたものになる。
複数のデータを含む場合は、これが繰り返す。
また、最後に0x00が4バイト付く。
ClipSaved := ClipboardAll ; クリップボードの全内容を保存 ;クリップボードを経由した処理(例) Send,^c Run,http://www.google.co.jp/search?q=%Clipboard% Clipboard := ClipSaved ; クリップボードの内容を復元 ClipSaved = ;保存用変数に使ったメモリを開放
FileAppend, %ClipboardAll%, C:\clip.dat ;保存 FileRead, Clipboard, *c C:\clip.dat ;読み込み(クリップボードデータの場合、ファイル名の前に「*c」をつける)
「OnClipboardChange」という名前のラベルを作成しておくと、何らかのアプリケーションによってWindowsのクリップボードが変更されたときにそのラベルが実行されるようになる。
このラベルは、スクリプトが開始された直後にも実行される。
このラベルが存在するだけでは、スクリプトは常駐状態にならないので、ホットキーやGUIを使わないスクリプトでは「#Persistent」指令で明示的に常駐を指定する必要がある。
このラベルがすでに実行されているときに再びクリップボードの内容が変更された場合は、このラベルは新たに実行されない。
クリップボードの変更が無視されてしまうのを避けたい場合は、SetTimerコマンドを介して別スレッドを起動し、OnClipboardChange自体は即座に終了してしまえばいい。
ラベルが実行されたとき、組み込み変数「A_EventInfo」に以下の値が格納される。
;クリップボードの内容が変更されるたびに、データの種別をツールチップ表示する #Persistent return OnClipboardChange: ToolTip Clipboard data type: %A_EventInfo% Sleep 1000 ToolTip ; Turn off the tip. return