Änderungen von v1.0 bis v1.1

Dieses Dokument beschreibt Änderungen zwischen AutoHotkey v1.0 und v1.1, die dazu führen können, dass sich Skripte anders verhalten, und deshalb beim Lesen oder Aktualisieren von altem Code beachtet werden sollten. Siehe auch: Änderungen von v1.1 bis v2.0.

AutoHotkey v1.1 ist auch unter den Namen "AutoHotkey_L" bekannt. AutoHotkey v1.0 trägt seit einiger Zeit den Namen "AutoHotkey Basic". Es gibt einige ältere Versionen von AutoHotkey_L, die eine Versionsnummer im Format 1.0.* haben, daher verwendet dieses Dokument die Namen der beiden AutoHotkey-Zweige, um Missverständnissen vorzubeugen.

Inhaltsverzeichnis

Hohe Auswirkung:

Mittlere Auswirkung:

Geringe Auswirkung:

Syntaxfehler

Bestimmte Syntaxfehler, die bei AutoHotkey Basic toleriert wurden, sind bei AutoHotkey_L nicht mehr erlaubt. Viele dieser Fehler können leicht korrigiert werden, sobald sie entdeckt werden. Einige Fehler werden beim Laden des Skripts erkannt und müssen korrigiert werden, bevor das Skript überhaupt ausgeführt werden kann. Andere Fehler werden nur ausgelöst, wenn bestimmte Bedingungen während der Skriptausführung erfüllt sind.

Die Fehlererkennung in v2.0 ist generell robuster, und da es zahlreiche Änderungen in der Verwendung gab, die über die reine Fehlererkennung und -behandlung hinausgehen, werden die Unterschiede in der Fehlererkennung zwischen v1.0 und v1.1 hier nicht aufgeführt. Diese Informationen finden Sie in der v1.1-Dokumentation.

FileRead

In bestimmten Fällen übersetzt FileRead den Text in eine andere Codepage und kann daher fehlerhafte Binärdaten ausgeben. Um das in v2.0 zu verhindern, fügen Sie die RAW-Option hinzu oder nutzen Sie stattdessen FileOpen.

Variablen- und Funktionsnamen

Die Zeichen [, ] und ? sind für die Nutzung in Ausdrücken reserviert und daher nicht mehr in Variablennamen gültig. Folglich benötigt ? (das in ternären Operationen benutzt wird) kein Leerzeichen mehr auf beiden Seiten. Code für v1.0, der diese Zeichen in einem Variablennamen verwendet, würde in v1.1 anders interpretiert und daher möglicherweise nicht als Fehler erkannt werden.

Siehe auch: Operatoren für Objekte, Namen (Änderungen von v1.1 bis v2.0)

DPI-Skalierung

Die DPI-Skalierung ist standardmäßig für Skript-GUIs aktiviert, um sicherzustellen, dass sie gemäß den systeminternen DPI-Einstellungen skaliert werden. Wenn sie aktiviert ist und wenn die DPI-Einstellung des Systems ungleich 96 (100 %) ist, sind Positionen und Größen, die von Gui-Methoden/Eigenschaften akzeptiert oder zurückgegeben werden, nicht mit anderen Funktionen kompatibel. Die DPI-Skalierung kann mit MeineGui.Opt("-DPIScale") deaktiviert werden.

Transform

Einige Unterbefehle von Transform wurden geändert oder deaktiviert:

Transform selbst wurde in v2.0 entfernt.

Standardskript

Startet man AutoHotkey_L ohne Angabe eines Skripts, wird standardmäßig eine AHK-Datei anstelle einer INI-Datei geladen. Der Name dieser Datei basiert auf dem Dateinamen der aktuellen EXE-Datei. Weitere Informationen finden Sie unter Skriptdateiname.

SetFormat, Integer[Fast], H

Verwendet man ein großes H, werden die Hexadezimalzeichen A-F auch in Großbuchstaben sein. AutoHotkey Basic erzeugt hingegen immer Kleinbuchstaben.

SetFormat selbst wurde in v2.0 entfernt. Format("0x{:x}", n) erzeugt die Kleinbuchstaben a-f, während Format("0x{:X}", n) die Großbuchstaben A-F erzeugt.

A_LastError

Die folgenden Befehle setzen nun A_LastError, um das Debuggen zu unterstützen: FileAppend, FileRead, FileReadLine, FileDelete, FileCopy, FileMove, FileGetAttrib/Time/Size/Version, FileSetAttrib/Time, FileCreateDir, RegRead, RegWrite, RegDelete. Sobald man einen dieser Befehle benutzt, wird der vorherige Wert von A_LastError überschrieben.

In v2.0 wird A_LastError auch von IniRead, IniWrite und IniDelete gesetzt.

MsgBox

In v1.0 und v1.1 hatte MsgBox eine "smarte Kommabehandlung", d.h. Kommas in einem anführungszeichenlosen Text mussten nicht mit einem Escapezeichen versehen werden. Diese Behandlung unterschied sich geringfügig zwischen den beiden Versionen und muss möglicherweise in sehr seltenen Fällen beim Lesen von v1.0-Code berücksichtigt werden. Weitere Informationen finden Sie in der v1.1-Dokumentation. AutoHotkey v2.0 verwendet ausschließlich die Ausdruckssyntax und benötigt daher keine spezielle Kommabehandlung.

Gui +Owner

Wendet man die +Owner-Option auf eine GUI an, wird zusätzlich der WS_CHILD-Style entfernt und der WS_POPUP-Style gesetzt. Diese Änderung kann dazu führen, dass Skripte, die das übergeordnete Fenster einer GUI mit +Owner setzen, nachdem die Styles gesetzt wurden, nicht mehr ordnungsgemäß funktionieren.

Tilde-Präfix und benutzerdefinierte Kombinationen

In v1.1.14+ beeinflusst das Tilde-Präfix das Verhalten einer Taste, die als Modifikatortaste in einer benutzerdefinierten Tastenkombination verwendet wird.

Benutzerdefinierte Kombinationen und Taste-Unten/Oben-Hotkeys

Wenn sowohl ein Taste-Unten- als auch Taste-Oben-Hotkey für eine benutzerdefinierte Modifikatortaste ohne Tilde-Präfix definiert sind, werden beide beim Loslassen der Taste ausgelöst. Zum Beispiel würde x & y:: bewirken, dass x:: und x up:: ausgelöst werden, wenn x losgelassen wird. Früher wurde x:: dabei nie ausgelöst.

If Var is [not] Typ

if Var is [not] Typ identifizierte in v1.0 standardmäßig bestimmte ASCII-fremde (ggf. sprachspezifische) Zeichen als alphabetisch/groß/klein, während dies in v1.1 nur dann der Fall war, wenn StringCaseSense Locale verwendet wurde. Entsprechend identifizieren die IsTyp-Funktionen in v2.0 ASCII-fremde Zeichen nur dann als alphabetisch, wenn der zweite Parameter "Locale" ist.

Fenstergruppen

GroupActivate setzt ErrorLevel nur in v1.1, nicht in v1.0 oder v2.0.

Der Label-Parameter von GroupAdd verhält sich in v1.0 anders als in v1.1, wurde aber in v2.0 entfernt.

Run / RunWait

AutoHotkey_L enthält Verbesserungen hinsichtlich dessen, wie Run und RunWait ihren Ziel-Parameter interpretieren. Diese Verbesserungen bieten neue Möglichkeiten, die früher nicht möglich waren, können aber bestehende Skripte beeinträchtigen, die unter AutoHotkey Basic liefen. Das neue Verhalten äußert sich wie folgt:

STRG+Z

Loop Read und File.ReadLine interpretieren das Zeichen Strg+Z (0x1A) nicht länger als Dateiendemarke (end-of-file marker). Jedes Strg+Z wird unverändert geladen, selbst wenn es ganz am Ende einer Datei steht. FileRead ignoriert dieses Zeichen bereits und ist daher von diesem Problem nicht betroffen.

A_IsCompiled

Wenn das Skript nicht kompiliert wurde, ist A_IsCompiled definiert, auch dann, wenn das Skript nicht kompiliert wurde; dessen Wert ist "" in v1.1 und 0 in v2.0. Früher blieb sie undefiniert, wodurch Zuweisungen wie A_IsCompiled := 1 in einem unkompilierten Skript möglich waren. Nun wird sie in jedem Fall als schreibgeschützte interne Variable behandelt.

DllCall

Wenn der an DllCall übergebene Funktionsname nicht aufgelöst werden kann, fügt AutoHotkey_L automatisch ein "A" (ANSI) oder "W" (Unicode) an den Funktionsnamen an, egal welche DLL angegeben wurde. AutoHotkey Basic hingegen fügt das Suffix "A" nur bei Funktionen in User32.dll, Kernel32.dll, ComCtl32.dll oder Gdi32.dll an.