クリップボード
Clipboard変数[編集]
Windowsのクリップボードの内容がテキストとして読み取れる場合、組み込み変数 Clipboard
でアクセスすることができる。
テキストの各行は CR+LF
(`r`n
) 区切りで格納される。
Explorerなどでファイルをクリップボードに格納した場合、フルパスが 改行(`r`n
) 区切りで Clipboard
に格納される。
Loop,Parse の例のようにすると、1ファイルずつ処理することができる。
Sortコマンドでファイル名を名前順に並べることができる。
Example(s)[編集]
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
を使用すると、クリップボードに格納される全データをまとめて他の変数にコピーできる。
主に、クリップボードを経由する処理を行うときに、処理前の内容を保存しておいて復元するために使用する。
書き戻すときは、ClipboardAll
ではなく Clipboard
変数 に代入する。
FileAppend、FileReadコマンドを使用すれば、内容をファイルに保存しておくことも可能。
コピーされた変数は、更に他の変数にコピーすることができる。
コピーされた変数同士は、Ifコマンドの <>
や =
で比較することができる。
StringLenコマンドで、コピーされたデータのサイズを取得することもできる。
ClipboardAll変数から他の変数へコピーするときは、#MaxMem指令による変数サイズの上限設定は無視される。
ClipboardAll変数は、他の変数へのコピーとFileAppendコマンド以外で参照した場合は、常に空になる。
また、ClipboardAllをコピーした変数は、通常の変数とは異なりバイナリデータを格納した状態になるので、正常に処理することはできない。
アクセスできないデータがある場合、そのデータは無視して他のデータだけが処理される。
データは、データ本体の前にフォーマットタイプとデータサイズがそれぞれ4バイトのリトルエンディアン(下位バイトが先)のバイト列で付加されたものになる。
複数のデータを含む場合は、これが繰り返す。
また、最後に0x00が4バイト付く。
Example(s)[編集]
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サブルーチン[編集]
OnClipboardChange
という名前のラベルを作成しておくと、何らかのアプリケーションによってWindowsのクリップボードが変更されたときにそのラベルが実行されるようになる。
このラベルは、スクリプトが開始された直後にも実行される。
このラベルが存在するだけでは、スクリプトは常駐状態にならないので、ホットキーやGUIを使わないスクリプトでは #Persistent指令で明示的に常駐を指定する必要がある。
このラベルがすでに実行されているときに再びクリップボードの内容が変更された場合は、このラベルは新たに実行されない。 クリップボードの変更が無視されてしまうのを避けたい場合は、SetTimerコマンドを介して別スレッドを起動し、OnClipboardChange自体は即座に終了してしまえばいい。
ラベルが実行されたとき、組み込み変数 A_EventInfoに以下の値が格納される。
0 | クリップボードが空になった。 |
1 | テキストとして使用できるデータが格納されている。 |
2 | テキストとして使用できないデータだけが格納されている。 |
Example(s)[編集]
;クリップボードの内容が変更されるたびに、データの種別をツールチップ表示する
#Persistent Return OnClipboardChange: ToolTip Clipboard data type: %A_EventInfo% Sleep 1000 ToolTip;Turn off the tip.
Return