Ä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.17 - 5. Juni 2024

Optimiert: FensterText-Parameter-Optimierung von Descolada implementiert. [PR #335]

Geändert: UnsetError-Meldung schlägt nun eine globale Deklaration vor, anstatt "(same name as a global)" hinter dem Variablennamen anzufügen.

Geändert: VarUnset-Warnmeldung wurde geändert, um konsistent mit UnsetError zu sein.

Behoben: Die Inkrement-/Dekrementoperatoren lösen nun UnsetError aus, wenn die Variable ungesetzt ist, nicht TypeError.

Behoben: OwnProps weist nun den Eigenschaftsnamen sicher zu, wenn sich eine Eigenschaft selbst löscht.

Behoben: Haltepunkte funktionieren jetzt auch in Fat-Arrow-Funktionen unter einer Kontrollanweisung ohne Block.

Behoben: Der Debugger hält nun an der Zeile des Aufrufs beim Verlassen einer Funktion. (Dieses Verhalten wurde in Revision 31 hinzugefügt, aber ist seit v1.1.30.00 fehlerhaft.)

Behoben: Das Verlassen einer Funktion, die als neuer Thread aufgerufen wurde, hält nun an der unterbrochenen Zeile, anstatt zu warten, bis die nächste Zeile erreicht ist.

Behoben: Der Debugger löscht keine temporären Haltepunkte mehr, die bei der Auswertung von DBGp property_get oder context_get ignoriert werden.

2.0.16 - 30. Mai 2024

Behoben: Keine Ladezeitfehler mehr, die an stdout gesendet wurden und in einigen Fällen eine falsche Datei oder Zeilennummer anzeigten.

Behoben: ExitApp verwendet nun bei Fehler-/Warndialogfenstern während der Ladezeit den Exitcode 2.

Behoben: WindowSpy.ahk wird nun bei Installationen unter dem aktuellen Benutzer (Nicht-Admin) gefunden.

Behoben (erneut): property_get bezifferte Elemente falsch.

Behoben: StrPut schlägt nicht mehr fehl, wenn Länge/Buffer angegeben ist und MultiByteToWideChar das Flag WC_NO_BEST_FIT_CHARS für die gewünschte Codepage nicht unterstützt.

Behoben: Download versucht nun eine anonyme Authentifizierung, wenn der Server eine Client-Authentifizierung verlangt.

2.0.15 - 16. Mai 2024

Behoben: DBGp property_get konnte aufgrund falscher Bezifferung keine Eigenschaften abrufen (seit v2.0.14).

Behoben: DBGp-Eigenschaftsauswertung ließ Try ohne Catch fehlschlagen (seit v2.0.14).

Behoben: Die <base>-Pseudoeigenschaft des Debuggers ließ eine Referenz durchsickern (seit v2.0.14).

2.0.14 - 6. Mai 2024

Behoben: Das Fehlerdialogfenster reagiert nun auch auf Tastaturkurzbefehle, wenn der Text fokussiert ist.

Behoben: Die Breitenwerte von MonthCal W-n (Anzahl der Monate) werden nicht mehr von der DPI-Skalierung beeinflusst.

Behoben: Click gibt keinen Integer mehr zurück.

Behoben: Taste::try { wird nicht mehr als Fehler erkannt.

Behoben: :B0*O:XY::Z erzeugt nun XYZ statt XZ (also statt Y zu unterdrücken).

Behoben: Send lässt ein vorheriges {Modifikator Down} wirksam, auch wenn die Taste physisch gedrückt gehalten wird.

Verbessert: Das Skript nimmt nun zuverlässiger den Fokus, wenn ein Kontextmenü angezeigt wird.

Debugger-Verbesserungen:

Behoben: stdout/stderr-Pakete, die während der Verarbeitung eines anderen Befehls gesendet werden, korrumpieren nicht mehr die bevorstehende Antwort.

Behoben: property_get -n <exception>.message und ähnliches.

Behoben: Es werden keine korrumpierten Ergebnisse von property_get mehr erzeugt, wenn eine Eigenschaft ein temporäres Objekt mit einer Zeichenkette zurückgibt, wie z.B. x.y.z, wobei y => {z:"a"}.

Behoben: Es kommt nicht mehr zu Abstürzen, wenn ein asynchroner Befehl während der Verarbeitung eines anderen Befehls empfangen wird.

Behoben: Ausnahmen wurden nicht gelöscht, nachdem sie via property_set unterdrückt wurden.

Behoben: property_get -c 0 -d 0 erlaubt nun globale Variablen, wie sie bereits von -d 1 erlaubt werden.

Behoben: property_get bezifferte enumerierte Elemente falsch.

Verbessert: property_get unterstützt nun auch Eigenschafts-Getter mit einem Parameter (bisher wurde dies nur von der impliziten __Item-Eigenschaft unterstützt).

Verbessert: property_get unterstützt nun auch Eigenschaften von primitiven Werten. Der Wert muss nach wie vor in einer Variable enthalten sein oder von einer Eigenschaft zurückgegeben werden.

Verbessert: property_get erlaubt nun den Aufruf von Funktionen mit <=1 Parametern.

Verbessert: property_get unterstützt nun Float-Schlüssel/Parameter.

Geändert: Der Debugger unterdrückt nun Ausnahmen bei der Auswertung von Eigenschaften.

Geändert: Der Debugger ignoriert nun Fehler, die durch __Enum ausgelöst werden (als keine Elemente behandeln).

Geändert: Die Pseudo-Eigenschaft <enum> erfordert nun __Enum. Dadurch wird verhindert, dass das Objekt selbst als Enumerator aufgerufen wird.

Kleine Optimierungen der Codegröße im Debugger.

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):