使用例
ここでは、AutoHotkeyで実現できる機能の一例を紹介する。
なお、例の中で自動操作などの対象となっているプログラムは、特に記述がない場合架空の物である。
目次
キー割り当て変更[編集]
リマップ機能を利用すれば、特定のキー操作に別のキーを割り当てることが出来る。
おおよそ全てのキーとマウスボタン、ジョイスティックのボタンの割り当てが可能である。
#h::left;Win+Hに←キーを割り当て#j::down;Win+Jに↓キーを割り当て#k::up;Win+Kに↑キーを割り当て#l::right;Win+Lに→キーを割り当て
特定ソフトのキーバインド変更[編集]
#IfWinActive指令を使えば、特定の種類のウィンドウでのみキー割り当てを有効にすることが出来る。
ウィンドウの判別にはウィンドウタイトルやクラス名を使用できる。ウィンドウのクラス名は、付属のAU3_Spy.exeで調査できる。
RunコマンドとProcess,WaitCloseを使えば、スクリプト起動時に対象ソフトを起動し、対象ソフトが終了したらスクリプトも終了するというツールも実現できる。
Run,notepad.exe;メモ帳を一つ起動Process,WaitClose,notepad.exe;メモ帳が全て終了するまで待機ExitApp;スクリプトを終了する#IfWinActive ahk_class Notepad;メモ帳のウィンドウがアクティブの時のみ割り当てを行わせる^r::^h;Ctrl+RにCtrl+H(置換)を割り当て#IfWinActive;ウィンドウの限定を解除
複雑な操作を1キーに割り当て[編集]
ホットキーにSendコマンドを割り当てることで、複雑な操作を1キーで済ませることができるようになる。
標準的なGUIアプリケーションなら、Alt+Tキーで 「ツール(T)」のようなアクセスキーの割り当てられたメニュー項目を操作したり、Tabキーで入力欄の間をフォーカス移動するなど、キーの送信だけでもほとんどの操作が行えるようになっている。
なお、メニューの選択や入力欄への入力については、コントロール操作系コマンドで直接操作することも可能。こちらの方が高速かつ確実に動作するが、スクリプトを作成するのが多少面倒になる。
#IfWinActive ahk_class Notepad;メモ帳のウィンドウがアクティブの時のみ割り当てを行わせる^w::Send,!ow;Alt+Oで 書式メニューを表示し、 Wキーで 右端で折り返しを選択#IfWinActive;ウィンドウの限定を解除
バックグラウンドのソフトを操作[編集]
非アクティブのウィンドウや非表示のウィンドウにキー操作を送る機能を利用すれば、サウンドプレイヤーや常駐ソフトなどを好きなホットキーで直接操作できるようになる。
#n::;Win+nに割り当てDetectHiddenWindows,On;非表示のウィンドウを対象に含めるようにするControlSend,,^n,ahk_class SomeApplication;対象ウィンドウにCtrl+Nキーを送信Return;ホットキーサブルーチンを終了
プログラムランチャー[編集]
Runコマンドでプログラムを起動することで、ランチャーを実現できる。
単にホットキーに割り当てれば、ホットキーランチャとして利用できる。
#1::Run,notepad.exe;Win+1にメモ帳の起動を割り当て#2::Run,iexplore.exe;Win+2にIEの起動を割り当て
既に起動している場合は、そのプロセスをアクティブにする[編集]
プロセスが起動しているかどうかを調べる機能や、特定プロセスのウィンドウを操作する機能を使用すれば、既に起動しているプロセスをアクティブ化することが出来る。
複数プロセスを実行する必要がないのに重複起動防止機能がないソフトなどを使いやすくできる。
Process,Exist,notepad.exe;メモ帳が起動しているかどうかを調べるIf ErrorLevel <> 0;起動していた場合(ErrorLevel変数にプロセスIDが格納される)WinActivate,ahk_pid %ErrorLevel%;そのプロセスのウィンドウをアクティブにするElse;起動していなかった場合Run,notepad.exe;メモ帳を起動する
プログラムを相対パスで指定[編集]
実行するファイルは相対パスで指定することも出来る。
リムーバブルメディア内のプログラムを起動するランチャを作りたいときなどに有効。
以下のスクリプトは、実行するとメニューでプログラムを一覧表示し、選択したプログラムを起動する。
常駐させて使用したい場合には、ホットキーなどに Menu,M1,Showの部分を割り当てればよい。
SetWorkingDir,%A_ScriptDir%;相対パスの基準フォルダをスクリプトのあるフォルダに設定Menu,M1,Add,.\apps\notepad\notepad.exe,Launch;メニューにファイルを追加(同様に何行か書く)Menu,M1,Show;メニューを表示Return;終了Launch:;メニューが選択されたときにここから先が実行されるRun,%A_ThisMenuItem%;選択されたメニュー名をコマンドラインとして実行Return;サブルーチンの終了
環境変数を指定してプログラムを起動[編集]
スクリプト中から環境変数を変更してプログラムを起動することが出来る。
システムの環境変数設定を変更せずに、設定に環境変数を使用するプログラムを利用したい場合などに役に立つ。
WindowsのBATファイルでも同等のことが出来るが、 A_ScriptDirなどの組み込み変数のおかげで記述が楽になっている。
EnvSet,USERPROFILE,%A_ScriptDir%\data;設定の保存先となるUSERPROFILEのパスを変更Run,%A_ScriptDir%\bin\someapp.exe;プログラムを起動
自動操作[編集]
ウィンドウの状態を判別する機能などを利用すれば、プログラムが処理を終えるのを待ってから続きを実行することも出来る。
Run,app01.exe;一つめのプログラムを起動WinWait,ahk_class app01wnd;プログラムのウィンドウが表示されるまで待機ControlSend,,{Tab}{Enter};そのウィンドウに処理を開始させるためのキー操作を送信WinWait,完了;処理完了のメッセージが出るまで待機WinClose;そのウィンドウを閉じるWinClose,ahk_class app01wnd;プログラムのウィンドウを閉じるRun,app02.exe;2つめのプログラムを起動;以下、同様に作業を記述していく
フォルダ内のファイルを全て処理[編集]
ファイルLoopを使用すれば、フォルダ内のファイル全てに対して繰り返し同じ処理を行うことが出来る。
自動操作機能と組み合わせることで、GUIアプリケーションでの定型作業を効率化できる。
処理の途中でファイルの削除などの処理を行いたい場合、各種のファイル関連コマンドが利用できる。
Loop,D:\files\*.jpeg;指定フォルダ内の全てのJPEGファイルについて処理{;繰り返しブロックの始まりRun,app.exe "%A_LoopFileLongPath%";対象ファイルを引数としてプログラムを起動WinWait,ahk_class appwnd;ウィンドウが表示されるまで待機ControlClick,Button1;そのウィンドウのボタンをクリックするLoop{;処理が終わるまで繰り返しControlGet,e,Enabled,,Button1;ボタンが使用禁止になっていないかを取得If e = 1;使用禁止でなければ、処理終了とみなすBreak;繰り返しを終了する} WinClose;ウィンドウを閉じるFileDelete,%A_LoopFileLongPath%;対象ファイルを削除}
画面上の映像を判別しての自動操作[編集]
画面上から特定の画像に一致する部分や、指定の色になっている部分を検索する機能を利用すれば、通常の方法では判別できない状態も判別できる場合がある。
ゲームなどの自動化に利用できる可能性があるが、入出力の実現方式が特殊なためAutoHotkeyでは操作できないソフトも少なくない。
Numpad0::;テンキーの 0キーに割り当てるSend,{F1}{Enter};開始操作を実行Loop{;条件を満たすまで繰り返しPixelSearch,,,0,0,100,100,0x0000FF,,RGB;ウィンドウ左上100*100ピクセルの範囲に青色の部分があるかどうかを判別If ErrorLevel = 0;青色の部分が見つかったらBreak;繰り返しを抜ける} Send,{Esc}{Esc};終了操作を実行Return;ホットキーサブルーチンを終了
クリップボード経由で文字列をやりとり[編集]
Clipboard変数を利用すれば、簡単にクリップボード内の文字列データを操作できる。
Sendコマンドと組み合わせれば、ブラウザやエディタなどで選択された文字列を取得したり、キャレット位置に文字列を挿入したりすることも簡単にできる。
#g::;Win+Gキーに割り当てbk = %ClipboardAll%;クリップボードの内容をバックアップClipboard =;クリップボードをクリアSend,^c;Ctrl+Cキーを送信ClipWait;クリップボードにテキストが格納されるまで待機Run,http://www.google.com/search?q=%Clipboard%;クリップボードの内容を検索するGoogleのURLを開くClipboard = %bk%;バックアップした内容を書き戻しReturn
クリップボードの監視[編集]
OnClipboardChangeラベルを記述することで、クリップボードの内容が変更されたときに特定の処理が行われるようにすることが出来る。
#Persistent;ホットキーなどを使用しない場合で、スクリプトを常駐させたいときに記述OnClipboardChange:;クリップボードの内容が変更されたときに実行されるラベルStringLeft,l,Clipboard,7;文字列の先頭7文字を切り出しStringRight,r,Clipboard,4;文字列の末尾4文字を切り出しIf l = http://;先頭が http://でIf r in jpeg,.jpg;末尾が jpeg .jpgのどちらかならRun,app.exe %Clipboard%;そのURLを引数にプログラムを起動Return;サブルーチンを終了
定期実行[編集]
タイマー機能を利用することで、定期的に特定の処理を実行させられる。
単に特定の動作を定期実行したり、ウィンドウやプロセスなどの状態を監視して処理を実行したりといったことに利用できる。
#Persistent;ホットキーなどを使用しない場合で、スクリプトを常駐させたいときに記述SetTimer,OnTimer,1000;指定サブルーチンを1秒ごとに実行されるようにするReturn;スクリプト起動時に実行される部分の終了OnTimer:;タイマーに割り当てられるサブルーチンラベルProcess,Exist,app.exe;指定プログラムが実行されているかを検出If ErrorLevel = 0;実行されていない場合Run,app.exe;再起動するReturn;タイマーサブルーチンの終了
指定時刻に実行[編集]
組み込み変数を使用すれば現在時刻などの情報も利用できる。
1秒ごとにサブルーチンを実行し、指定時刻を過ぎていたら処理を実行するというようなことも可能である。
#Persistent;ホットキーなどを使用しない場合で、スクリプトを常駐させたいときに記述time = %A_Now%;現在時刻を取得EnvAdd,time,30,Minutes;時刻に30分加算SetTimer,OnTimer,500;指定サブルーチンを0.5秒ごとに実行されるようにするReturn;スクリプト起動時に実行される部分の終了OnTimer:;タイマーに割り当てられるサブルーチンラベルIf A_Now > %time%;現在時刻が指定時刻を過ぎたらMsgBox,30分経過;メッセージを表示ExitApp;スクリプトを終了
何も操作をしていないときに実行[編集]
A_TimeIdlePhysical変数を使用することで、ユーザーが最後に何らかの操作を行ってから経過した時間を取得できる。
ユーザーが操作を行っていないときを見計らって処理を行うなどの機能が実現できる。
#Persistent;ホットキーなどを使用しない場合で、スクリプトを常駐させたいときに記述SetTimer,OnTimer,1000;指定サブルーチンを1秒ごとに実行されるようにするReturn;スクリプト起動時に実行される部分の終了OnTimer:;タイマーに割り当てられるサブルーチンラベルIf A_TimeIdlePhysical > 60000;1分以上操作を行っていなければ{ If flag <> 1;実行されたかどうかのフラグが立っていなければ{ Run,app.exe;プログラムを実行flag = 1;フラグを立てる} }Else{;最近1分以内に操作が行われた場合flag = 0;フラグを解除する} Return;タイマーサブルーチンの終了
Windowsのシャットダウン時に処理を実行[編集]
OnExitコマンドでスクリプトが終了されるときに実行される処理を設定できる。
A_ExitReason変数で終了理由を判別すれば、Windowsがシャットダウンされようとしているときに特定の処理を実行させられる。
#Persistent;ホットキーなどを使用しない場合で、スクリプトを常駐させたいときに記述OnExit,WatchShutDown;終了時に実行されるサブルーチンを割り当てReturn;スクリプト起動時の処理を終了WatchShutDown:;終了時に実行されるサブルーチンラベルIf A_ExitReason = ShutDown;終了理由がWindowsのシャットダウンかどうかを判別Run,app.exe;プログラムを実行し、終了まで待機ExitApp;スクリプトを終了させる
音量の制御[編集]
サウンドを再生したり、音量の設定を変更したりする機能もある。
下記の例では、ホットキーで音量を調節するごとにWindows標準の通知音を再生している。
#up:: SoundSet,+10 SoundPlay,*64 Return #down:: SoundSet,-10 SoundPlay,*64 Return
アプリケーションのGUIフロントエンド作成[編集]
GUIコマンドを使用することで、入力フォームを簡単に作成できる。
複雑なコマンドライン引数を入力しないと使用できないコンソールプログラムをGUIから簡単に使えるようになる
Gui,Add,Text,,対象ファイル;ラベルを追加Gui,Add,Edit,x100 yp+0 vTarget w400,;入力欄を追加Gui,Add,Checkbox,x100 vC1 w100,オプション&1;チェックボックスを追加;同様にオプションのチェックボックスを追加Gui,Add,Button,gExec x400 yp+0,&OK;実行ボタンを追加Gui,Show;ウィンドウを表示Return;スクリプト起動時の処理を終了Exec:;実行ボタンに割り当てられるサブルーチンGui,Submit,NoHide;フォームの内容を変数に反映cmd = app.exe "%Target%";基本となるコマンドラインを作成If C1 = 1;チェックボックスがONだったらcmd = %cmd% /o;コマンドラインオプションを追加;同様にチェックボックスの処理を記述Run,%cmd%;コマンドラインを実行Return GuiDropFiles:;ウィンドウにファイルがドロップされたときに実行されるStringSplit,fn,A_GuiEvent,`n;ファイル名の一覧を一つずつに分割GuiControl,,Target,%fn1%;エディットボックスに一つめのファイル名を設定Return;サブルーチンを終了
GUIアプリケーションのフロントエンド[編集]
操作自動化機能を利用すれば、使用方法が面倒で分かりづらいGUIプログラムを簡単な操作で利用できるようにすることも出来る。
Gui,Add,Button,gB1,処理Aを実行;ボタン1を追加;同様にいくつかのボタンを追加Gui,Show;ウィンドウを表示Return;スクリプト起動時の処理を終了B1:;ボタン1に割り当てたサブルーチンラベルRun,app.exe;プログラムを起動WinWait,ahk_class AppWnd;ウィンドウが表示されるまで待機ControlSend,,!eg!ef!x{Space}!o;ややこしい操作を送信ExitApp;スクリプトを終了させる;同様にいくつかのボタンに対応したサブルーチンを記述
テンプレートからファイルを作成[編集]
Transformコマンドを使用することで、あらかじめ用意したテンプレートファイルに変数の内容を埋め込むことが出来る。
これを利用すれば、入力フォームに入力された内容を元に処理設定ファイルを作成してプログラムを起動すると言ったことも簡単に行える。
;GUI作成部分は省略。Gui,Add,Button,gExec x400 yp+0,&OK;実行ボタンを追加Gui,Show;ウィンドウを表示Return;スクリプト起動時の処理を終了Exec:;実行ボタンに割り当てられるサブルーチン;フォームの入力内容を元に、テンプレートに埋め込む文字列を生成する処理を記述FileRead,template,%A_ScriptDir%\template.ini;テンプレートファイルを読み込みTransform,inifile,Deref,%template%;テンプレート内の変数参照を展開FileDelete,%A_ScriptDir%\setting.ini;既存のファイルを削除FileAppend,%inifile%,%A_ScriptDir%\setting.ini;内容をファイルに保存Run,app.exe "/ini = %A_ScriptDir%\setting.ini;プログラムを起動Return;サブルーチンを終了
template.iniの内容は以下のような要領で記述する。
%で囲んで変数名を記述した部分が変数に格納された内容に置換される。
[General]
TargetFile = %File%
SearchStr = %SearchStr%
IdleTime = %idle%
#以下略