Clipboard

Clipboard変数

Windowsのクリップボードの内容がテキストとして読み取れる場合、組み込み変数Clipboardでアクセスすることができる。
テキストの各行はCR+LF(`r`n)区切りで格納される。

Explorerなどでファイルをクリップボードに格納した場合、フルパスが改行(`r`n)区切りでClipboardに格納される。
parsing loopの例のようにすると、1ファイルずつ処理することができる。
Sortコマンドでファイル名を名前順に並べることができる。

Examples

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変数に代入する。

FileAppendFileReadコマンドを使用すれば、内容をファイルに保存しておくことも可能。

コピーされた変数は、更に他の変数にコピーすることができる。
コピーされた変数同士は、Ifコマンドの「<>」や「=」で比較することができる。
StringLenコマンドで、コピーされたデータのサイズを取得することもできる。

ClipboardAll変数から他の変数へコピーするときは、「#MaxMem」指令による変数サイズの上限設定は無視される。

ClipboardAll変数は、他の変数へのコピーとFileAppendコマンド以外で参照した場合は、常に空になる。
また、ClipboardAllをコピーした変数は、通常の変数とは異なりバイナリデータを格納した状態になるので、正常に処理することはできない。

アクセスできないデータがある場合、そのデータは無視して他のデータだけが処理される。

データは、データ本体の前にフォーマットタイプとデータサイズがそれぞれ4バイトのリトルエンディアン(下位バイトが先)のバイト列で付加されたものになる。
複数のデータを含む場合は、これが繰り返す。
また、最後に0x00が4バイト付く。

Examples

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
テキストとして使用できないデータだけが格納されている

Examples

;クリップボードの内容が変更されるたびに、データの種別をツールチップ表示する
#Persistent
return

OnClipboardChange:
ToolTip Clipboard data type: %A_EventInfo%
Sleep 1000
ToolTip  ; Turn off the tip.
return