クリップボード

提供: AutoHotkey Wiki
移動: 案内検索

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

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

コピーされた変数は、更に他の変数にコピーすることができる。
コピーされた変数同士は、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