前回、カーソル位置の色情報を取得する方法について書きました。
後で活用するために、取得した色情報を記録しておきたいという需要が私の中にあるので、ローカルファイルにどんどん溜めていくことができるようにしたいと思います。
準備として、前回作った関数をちょっと書き換えます。処理に変更はありませんが、使い回したい部分を分離しています。
GetColor(RGB){ ;取得するのはRGB値かカラーコードかを引数RGBにtrue/falseで渡して指定する
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%, RGB
If(RGB){
R := "0x" . SubStr(color,3,2)
R += 0
SetFormat, integer, d
G := "0x" . SubStr(color,5,2)
G += 0
SetFormat, integer, d
B := "0x" . SubStr(color,7,2)
B += 0
SetFormat, integer, d
string := "rgb(" . R . "," . G . "," . B . ")"
}Else{
string := "#" . SubStr(color,3)
StringLower, string, string
}
Clipboard = %string%
Return
}
PickColor(){
MsgBox, 4, , RGB形式(10進数)にしますか?
IfMsgBox, Yes
RGB := true
Else IfMsgBox, No
RGB := false
GetColor(RGB)
MsgBox, %Clipboard% を取得しました。
}
前回はPickColorという名前の関数ひとつでしたが、色を取得する部分はGetColorという関数に分け、PickColorは取得形式の選択をしてからGetColorに選択を渡して色を取得する形になります。前回のPickColor関数を削除してこの二つに書き換えれば、前回同様PickColor()をキーに割り当てることで前回と同じ内容のプログラムが走ります。
今回はPickColor部分は使いません。記録用の別の関数を作り、その中でGetColor関数を実行することになります。
RecordColor(){ ;新しく関数を作る
;この中にGetColor(RGB)の実行を含む処理を書く
}
AutoHotkeyにはローカルのテキストファイルに追記するコマンドFileAppendがあります。「FileAppend, テキスト, テキストファイルのパス」の形でファイルに追記します。ファイルが存在しなければ新たに作成します。
(ちなみにテキストファイルの中身を取得するのはFileReadコマンドです。)
今回は、カーソル位置の色情報を取得して「カラーコード」「RGB値」「何の色か」「取得日時」をtsv(タブ区切りでデータを格納するテキストファイル)に記録したいと思います。RGB値にカンマを使用するため、csvではなくtsvにしています。
なお過程でクリップボードを利用することになるので、既にクリップボードに入っているデータを関数使用後も保持するように最初と最後に処理を加えます。
RecordColor(){
cb_bk = %ClipboardAll% ;発動時にクリップボードに入っているデータを取っておく
Sleep, 200 ;念の為一瞬待つ
GetColor(false) ;カラーコード取得
colorH := Clipboard ;クリップボードにGetColorの結果が入っているので別の変数colorHを作って移す
GetColor(true) ;RGB値取得
colorI := Clipboard ;同様に変数colorIにGetColorの結果を移す
FormatTime,TimeString,,yyyy/MM/dd HH:mm ;好みのフォーマットを指定して現在日時を取得し、変数TimeStringに入れる
InputBox, string,,%colorH% %colorI%`n何の色ですか? ;色情報の説明を自分で入力して変数stringに入れる
If ErrorLevel <> 0 ;InputBoxダイアログでキャンセルすると一連の処理を中止する
Return
;`t(タブ)を挟んだデータを作り、指定したtsvファイルに追記する
FileAppend, % colorH . "<code>t" . colorI . "</code>t" . string . "<code>t" . TimeString . "</code>n", C:\PickedColor.tsv
;(必要なら)書き込んだ内容をMsgBoxで表示して確認する
MsgBox, % colorH . "," . colorI . "," . string . "," . TimeString . " を記録しました。`nC:\PickedColor.tsv"
Clipboard = %cb_bk% ;元々クリップボードに入っていたデータを元に戻す
}
お試しになる場合は「C:\PickedColor.tsv
」の部分を都合が良い場所に書き換えてください。なおファイルが存在しなければ自動で作成するので、予めファイルを作っておく必要はありません。
これで、RecordColor()を実行する度にtsvファイルに取得した色情報が蓄積していきます。
実行すると入力ダイアログが表示される 指定したファイルにタブ区切りで記録される
ちなみに私は、このtsvをJavaScriptで取得してHTML上に色情報の一覧を背景色付きで表示する、といったことをしています。ここではそのやり方に触れることはしませんが、そんな感じでAutoHotkeyでローカルファイルに書き込むということには色々使い途があり得ると思います。