autohotkey v1 を autohotkey v2 に移植
2022年12月に、autohotkey v2 が発表されました。そこで、autohotkey v1 をautohotkey v2 に移植する方法について、いつものChatGPT君に聞いてみました。ChatGPT はプログラミングについては矢鱈と詳しいのです。
AutoHotkey v1からAutoHotkey v2に移植する場合、以下のような変更が必要になる場合があります。
#NoEnvステートメントの削除
AutoHotkey v2では、#NoEnvステートメントは必要ありません。そのため、スクリプトの先頭から削除できます。#SingleInstanceステートメントの変更
AutoHotkey v2では、#SingleInstanceステートメントのパラメータが変更されました。以下は、AutoHotkey v1とv2のパラメータの比較例です。
#SingleInstance force ; AutoHotkey v1
#SingleInstance, force ; AutoHotkey v2
→ #SingleInstance のあとにカンマを打つだけですね。
コマンド名の変更
AutoHotkey v2では、一部のコマンド名が変更されています。以下は、いくつかの例です。
AutoHotkey v1 AutoHotkey v2
--------------------- ---------------------
MsgBox MsgBox
FileCreateDir DirCreate
WinGetClass WinGetClassList
WinGetTitle WinGetTitleList
→ MsgBox は変わっていないような・・・
コマンドパラメータの変更
AutoHotkey v2では、一部のコマンドのパラメータが変更されています。たとえば、Loopコマンドの場合、countパラメータはtoパラメータに変更されています。
Loop, 10 ; AutoHotkey v1
Loop, 1, 10 ; AutoHotkey v2
→ 初期値と終了値の2つが必要なのですね。
Ifステートメントの変更
AutoHotkey v2では、ifステートメントの構文が変更されています。以下は、AutoHotkey v1とv2の比較例です。
if (a == b) ; AutoHotkey v1
if (a = b) ; AutoHotkey v2
→ == 演算子の方が C言語の比較文と似ていてよかったです。なぜ代えたのか開発者の意図が不明です。
変数の宣言
AutoHotkey v2では、変数の宣言方法が変更されました。以下は、AutoHotkey v1とv2の変数宣言の比較例です。
a := 1 ; AutoHotkey v1
a := 1 ; AutoHotkey v2
→ 宣言方法の例を見ても、変わっていないように思います。ChatGPT君のミスですか。
組み込み関数の変更
AutoHotkey v2では、一部の組み込み関数が変更されています。たとえば、A_IndexはForループ内でのみ使用できるように変更されています。以上のような変更を行うことで、AutoHotkey v1からv2への移植ができます。ただし、複雑なスクリプトの場合は、移植に時間がかかる場合があります。
→ ChatGPT君は、最後に言い訳っぽい逃げを打ってきました。でも、これは実際にはautohotkey v2 へ移植しようとして嵌った世界中のエンジニアの声を収集した結果なのでしょうね。