多くのプログラミング言語にループ処理があるように、AutoHotKeyにもLoop
を使ったループ処理が存在します。
今回はLoop
の2種類の使い方をご紹介しましょう。
Loopで指定回数繰り返す
まずは1つ目、繰り返し作業です。
Loop [, Count]
;Countの回数だけ繰り返す(Countを省略した場合は無限)
指定回数だけ繰り返すという非常に単純なコマンド。使用例を見ていきましょう。
!p::
Loop, 3
{
MsgBox, %A_index%回目
}
Alt+Pでダイアログが3回出てきます。ループ回数はA_index
という組み込み変数に格納され、1から順に増えていきます。
Continueとbreak
!p::
Loop
{
if(A_Index == 2)
continue ;A_indexが2のときは処理を飛ばす
if(A_Index == 5)
break ;A_indexが5になればここで終了
MsgBox, %A_index%回目
}
return
プログラミング言語に触れている方にはお馴染みのcontinue
やbreak
も使用可能です。
この場合、引数Count
は省略されていますが、ダイアログに表示される数値は「1,3,4」のみとなります。当然ですがbreak
が無いと無限にループされるので気を付けてください。
マウスの座標を表示する
!p::
CoordMode,Mouse,Screen
Loop{
MouseGetPos, x, y
ToolTip, X:%x% Y:%y%
if(x+y == 0){
ToolTip
break
}
}
return
Loopの使用例としてもう1つ簡単な例をご紹介します。上のコードではマウスの現在位置(絶対座標)をツールチップに表示するという動作をループ処理し、マウスの移動に追従する形で座標を表示し続けます。
ツールチップは座標が「X = 0 , Y = 0」になると消滅します。画面の左上端にマウスを移動させてみてください。
ファイル/フォルダをループ処理
Loop
にはもう1つの顔があります。それが「ファイルやフォルダを引数に取る」Loopです。
Loop, FilePattern [, IncludeFolders=0, Recurse=0]
;FilePatternで指定したディレクトリやファイルに対してループ処理を行う
こちらのLoopは指定パスのループ処理を行います。試してみましょう。
!o::
Loop, %A_MyDocuments%\test\* ;A_MyDocumentsはドキュメントフォルダを示す変数
{
Gui, add,Text, ,%A_LoopFileName%`n ;ファイルの名前をGUIに加える
}
Gui, Show
Return
ループにかけているのはドキュメントフォルダにあるtestフォルダです。その後のアスタリスクはワイルドカード(何でもアリ)で、「このフォルダにあるモノの種類は問わない」としています。*.txt
などとすることで、「名前は問わないが拡張子が.txt」などを指定することもできます。
オプションを指定しなければ、Loop
はフォルダの中にあるファイルに対して処理を行います。サブフォルダは含みません。
ファイル構造がこの様になっていたとします。
test
├── 001.txt
├── 002.txt
├── 003.txt
├── sub1
│ ├── 001.bmp
│ ├── 002.bmp
│ └── 003.bmp
└── sub2
├── 001.pdf
├── 002.pdf
└── sub3
└── 003.pdf
このコードを走らせると、
testフォルダに置かれたファイルのみリストアップされ、GUIウインドウにファイル名が表示されました。
IncludeFoldersオプション
次にオプションを指定してみましょう。第二引数のIncludeFolders
はリストアップする対象を選択するオプションです。
引数に入れる値 | 意味 |
---|---|
0 (デフォルト) | ファイルのみが対象 |
1 | ファイルとフォルダが対象 |
2 | フォルダのみ対象 |
!o::
Loop, %A_MyDocuments%\test\*,1 ;IncludeFolders = 1
{
Gui, add,Text, ,%A_LoopFileName%
}
Gui, Show
Return
オプションで1を選択すると、
1階層目にあればフォルダも検索対象となり、リストアップされます。
Recurseオプション
第三引数はRecurse
です。デフォルトは0ですが、1にするとサブフォルダも検索対象とします。
!o::
Loop, %A_MyDocuments%\test\*,,1 ;Recurse = 1
{
Gui, add,Text, ,%A_LoopFileName%
}
Gui, Show
Return
testフォルダの中にあるフォルダは全て検索対象となり、そこに存在するファイルは全てリストアップされました。
Loopで使える組み込み変数
今回のコードではA_LoopFileName
でファイル名を取り出していますが、Loop内で使用できる組み込み変数はこの他にも多くあります。使用頻度が高いであろうものを抜粋してますので、確認してみてください。
変数名 | 値 |
---|---|
A_LoopFileName | 拡張子を含むファイル名 |
A_LoopFileFullPath | ファイルのフルパス |
A_LoopFileDir | ファイルが置かれているディレクトリ |
A_LoopFileTimeCreated | 作成日時 |
A_LoopFileTimeModified | 最終更新日 |
A_LoopFileTimeAccessed | 最終アクセス日時 |
A_LoopFileSize | ファイルサイズ(Byte) |
A_LoopFileSizeKB | ファイルサイズ(KB) |
A_LoopFileSizeMB | ファイルサイズ(MB) |