Änderungen und neue Features

Änderungen von v1.1 bis v2.0 behandelt die Unterschiede zwischen v1.1 und v2.0.

Alle technischen Einzelheiten zu den Änderungen finden Sie auf GitHub.

2.0.13 - 20. April 2024

Geändert: Die Hotkey-Funktion löst nun einen ValueError aus, wenn ihr Optionen-Parameter eine ungültige Option enthält.

Behoben: InputHook respektiert nun die +S-Option für Backspace, wenn es als "rückgängig machen" fungiert.

Behoben: Der Debugger handhabt nun sicher das Löschen von Eigenschaften während einer Enumeration.

Behoben: Der Inhalt der OLE-Zwischenablage (z.B. Fehlerdialogtext) ging beim Beenden verloren.

Behoben: Die Erkennung eines ungültigen Suffixes bei einem Hotkey, wie z.B. Hotkey "a pu".

Behoben: Der AStr*-Argumenttyp von DllCall wird nur noch zurückkopiert, wenn sich die Adresse ändert.

Behoben: #Include "schließt" nun korrekt jede interne Variable, die es liest (keine bekannten Auswirkungen auf reale Skripte).

Behoben: FensterTitel mit zwei verschiedenen ahk_id-Werten ergaben keine Übereinstimmung.

2.0.12 - 23. März 2024

Behoben: Gui GetPos/GetClientPos bei einer Gui mit einem übergeordneten Fenster oder +DPIScale.

Behoben: Until verhinderte die Rekursion von Unterordnern in Dateischleifen.

Behoben: DllCall löst nun eine Ausnahme beim UStr-Argumenttyp aus.

Behoben: Ein Speicherleck, das bei jedem Regex-Callout auftrat.

Behoben: Send löste fälschlicherweise einen Modifikator aufgrund einer Race Condition aus. Zum Beispiel löste ~LAlt::Send "{Blind}x" gelegentlich LAlt aus, wenn ein anderer Tastatur-Hook als der eigene Hook des Skripts installiert war.

Behoben: Der Symbol-Lader bevorzugt nun eine höhere Bittiefe, wenn mehrere Bitmaps gleicher Größe vorhanden sind.

Behoben: SendInput konnte LCtrl nicht loslassen, wenn es bereits RAlt losgelassen hatte und das Layout kein AltGr hatte.

Behoben: Taste-Oben-Hotkeys werden nicht mehr ausgelöst, wenn die Taste nach einer Modifikatoränderung wiederholt gedrückt wird. Zum Beispiel sollte F1::Send "{Ctrl down}" die Ausführung von F1 up:: erlauben, wenn die Taste losgelassen wird, obwohl Ctrl unten ist, aber erlaubte es nicht nach einer Tastenwiederholung.

Behoben: Eine Fehlermeldung bezog sich auf #HotIf statt auf #IfWin. [PR #327]

Behoben: OwnProps übersprang fälschlicherweise Eigenschaften mit optionalen Parametern.

Behoben: Inkonsistentes Verhalten von geklonten dynamischen Eigenschaften.

Behoben: SysGetIPAddresses verursacht keinen kritischen Fehler mehr, wenn das Netzwerk-Subsystem nicht funktionsfähig ist, z.B. im abgesicherten Modus von Windows.

Geändert: ControlGetFocus gibt nun 0 zurück, wenn der Fokus nicht ermittelt werden kann, z.B. wenn ein Konsolenfenster aktiv ist.

2.0.11 - 23. Dezember 2023

Hinzufügt: Workaround für das erste angezeigte Menü, das in Windows 10 keine Tastatureingaben akzeptierte.

Behoben: Die Add-Methode (Gui) unterstützt nun die ShortDate-Option für DateTime-Steuerelemente.

Behoben: Referenzzählungsfehler bei mehrstufiger Funktionsverschachtelung.

Behoben: #Include <x> verursachte einen Ladezeitabsturz, wenn es innerhalb einer Funktion verwendet wurde.

Behoben: ListView.Opt("NoSort").

Behoben: Ein Speicherleck beim Klonen eines Objekts ohne eigene Eigenschaften.

Behoben: #Include und FileInstall (nicht kompiliert) vergleichen Dateinamen nun ordinal, nicht linguistisch.

2.0.10 - 24. September 2023

Behoben: Kein Absturz mehr, wenn ein benannter Funktions-Hotkey nach #HotIf verwendet wird.

Behoben: Direkt geschriebene Zahlen, die mit einem Punkt enden, bewirken keine Zeilenfortsetzung mehr.

Behoben: Vorherige Inkrementierung/Dekrementierung funktioniert nun auch mit verketteten Array-Indexierungen.

Behoben: OnNotify/OnCommand wendete Styles an, die nur für OnEvent gelten.

Behoben: FileExist/DirExist gab Handles nicht frei, wenn LeeresVerz\* verwendet wird.

Behoben: DirExist gab Handles nicht frei, wenn nur Dateien übereinstimmen.

2.0.9 - 17. September 2023

Behoben: Stapelung von Hotstrings mit der X-Option.

Behoben: Debugger listet nun lokale Variablen auf, wenn sich die Funktion am Ende des Stapels befindet.

Behoben: Gui-Threads werden nun im Aufrufstapel des Debuggers angezeigt.

Behoben: Einige &/ByRef-Kombinationen, die einen Stapelüberlauf in ExitApp verursachten.

2.0.8 - 11. September 2023

Behoben: ByRef-Parameter weisen der VarRef des Aufrufers nicht mehr fälschlicherweise den Standardwert zu, wenn ungesetzt.

Behoben: Einige Probleme mit unterdrückten Alt/Strg/Umschalt/Win-Hotkeys, wie zum Beispiel:

Behoben: Einige Probleme bzgl. Fortsetzungsbereiche:

Optimiert: Das automatische Escaping von Anführungszeichen und umgekehrten Häkchen in Fortsetzungsbereichen.

Behoben: breakpoint_list (Debugger) gab Duplikate bei Zeilen zurück, die Fat-Arrow-Funktionen enthalten.

Behoben: +BackgroundDefault konnte die BackColor-Eigenschaft von Gui nicht überschreiben.

2.0.7 - 2. September 2023

Behoben: Bei MouseClickDrag können nun X1 und Y1 weggelassen werden.

Behoben: Maus-AltTab-Hotkeys unterdrückten nicht die Ausführung eines Präfix-Hotkeys, z.B. 1:: für 1 & WheelDown::AltTab. (fehlerhaft seit v2.0.4)

Behoben: Hook-Hotkeys erkannten keine Modifikatoren, die mit SendInput nach unten gedrückt wurden.

Behoben: A_AhkPath ist nun nicht mehr auf die Groß-/Kleinschreibung oder das Format der Befehlszeile angewiesen, die/das zum Starten des Prozesses verwendet wird.

Behoben: Heap-Korruption bei einer Fenstersuche mit Gruppen. (fehlerhaft seit v2.0.6)

Launcher

Behoben: #Requires wurde nicht erkannt, wenn dahinter ein anderer Kommentar als ; prefer xxx stand. (fehlerhaft seit v2.0.6)

Behoben: Syntaxerkennung fehlinterpretierte mehrzeilige automatisch-ersetzende Hotstrings.

Window Spy

Geändert: Window Spy verwendet nun die Schriftart Segoe UI mit der Schriftgröße 9, in Übereinstimmung mit Dash.

2.0.6 - 30. August 2023

Behoben: Mehrdeutigkeiten bei COM-Aufrufen, z.B. wenn x.y als x.y() fungiert.

Behoben: Haltepunkte bei Kontrollanweisungen wurden "getroffen", wenn eine Fat-Arrow-Funktion in der Zeile darunter zurückkehrt.

Behoben: Default : verbindet sich nicht mehr mit der Zeile darunter. Dies verhinderte die Verwendung von Default : am Ende eines Switch-Blocks und führte dazu, dass jede nachfolgende Zeile die Zeilennummer des Defaults erhielt.

Optimiert: ProcessGetPath, ProcessSetPriority und ProcessClose durchlaufen nicht mehr alle Prozesse, wenn eine gültige PID angegeben ist, auch wenn der Zugriff auf den Prozess verweigert wird.

Behoben: LWin::Alt konnte nicht zum Aktivieren einiger Alt-Tastenkombinationen verwendet werden.

Behoben: TypeError, ausgelöst durch x is y, zeigt nun "Class" statt "Object" an.

Behoben: FensterTitel unterstützt nun Kriterien länger als 1023 Zeichen.

Behoben: Es gab Probleme, wenn &ref auf verschiedene Aliase derselben Variable angewendet wurde.

Behoben: Bestimmte Standardausdrücke von optionalen Parametern (außer einfache direkt geschriebene Werte) verhinderten die Verwendung von Assume-Global/Assume-Static.

2.0.5 - 12. August 2023

Behoben: Ein Speicherleck, das durch falsche Referenzzählung verursacht wurde, wenn ein Objekt via COM enumeriert wird. [PR# 325]

Behoben: Interne Aufrufe von __Enum rufen nun nicht mehr __Call auf.

Behoben: Fehlermeldungen bezüglich Parameter #65535.

Behoben: Falsche IEnumVARIANT-Rückgabeanzahl.

Behoben: Download löste OSError(0) aus, obwohl der Fehler ungleich Null sein sollte.

Behoben: LV.Add/Insert/Modify verursachte einen Absturz, wenn die Mindestanzahl von Parametern übergeben wird.

Behoben: Stacktraces ignorieren nun __new-Aufrufe für Error-Unterklassen.

2.0.4 - 3. Juli 2023

Geändert: Die Reload-Schaltfläche in Fehler-/Warndialogfenstern schließt das Fenster nun explizit, auch dann, wenn die aktuelle Skriptinstanz nicht terminiert ist.

Entfernt: Eine Optimierung für return var, die dazu führte, dass die Variable beim Zugriff innerhalb eines finally-Blocks leer erschien.

Behoben: Default (Switch) erlaubt nun Leerzeichen vor dem Doppelpunkt.

Behoben: Array.Prototype.RemoveAt gibt nun den entfernten Wert zurück, wenn Länge mit unset oder var? "explizit weggelassen" wird.

Behoben: Kein Absturz mehr, wenn ein ComObject an eine For-Schleife übergeben wird, bei der nur die zweite Variable angegeben ist.

Änderungen von v1.1.37.00 und v1.1.37.01 übernommen:

Geändert: COM-Methodenaufrufe und -Eigenschaftsaufrufe übergeben große Integer nun als VT_I8, nicht mehr als VT_R8 (Floating-Point), um den ursprünglichen Typ und die Genauigkeit beizubehalten. Integer im 32-Bit-Bereich werden weiterhin als VT_I4 übergeben.

Hinzugefügt: Unterstützung für Multi-Variablen-Enumeratoren (For-Schleifen) mit IDispatch-gewrappten AutoHotkey-Objekten. Sowohl das Skript, das das Objekt indirekt aufruft, als auch das Objekt selbst müssen mit einer unterstützten AutoHotkey-Version ausgeführt werden.

Behoben: Weggelassene Parameter erhalten nun ihre Standardwerte und nicht mehr den Marker "optionales Argument", wenn eine AutoHotkey-Methode über IDispatch (COM) aufgerufen wird. Die umgekehrte Übersetzung wurde bereits in früheren Versionen beim Aufruf von COM-Methoden durchgeführt.

Behoben: VerCompare(a, ">" b) und geringfügige Reduzierung der Codegröße.

Behoben: AltTab-bezogene Ladezeitfehler sind nun konsistent mit anderen Fehlern.

Behoben: Fehler, die durch einen ComObject-Wrapper ausgelöst werden, wurden nicht korrekt weitergegeben, wenn dieser über ein Objekt/COM aufgerufen wird.

Behoben: Das Hotkey-GUI-Steuerelement erlaubt nun das Setzen der Symbole ^, ! und + als Hotkeys.

Behoben: Das Hotkey-Steuerelement inkludiert nun Modifikatoren, wenn sein Wert auf ein Symbol gesetzt ist.

Behoben: Mögliches Fehlverhalten von InputHook.KeyOpt() bei einzelnen Zeichen.

Behoben: Ein Bug bei benutzerdefinierten Kombos, bei dem ein Satz von Hotkeys wie a & b::, a:: und a up:: das Loslassen von a nicht unterdrücken konnte, wenn a:: allein mit #HotIf deaktiviert wurde.

Behoben: Ein Bug, bei dem ein Taste-Unten-Ereignis korrekt durch einen Hotkey unterdrückt wurde, aber das Senden eines zusätzlichen Taste-Unten mit SendLevel > 0 verhinderte, dass das nachfolgende Taste-Oben unterdrückt wurde, selbst wenn das gesendete Ereignis aufgrund von #InputLevel ignoriert wurde.

Behoben: a & b up:: unterdrückte b nicht, wenn a & b:: vorhanden, aber durch #HotIf deaktiviert ist.

Behoben: Hotkeys wurden aufgrund einer Race Condition nicht ausgelöst. Wenn ein Modifikator-Hotkey wie ~*RWin:: zu früh Send oder GetKeyState aufruft, kann das System melden, dass RWin nicht unten ist, wodurch der Modifikatorstatus des Hooks "korrigiert" wird und Hotkeys fälschlicherweise ausgelöst oder nicht ausgelöst werden. Dies trat wahrscheinlich nur auf, wenn ein anderer Tastatur-Hook vor dem Hook des Skripts installiert wurde, da in diesem Fall das System den Status der Tasten nicht aktualisiert, bis der Thread des anderen Hooks fortgesetzt wird und zurückkehrt.

Behoben: Hotstrings verwenden nun das Zuletzt Gefundene Fenster von #HotIf.

Behoben: Der Versuch, den Tastatur- oder Maus-Hook neu zu installieren, schlug fehl, wenn das System den Hook automatisch deinstalliert hat. Nach wie vor müssen bestimmte Bedingungen erfüllt sein, bevor ein solcher Versuch unternommen werden kann.

Optimiert: Speicherreservierung von zwischengespeicherten COM-Eigenschaftsnamen für internes IDispatch.

Code überarbeitet: Unterstützung einer Build-Konfiguration für AutoHotkey als DLL.

2.0.3 - 19. Juni 2023

Behoben: Hotkey("a", "b") verwendet nun die Originalfunktion von "b", nicht "a". [PR #318]

Behoben: FileSetAttrib stürzt nicht mehr ab, wenn es in einer dateilesenden Schleife verwendet wird. [PR #323]

Behoben: Fehler bzgl. doppelter Gui-Steuerelement-Namen brechen den Thread nun korrekt ab.

Behoben: Die Range-Option von DateTime/MonthCal wendete nicht den Minimalwert an.

Behoben: s[x] => x und andere einzeilige Eigenschaften, die mit "s" beginnen.

Behoben: Bug beim Löschen eines Haltepunkts auf einer static-Zeile, die => enthält.

Behoben: Das Button-Steuerelement wurde nicht zur Standardschaltfläche, wenn es angeklickt wurde.

Behoben: PixelSearch macht X nun leer, wenn das Pixel nicht gefunden wird.

Behoben: Ein Hotstring mit Escapesequenz führte dazu, dass die nächste Zeile übersprungen wurde.

Behoben: FensterTitel ignorierte Zeichen 1, wenn "ahk_" bei Zeichen 2 ist.

Behoben: Neubelegung verwendet nun den rechten Modifikator, der gerade unten ist. Zum Beispiel wird +x::+y nicht mehr RShift loslassen, um LShift zu drücken.

Geändert: Fehlermeldung für a == b && c() und ähnliche Fälle, um Hinweise auf das Legacy-= zu vermeiden.

Verbessert: Fehlermeldung für einige Fälle von unbeabsichtigter Zeilenfortsetzung.

Behoben: Reservierte Wörter können nun als Methodennamen verwendet werden, wie dokumentiert.

Behoben: Doppelte OnMessage-Aufrufe für einige Tastaturmeldungen.

Behoben: Ineinander referenzierte Closures wurden vorzeitig gelöscht.

Behoben: SetFont erlaubt nun Leerzeichen am Anfang im Options-Parameter.

Behoben: Senden von {ASC nnnn}.

Behoben: a.base := a löst nun einen Fehler aus.

Behoben: x.y := unset führte zu Abstürzen oder undefiniertem Verhalten.

Behoben: GuiControl.Move() ist nun relativ zum Clientbereich der GUI, selbst wenn die GUI nicht übergeordnet ist.

Behoben: Menu Add überschrieb Menüpunkte, die mit Menu Insert angefügt wurden.

Launcher

Dash ausführen, anstatt die alte Willkommensseite in der Dokumentation anzuzeigen, wenn es ohne Parameter ausgeführt wird.

Behoben: Die Versionsauswahl-GUI verursachte einen Fehler, wenn Enter gedrückt wurde, ohne eine Version auszuwählen. [PR UX/#4]

Fehler unterdrücken, wenn geprüft wird, ob eine fehlende Version heruntergeladen werden kann.

Behoben: Die Aufforderung zum Herunterladen einer fehlenden Version zeigt nicht mehr das UAC-Schild an, wenn UAC deaktiviert ist.

Behoben: Probleme bei der Interpretation von #Requires.

Installation

Behoben: Standard-Installationsverzeichnis für die Befehlszeilenverwendung.

Die Startmenüverknüpfung wurde von "AutoHotkey" in "AutoHotkey Dash" umbenannt.

Behoben: EnableUIAccess bei der Ausführung als SYSTEM.

Behoben: EnableUIAccess verifiziert nun den Privatschlüssel bei der Auswahl eines Zertifikats.

Dash

Behoben: Launch Config GUI aktualisiert nun die Optionen "Run as administrator" und "Run with UI access".

Behoben: Nach-Oben/Unten-Pfeiltasten-Handhabung in der Launch Config GUI.

2.0.2 - 2. Januar 2023

Behoben: Kurze DllCall-Arg-Typen und undefiniertes Verhalten bei ungültigen Typen.

Behoben: (Nicht-Zeichenketten-)Dateiversionsnummer bei AutoHotkey-Binärdateien.

Behoben: Parametertypfehler zeigen nun die richtige Parameternummer an.

2.0.1 - 1. Januar 2023

Behoben: Func.IsOptional(1) gab manchmal 0 zurück, wo es nicht sollte.

Behoben: GUI-Ereignishandler-Funktionen lassen den Gui-Parameter nicht mehr weg, wenn die GUI ihr eigener Event-Sink ist.

Behoben: COM-Fehler zeigen nicht mehr "(null)" an, wenn keine Beschreibung verfügbar ist.

Behoben: ToolTips wurden manchmal an der falschen Stelle angezeigt.

Behoben: __Enum(unset) erlaubt nun eine zweite Variable für Array, Match und Gui.

Behoben: "#Include <>"-Fehlermeldungen zeigen nun "Script library" statt "Function library" an.

Behoben: Neue Threads konnten eine Meldungsüberprüfung mit Critical nicht verhindern.

Optimiert: Konvertierung von DllCall-Typnamen.

Optimiert: Triviale, aber effektive Optimierungen der Codegröße.

Pre-Release

Einen Verlauf der Änderungen vor dem v2.0.0-Release finden Sie an folgenden Orten (beachten Sie jedoch, dass einige Änderungen inzwischen hinfällig sind):