v1.0からv1.1への変更

この文書では、AutoHotkey v1.0とv1.1の間の変更点を詳細に説明します。この変更により、スクリプトの動作が異なる場合がありますので、古いコードを読んだり更新したりする際に覚えておくことが重要かもしれません。こちらも参照のこと:v1.1からv2.0への変更点

AutoHotkey v1.1は「AutoHotkey_L」とも呼ばれ、AutoHotkey v1.0は「AutoHotkey Basic」と後付で表記された。AutoHotkey_Lの古いバージョンでは1.0.*のバージョン番号が使われているものもあるので、わかりやすくするために、このドキュメントではバージョン番号ではなく名前でAutoHotkeyの2つのブランチを参照しています。

目次

高いインパクトがある:

中程度のインパクト:

影響が少ない:

シンタックスエラー

AutoHotkey Basicでは許容されていた構文エラーも、AutoHotkey_Lでは許容されないものがあります。このようなエラーの多くは、一度確認すれば簡単に修正することができます。一部のエラーはロードタイムに検出され、スクリプトを実行する前に修正する必要があります。その他、スクリプトの実行中に特定の条件が満たされた場合にのみ発生するエラーもあります。

v2.0でのエラー検出は一般に堅牢であり、また、エラー検出や処理にとどまらず、使用方法にも多くの変更があるため、v1.0とv1.1とのエラー検出の違いはここでは記載しないことにします。これらの詳細については、v1.1のドキュメントを参照してください。

FileRead

FileReadは、特定の一般的なケースでコードページ間のテキストを変換するため、破損したバイナリデータを出力する可能性があります。v2.0ではこれを避けるため、RAWオプションを追加するか、代わりにFileOpenを使用します。

変数名と関数名

[]?式で使うために予約されているため、変数名には使えません。その結果、(3項演算で使用される)?は、両脇にスペースを必要としなくなった。これらの文字を変数名に使用したv1.0のコードは、v1.1では新しい解釈を持つことになり、エラーとして検出されない可能性があります。

Related: Operators for Objects, Names (Changes from v1.1 to v2.0)

DPIスケーリング

スクリプトGUIでは、DPIスケーリングがデフォルトで有効になっており、システムのDPI設定に応じたスケーリングが行われるようになっています。有効で、システムのDPI設定が96(100 %)でない場合、Guiのメソッド/プロパティで受け入れたり、そこから返したりする位置やサイズは、他の関数と互換性がありません。DPIスケーリングを無効にするには、MyGui.Opt("-DPIScale")を使用します。

Transform

Transformのサブコマンドの一部が変更されたり、使用できなくなったりします:

Transform自体はv2.0で削除されました。

デフォルトのスクリプト

スクリプトを指定せずにAutoHotkey_Lを起動した場合、.iniファイルではなく、.ahkファイルがデフォルトで読み込まれる。このファイルの名前は、現在の実行ファイルのファイル名に依存します。詳しくは、「スクリプトのファイル名」をご覧ください。

SetFormat, Integer[Fast], H

大文字のHを使用した場合、16進数のA~Fも大文字になります。AutoHotkey Basicでは、常に小文字の数字が出力されます。

SetFormat自体はv2.0で削除されました。Format("0x{:x}", n)では小文字のa-fが、Format("0x{:X}", n)では大文字のA-Fが生成されます。

A_LastError

以下のコマンドでは、デバッグを支援するためにA_LastErrorを設定するようにしました:FileAppend、FileRead、FileReadLine、FileDelete、FileCopy、FileMove、FileGetAttrib/Time/Size/Version、FileSetAttrib/Time、FileCreateDir、RegRead、RegWrite、RegDelete。これらのコマンドを使用すると、A_LastErrorの以前の値は上書きされます。

v2.0では、A_LastErrorはIniRead、IniWrite、IniDeleteでも設定されます。

MsgBox

v1.0とv1.1のMsgBoxは、引用符のないテキストでカンマをエスケープする必要がないように、「スマートカンマ処理」を採用していました。この処理は2つのバージョンで若干異なっており、v1.0のコードを読む際に非常に稀なケースで考慮する必要があるかもしれません。詳細はv1.1のドキュメントを参照してください。v2.0は式構文のみを使用するため、カンマを特別に扱う必要がありません。

Gui +Owner

また、Guiに+Ownerオプションを適用すると、WS_CHILDスタイルが削除され、WS_POPUPスタイルが設定されます。このため、スタイルを設定した+OwnerでGuiの親ウィンドウを設定していたスクリプトが壊れる可能性があります。

~ティルデとカスタムコンビネーションホットキー

v1.1.14以降、チルダ接頭辞は、カスタムコンビネーションでモディファイアキーとして使用する際のキーの動作に影響します。

カスタムコンビネーションとダウン/アップホットキー

チルダ接頭辞が使われている場合を除き、カスタム修飾キーにキーダウンホットキーとキーアップホットキーの両方が定義されている場合、キーが離されたときに両方が発火することになります。例えば、x & y::では、これまでx::が発射されることはなかったが、xを離すとx::x up::の両方が発射されるようにします。

If Var is [not] Type

If Var is [not] Typeはv1では特定の(おそらくロケール固有の)非 ASCII 文字をデフォルトでアルファベット/アッパーケース/小文字として識別しましたが、 v1.1 では StringCaseSense Locale が使われている場合にのみそうしていました。同様に、v2.0のIsType関数は、第2パラメータが"Locale"の場合にのみ非ASCII文字をアルファベットとして識別します。

ウィンドウズ・グループ

GroupActivateでErrorLevelを設定するのはv1.1のみで、v1.0やv2.0では設定しない。

GroupAddLabelパラメータはv1.0とv1.1で挙動が異なりますが、v2.0では削除されています。

Run / RunWait

AutoHotkey_Lでは、RunコマンドとRunWaitコマンドがTargetパラメータを解釈する方法がいくつか強化されています。これにより、以前は動作しなかったものが動作するようになりますが、ごく稀に、AutoHotkey Basicで既に動作していたスクリプトにも影響を与える場合があります。新しい動作は以下の通りです:

Control-Z

Loop ReadFile.ReadLineで、文字Ctrl+Z(0x1A)をファイル終了マーカーとして解釈しないようになりました。Ctrl+Zは、ファイルの末尾に表示されるものでも、そのまま読み込まれます。FileReadはすでにこの文字を無視しているため、本問題の影響は受けません。

A_IsCompiled

スクリプトがコンパイルされていない場合でも、A_IsCompiledは定義されます。その値はv1.1では""、v2.0では0となる。以前は未定義のままだったため、スクリプトがコンパイルされていなくても、A_IsCompiled := 1のような代入が有効でした。これで、すべてのケースで読み取り専用の組み込み変数として扱われるようになりました。

DllCall

DllCallで指定された関数名が解決できない場合、AutoHotkey_Lは、どのDLLが指定されたかにかかわらず、自動的に関数名に "A"(ANSI)または "W"(Unicode)を付加します。一方、AutoHotkey Basicでは、User32.dll、Kernel32.dll、ComCtl32.dll、Gdi32.dll内の関数に対してのみ"A"サフィックスを付加しています。