ahk2

ちょっと前に AHK の v2 が正式にリリースされたというニュースを見かけて、こっちに切り替えることにしました
・・・が、ドキュメントを見ると変更が多すぎる!
https://www.autohotkey.com/docs/v2/v2-changes.htm

面倒そうで後回しにしてたらこんなにかかってました

変更点は書いてはいるのですが、言葉で列挙されてるだけで、サンプルを使ってこれをこうする、という例がないんですよねー
十分な前提知識なしで、コピペをちょっと改変するくらいでスクリプト作ってるレベルの人からするとハードルが高いです
そのせいでかなり短めのスクリプトなのに苦労しました

使ってないコマンドたちもあったのでそれらは消して現状はこうなりました
main.ahk
ほぼ方向キーだけです
(ちなみにこの Gist、 Gist なので変更履歴が見えますが、しばらく更新してなかったので更新履歴はあんまり見ても意味ないかもです)

・・・・・

ここからは、変更した箇所の簡単な説明です

複数行のところで Return を使わず {} で囲むようになりました

sc07B & i::
SetKeyDelay -1
Send {Blind}{Up DownTemp}
Return
↓
sc07B & i::
{
SetKeyDelay -1
Send "{Blind}{Up DownTemp}"
}

文字列は明示的にクオートで囲まないといけなくなりました

Send {Blind}{Left Up}
↓
Send "{Blind}{Left Up}"

記号が入らない場合でも必要です

SendMode Input 
↓
SendMode "Input"

代わりに、クオート無しで普通に書いた文字列は変数のことになりました
これまで % で囲んでこの文字列は変数ですよーと表していた部分に % がいらなくなりました

SetWorkingDir %A_ScriptDir%
↓
SetWorkingDir A_ScriptDir

コマンドがなくなり、関数のみになったようです
それに伴い、コマンド名の後に「,」があるとエラーになります
「,」 の代わりにスペースにすると動きます

sc07B::Send,{sc07B}
↓
sc07B::Send "{sc07B}"

関数とそれへのパラメーターを指定する正式な書き方は、カッコありのよくある関数呼び出し形式みたいです

Send("{sc07B}")

ListLines 関数で表示できる最近実行した行の履歴や、エラーがあったときに出てくるダイアログの中のコードでは () ありの形式に修正されて表示されていました

ちなみに最初のこの 2 行

SendMode "Input"           ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir A_ScriptDir ; Ensures a consistent starting directory.

テンプレートに入っていたのでとりあえずつけてますが、 SendMode のデフォルトは Input ですし、ワーキングディレクトリのデフォルトはスクリプトの場所です
明示的に指定してるだけで、デフォルト値と一緒なので別になくても良かったりします

また、 SetKeyDelay も SendMode が Input だと使われないそうです
ただし、 Input は他ソフトでもキーボードをフックしていたら効率が落ちるから Event にフォールバックするらしいです
そういうときに有効なはずなのでとりあえず残してます



ところで、 AHK って Win7 の頃は不満なかったのですが、 Win10 にしたくらいから、ときどき修飾キーが押したままにになって残ってしまう事が起きるようになりました
「修飾キー+J」で「←」キーになるようにしている場合、J だけ押したのに左に移動してしまう、といったものです
修飾キーをもう一度押せば直りますが結構面倒だし、これが起きると意味不明な入力になるのでどうにかしたいと思ってるものです

AHK2 で直ってるといいなと思って移行したのですが、ここは変わってませんでした
スクリプトの構文を整理しただけで、中の処理は一緒なのかもしれませんね