Nachfolgend die Änderungen und neue Features, die mit dem Entwicklungszweig v1.1 von AutoHotkey (ehemals AutoHotkey_L) eingeführt wurden.
Ältere Änderungen finden Sie unter Archivierte Änderungen.
Behoben: LWin::Alt
konnte nicht zum Aktivieren einiger Alt-Kombinationen verwendet 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 v1.1.37.00)
Behoben: Hook-Hotkeys erkannten keine Modifikatoren, die mit SendInput nach unten gedrückt wurden.
Behoben: Einige Probleme mit unterdrückten Alt/Strg/Umschalt/Win-Hotkeys, wie zum Beispiel:
*LCtrl::
blockierte LCtrl vom aktiven Fenster, aber das Senden von Alt-Tastenkombinationen würde fehlschlagen, weil das System denkt, dass Ctrl unten ist, und daher WM_KEYDOWN statt WM_SYSKEYDOWN senden würde.*LAlt::
hat das System dazu veranlasst, alle vorherigen {LAlt DownR}
zu vergessen, sodass sich eine Neubelegung wie z.B. LCtrl::LAlt
nicht korrekt verhält, wenn LAlt physisch unten ist, auch wenn LAlt unterdrückt wurde.Behoben: A_Clipboard ignorierte die Zuweisung rein numerischer Werte.
Behoben: SendInput konnte LCtrl nicht loslassen, nachdem RAlt losgelassen wurde (wenn es nicht AltGr ist).
Behoben: Neue Threads konnten eine Meldungsüberprüfung mit Critical nicht verhindern.
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 #If.
Behoben: MouseGetPos, ControlClick, ContextMenu-Gui-Ereignisse und DropFile-Gui-Ereignisse erkannten fälschlicherweise ein Steuerelement an einem bestimmten Punkt, der sich in Wirklichkeit ein Pixel unterhalb oder rechts vom Steuerelement befand.
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.
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 Zwei-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.
Hinzugefügt: Unterstützung für ByRef VARIANT in eingehenden COM-Aufrufen. Anstatt einen ComObject-Wrapper mit dem Variantentyp VT_BYREF|VT_VARIANT zu empfangen, empfängt das Skript eine temporäre Variable, die mit einem normalen ByRef-Parameter kompatibel ist.
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: Menu Add überschrieb Menüpunkte, die mit Menu Insert angefügt wurden.
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 #If 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 #If deaktiviert ist.
Optimiert: Speicherreservierung von zwischengespeicherten COM-Eigenschaftsnamen für internes IDispatch.
Code überarbeitet: Unterstützung einer Build-Konfiguration für AutoHotkey als DLL.
Verbessert: ComObjConnect() erkennt nun auch Trennungen via __Delete.
Behoben: Ein Performanzproblem im Zusammenhang mit Befehlsargumenten, die größer als 4*1024*1024 Zeichen sind.
Behoben: FileCreateDir im Zusammenhang mit Netzwerkfreigaben/UNC-Pfaden.
Behoben: Undefiniertes Verhalten von File.Length/Read() bei Konsolenpuffern.
Behoben: Undefiniertes Verhalten bei numerischen Vergleichen in Switch.
Hinzugefügt: VerCompare().
Hinzugefügt: Unterstützung für Haltepunkt-Ausnahmen via DBGp.
Erweitert: #Requires unterstützt nun Operatoren für Bereichsprüfungen (<
<=
>
>=
=
) und zusätzliche Schlüsselwörter: Unicode
, ANSI
, 32-bit
, 64-bit
.
Hinzugefügt: Die Versionsinformation in AutoHotkey.exe enthält nun CompanyName, was einen Fehler in Windows 10 beheben könnte, wo das Programm nicht in "Öffnen mit" erscheint.
Geändert: Switch/Case führt nun nicht-numerische Vergleiche durch, wenn der Switch- oder Case-Ausdruck eine einzelne, direkt geschriebene Zeichenkette ist, wie z.B. "00"
. Außerdem wurde das Vergleichsverhalten dokumentiert, das zuvor undokumentiert war.
Behoben: Inkonsistenzen mit Integer-Eigenschaftsnamen via IDispatch.
Behoben: Mögliche Abstürze beim Inspizieren eines ComObjects via DBGp nach Nutzung von ComObjConnect().
Behoben: FileAppend behandelt eine leere Kodierung nun als weggelassen.
Behoben: Versionsvergleiche ignorieren nun numerische Build-Informationen, z.B. 1.1.35.00+1+abcdef (1 ist die Anzahl der Commits seit 1.1.35.00).
Behoben: FileCreateDir X\Y\
(mit einem Schrägstrich am Ende) konnte X nicht erstellen [fehlerhaft seit v1.1.35.00].
Geändert: GroupActivate und GroupClose verhalten sich nun intuitiver:
Beiträge von jeeswg (PRs #186, #235, #240, #249, #273, #274):
Behoben: Rechtschreibfehler in der "#Warn Unreachable"-Meldung.
Behoben: FileCreateDirs Behandlung von Pfaden, die ".." oder "/" enthalten.
Behoben: Einige Probleme mit dem Parameter RootVerz\DateiName von FileSelectFile:
Behoben: FileSetTime setzt nun A_LastError, wenn es keine Dateien findet.
Behoben: EnvAdd/+= verlor beim Addieren von 115.292.150.461+ Sekunden an Genauigkeit.
Behoben: Der Tastatur-Hook fügte eine unterdrückte tote Taste wieder ein, wenn die Eingabetaste gedrückt wird, z.B. in der Sequenz `o{Enter}
, wenn Folgendes zutrifft:
:?*:ò::
unterdrückt.Behoben: Die Selected-Option von ControlGet List wiederholte unter x64 die Ausgabe, wenn das Ziel 32-Bit ist.
Behoben: Stack-Corruption bei den Count-Optionen von ControlGet List.
Behoben: Rückruffunktionen wurden nicht in den Aufrufstapel des Debuggers aufgenommen.
Behoben: MsgBox-Zeitlimit wurde als "OK" gemeldet, wenn es innerhalb von 100 ms nach dem Start angezeigt wurde.
Behoben: Edit-Steuerelement ignoriert nun +WantTab
, während +ReadOnly
aktiv ist.
Behoben: property_get gab eine lokale Variable zurück, obwohl -d
dies verhindern sollte.
Behoben: RegRead unterstützt nun REG_MULTI_SZ-Werte, die leere Einträge enthalten.
Behoben: x[,y]:=z
führte zu undefiniertem Verhalten.
Behoben: Doppeltes Backspacing bei Unicode-Ergänzungszeichen in Hotstrings.
Behoben: a::
wurde nicht ausgelöst, wenn a up::
und a & b::
vorhanden sind.
Behoben: MinSize/MaxSize wurde vor dem ersten Aufruf von Gui Show nicht korrekt angewendet.
Behoben: Der Hook-Thread bleibt nicht mehr in einer Endlosschleife stecken, wenn ein gestopptes InputHook zu früh neu gestartet wird.
Behoben: Es kommt nicht mehr zu Abstürzen oder undefiniertem Verhalten, wenn ein leerer Parameter an FileCopy, FileMove, FileCopyDir, FileMoveDir oder FileRemoveDir übergeben wird.
Behoben: Tote Tasten wurden fälschlicherweise nach der Unterdrückung des letzten Zeichens eines Hotstrings (z.B. bei :?*:ò::ó
) vom Tastatur-Hook neu belegt.
Behoben: Bugs, welche via v1.1.34.00 entstanden sind:
Alt::
, Ctrl::
und Shift::
verhalten sich nicht mehr wie normale Tasten, sondern werden erst beim Loslassen ausgelöst (wie dokumentiert).~a & b::
(wenn mit #If deaktiviert) führt nicht mehr dazu, dass a::
beim Loslassen ausgelöst wird, auch dann nicht, wenn eine andere Kombo aktiviert wird.Behoben: Bugs, welche via v1.1.34.00 entstanden sind:
a up::
wurde beim Drücken und nicht beim Loslassen ausgelöst, wenn es der erste Hotkey ist und ~a & b::
existiert.a::
unterdrückte die Taste nicht, wenn ~a & b::
ebenfalls vorhanden ist, es sei denn, a::
ist der erste Hotkey.CapsLock::
funktionierte nicht, wenn CapsLock & x::
ebenfalls vorhanden ist, was auch für NumLock und ScrollLock gilt.Hinzugefügt: AutoHotkey.exe kann jetzt als Basis für kompilierte Skripte verwendet werden - dadurch können kompilierte Skripte externe Dateien ausführen, wenn ihnen die Befehlszeilenoption /script
übergeben wird.
Hinzufügt: Am Anfang eines Skripts kann jetzt implizit Code inkludiert werden - entweder durch Einbetten einer Ressource in AutoHotkey.exe oder durch Nutzung der Befehlszeilenoption /include.
Geändert: Menu NoMainWindow/MainWindow kann nun auch in unkompilierten Skripten verwendet werden.
Geändert: ~x & y::
hat keinen Einfluss mehr auf die Unterdrückung von x, wenn es via #If deaktiviert ist.
Verbessert: Bei FileCopyDir kann das Quellverzeichnis jetzt auch eine ZIP-Datei sein, sofern dies vom Betriebssystem unterstützt wird; in diesem Fall wird der Inhalt extrahiert.
Behoben: Ausführung mehrerer Run-Once-Timer im selben Tick [fehlerhaft seit v1.1.33.11].
Behoben: Bugs beim Positionieren oder Ändern der Größe von Tooltips.
A_ScreenDPI/96
-mal größer, als sie eigentlich sein sollte; dies wird nun berücksichtigt.Optimiert: ToolTip wurde für Situationen optimiert, wo sich der Text nicht ändert, um Flackern zu reduzieren und die Geschwindigkeit zu erhöhen.
Behoben: Taste-Oben-Hotkeys wurden nicht ausgeführt, wenn sie nach (aber nicht vor) dem Drücken der Taste eingeschaltet werden und wenn diese Taste zudem als benutzerdefinierte Präfixtaste mit dem Tilde-Präfix verwendet wird (z.B. interferierte die Aktivierung von ~a & b::
mit a up::
).
Behoben: Benutzerdefinierte Kombinations-Hotkeys, bei denen die Präfixtaste einen Hook-Reset auslöst, wie z.B. ~RButton & WheelUp::
, wenn RButton::
den einzigen Tastatur-Hook-Hotkey des Skripts aktiviert oder deaktiviert.
Behoben: Format(n)
gibt keinen leeren Wert mehr zurück, wenn n
ein rein numerischer Ausdruck ist.
Behoben: Der Debugger konnte obj.<base>.<base>
nicht abfragen.
Geändert: Debugger-Schritte/Haltepunkte überspringen nun Try/Catch/Finally/Case.
Behoben: Switch {
löste fälschlicherweise einen Ladezeitfehler aus.
Behoben: Debugger stack_get meldete "falsche Zeile" nach OnError.
Behoben: Debugger stack_get meldete "falsche Zeile" beim Auto-Execute-Thread.
Behoben: Auto-Env-Abruf und A_ComVar erlauben nun auch Variablen, die größer als das offizielle Limit sind [PR #259 von mikeblas].
Behoben: A_EventInfo in Verbindung mit Mausrad-Hotkeys [fehlerhaft seit v1.1.33.05].
Behoben: ControlClick wandelt die Koordinaten für Mausradmeldungen nun korrekt um.
Behoben: Die IDispatch-Implementierung für AutoHotkey-Objekte behält nun die Groß-/Kleinschreibung für Eigenschaftsnamen bei.
Behoben: #Warn StdOut verwendet nun standardmäßig Codepage 0, wenn /ErrorStdOut nicht verwendet wird.
Behoben: Es kommt nicht mehr zu Abstürzen, wenn die __delete()-Metafunktion eines Timers den nächsten Timer löscht.
Behoben: Laden von JPG/GIF-Dateien, die bereits zum Lesen geöffnet sind.
Behoben: if-var-is hatte digits/xdigits falsch identifiziert.
Hinzugefügt: Sicherheitsüberprüfung für "ControlGet Selected", falls es mit einem Nicht-Edit-Steuerelement verwendet wird.
Behoben: Variablen wurden in bestimmten seltenen Fällen auf NULL gesetzt, was zu Abstürzen führte. Dies trat auf (der einzige bestätigte Fall), wenn eine Zeichenkette länger als 63 Zeichen von einer Funktion zurückgegeben und einer Variable zugewiesen wurde, während AutoHotkey als Windows-Store-App ausgeführt wurde.
Behoben: InputHook-Rückruffunktionen schlugen fehl, nachdem die Eingabeerfassung gestoppt und neu gestartet wurde.
Behoben: Absturz beim Laden, wenn eine AltTab-Aktion in einem Taste-Oben/Unten-Paar verwendet wird.
Behoben: Undefinierter Fehlertext, wenn die Hauptskriptdatei nicht geöffnet werden kann.
Entfernt: "Error at line 0" aus Fehlermeldungen entfernt, was vor dem Lesen der ersten Zeile erschienen ist.
Behoben: Der Fokus wurde beim Wiederherstellen einer minimierten GUI zurückgesetzt.
Behoben: Der Fokus wurde nicht gespeichert, wenn eine GUI mit Gui Show minimiert wurde.
Behoben: SendLevel-Ereignisse ungleich 0 wurden fälschlicherweise in Fällen unterdrückt, die nicht vom v1.1.33.07-Fix abgedeckt wurden:
Behoben: Das Tray-Symbol wird nicht mehr einfrieren und unscharf werden, wenn sich die DPI des Bildschirms ändert.
Behoben: Hotkeys, die via #InputLevel deaktiviert sind, werden nicht mehr fälschlicherweise unterdrückt.
Behoben: Ein durch v1.1.33.05 entstandener Bug hat dazu geführt, dass bestimmte Hotkeys ignoriert wurden. Dazu gehören Joystick-Hotkeys und alle Hotkeys, auf die #MaxThreadsBuffer oder die B-Option angewendet wird.
Behoben: Bugs bei Hotkey-Varianten mit unterschiedlichen #InputLevels.
Behoben: Ctrl/Shift/Alt (ohne L/R) als Hook-Hotkeys.
Entfernt: Abhängigkeit von der POPCNT-Instruktion entfernt, da diese von älteren CPUs (z.B. Core 2) nicht unterstützt wird.
Behoben: Das Programm stürzte ab, wenn ein leeres SafeArray enumeriert wurde.
Behoben: Die Höhe hat sich bei einem Button/CheckBox/Radio-Steuerelement mit -Wrap nicht automatisch erweitert.
Behoben: WM_DESTROY umging das Freigeben von Objekten in globalen/statischen Variablen.
Behoben: Der zweite Versuch von WinMenuSelectItem, eine Übereinstimmung zu finden, wird nun korrekt mit dem &-Zeichen umgehen. Insbesondere werden Menüpunkte mit tatsächlichem Text wie "a && b", die als "a & b" erscheinen, nun mit "a & b" statt mit "a b" übereinstimmen.
Behoben: Ein Haltepunkt auf einer Case/Default-Zeile führte dazu, dass am Ende des vorherigen Case angehalten wurde.
Behoben: SoundBeep ignoriert nun die Dauer, wenn sie negativ ist, anstatt wegen Überlauf auf einen großen positiven Wert zu wechseln.
Behoben: Maus-Hotkeys mit "!" maskieren nun Alt-Oben nach Tastenwiederholung, wenn möglich.
Behoben: Mehrere Probleme mit überlappenden Hotkeys.
<^a up
, das mit STRG-RECHTS+A ausgelöst werden konnte, weil es noch ^a
gibt; oder *^c up
, das mit UMSCHALT+C ausgelöst werden konnte, weil es noch *+c
gibt, außerdem konnten beide mit STRG+UMSCHALT+C ausgelöst werden.Behoben: InputHook.EndKey wird nun jedes vk gegenüber sc000 bevorzugen.
Behoben: InputHook.KeyOpt("{sc000}", Flags)
.
Behoben: #Warn Unreachable kennzeichnete Case/Default als unerreichbar.
Behoben: Modifikator-Taste-Oben-Hotkeys wie LShift up::
unterdrücken das Taste-Oben nicht länger, es sei denn, ein entsprechender Taste-Unten-Hotkey ist definiert.
Behoben: Ein Symbol, das aus einer DLL/EXE geladen wurde, verwendet nicht länger die am ehesten passende Größe, wenn sie die erste in der Symbolgruppe ist [fehlerhaft seit v1.1.33.00].
Behoben: a up::
hatte fälschlicherweise Vorrang vor b & a up::
, wenn a::
definiert ist, aber nicht b & a::
.
Behoben: b & a up::
wird a
nicht länger unterdrücken, wenn a::
definiert, aber via #If deaktiviert ist und b & a::
nicht definiert ist.
Hinzugefügt: Kodierung-Parameter für #ErrorStdOut.
Hinzugefügt: Befehlszeilenparameter /ErrorStdOut=Kodierung.
Hinzugefügt: #Warn Unreachable (Warnmodus).
Hinzugefügt: #Requires AutoHotkey vVersion (Direktive).
Hinzugefügt: Erkennung von programmterminierenden SEH-Ausnahmen - es wird ein Fehlerdialogfenster angezeigt.
Implementiert: Zahlreiche Verbesserungen für Ahk2Exe, die von fincs, TAC109, Joe DF und Ben Allred entwickelt wurden.
Behoben: Send verursachte unerwünschte Hotkey-Pufferung.
Behoben: Ein Bug konnte dazu führen, dass Input sich undefiniert verhielt. [PR #159 von Helgef]
Behoben: WinKill kann nun mehr als WinClose.
Behoben: A_WinDir gibt nun immer das Windows-Verzeichnis des Systems zurück.
Behoben: FileGetShortcut/FileCreateShortcut erhöhen/verringern nicht länger negative Symbolindexnummern (Ressourcen-IDs).
Behoben: Die Locale-Option von InputBox bewirkt nicht länger, dass die Abbrechen-Schaltfläche fokussiert wird.
Behoben: Die Tastaturkurzbefehle einer Menüleiste funktionierten nicht, wenn die GUI keine Steuerelemente hatte.
Behoben: LoadPicture verwendet nun 256x256-Grafiken, wenn diese in einer DLL/EXE vorhanden sind.
Behoben: Der DBGp-stderr-Kopiermodus unterdrückt keine Fehlerdialogfenster mehr.
Behoben: ControlGet Line setzt ErrorLevel nun auf 1, wenn die Zeile gerade leer ist.
Geändert: Befehle und Funktionen mit einem FensterTitel-Parameter behandeln getarnte Fenster nun als versteckt.
Hinzugefügt: Die Suchrichtung von PixelSearch kann im Fast-Modus nun umgekehrt werden. [PR #156 von changyuheng]
Hinzugefügt: OnKeyUp-Rückruf für InputHook.
Behoben: GroupDeactivate wird in Windows 10 (und vermutlich auch in Windows 8) den Desktop ab sofort ignorieren.
Behoben: Switch hatte Zeichenketten immer als wahr gewertet.
Behoben: A_PriorKey war leer, nachdem Unicode-Zeichen gesendet wurden.
Behoben: WinActivate geht nicht mehr davon aus, dass NULL-Vordergrundfenster == Taskleiste.
Behoben: Send {Del}
hat AltGr nach dem Loslassen nicht mehr wiederhergestellt.
Behoben: vk13 und sc045 als Neubelegungszieltasten.
Geändert: Unnötige Überprüfungen für Control und Sleep in einzeiligen Hotkeys entfernt.
Geändert: Veralteter Windows 9x/NT4-Support-Code entfernt und andere Wartungsarbeiten durchgeführt.
Behoben: Switch %v%
, Case %v%
und Throw %v%
.
Behoben: Case 2,,:
zeigt nun eine Fehlermeldung an, statt das Skript zum Absturz zu bringen.
Behoben: AltTab-Hotkeys [fehlerhaft seit v1.1.31.00].
Behoben: Die X-Option von Hotstring erlaubt nun Leerraumzeichen nach ::
.
Behoben: Einzeilige Hotkeys verbieten nun mehrzeilige Anweisungen wie IF.
Hinzugefügt: Switch.
Hinzugefügt: InputHook.
Hinzugefügt: Locale
-Option für InputBox, um die Namen der Schaltflächen in der Sprache des aktuellen Benutzers darzustellen. [PR #143 von Ragnar-F]
Geändert: Unterstützung für lange Pfade verbessert.
Allgemeine Hotkey-Verbesserungen:
<^a
und ^a
mit #If
. Wenn alle Varianten eines Hotkeys via #If deaktiviert sind, kann ein allgemeinerer Hotkey ausgelöst werden. Mit anderen Worten verhält sich die Deaktivierung von Hotkeys via #If nun eher wie, als würde man diese ausschalten oder aus dem Skript entfernen.AltGr-Fehlerbehebungen:
Send xy
, wenn x AltGr benötigt, ausgelöst.Send x
, wenn x AltGr benötigt, gesendet.Umschalt-Ziffernblock-Fehlerbehebungen:
Numpad1::Send +1
.Behoben: Die Slider-Option +TickInterval
funktioniert nun auch, wenn Range
nicht gesetzt ist.
Behoben: Die Slider-Option +TickInterval0
setzt das Intervall nun auf 0 zum Deaktivieren der Teilstriche.
Behoben: Menü- und GUI-Ereignisse haben in einigen Fällen Schleifen verursacht, die die CPU voll ausgelastet haben. Insbesondere wenn eine modale Meldungsschleife läuft und das Skript unterbrechungsfrei ist, wurden Menü- und GUI-Ereignismeldungen wiederholt neu gesendet. Diese werden nun verworfen, da sie nicht behandelt oder in der Warteschlange gehalten werden können. Dies ist konsistent mit Hotkeys, etc.
Behoben: Kritische DllCall-Fehler werden nun immer beendet und das OnExit-Ergebnis ignoriert.
Behoben: ExitApp 2
hat Objektfreigaben in globalen/statischen Variablen umgangen.
Geändert: ComObjCreate() verwendet nun CLSIDFromProgID für GUID-fremde Zeichenketten. Dies behebt ComObjCreate("Microsoft.Windows.ActCtx")
und möglicherweise auch andere, die nicht in der Registry zu finden sind, aber mit VBScript und JScript funktionieren.
Behoben: Debugger context_get kann kein #Warn UseUnset mehr auslösen.
Behoben: Direkte Modifikator-Hotkeys wie Shift:: funktionieren wieder (fehlerhaft seit v1.1.30.02).
Behoben: Menu Rename erlaubt nun Duplikate und nicht-operative bzw. Groß-/Kleinschreibung-bezogene Umbenennungen.
Behoben: X-Option von Hotstring(). [PR #132 von Helgef]
Behoben: __init/__delete verursachte irreführende Fehlerzeile/Stacktrace.
Behoben: #If-Ausdrücke blieben im Sleep-Modus stecken und Ähnliches.
Behoben: Benutzerdefinierte Tastenkombos wurden falsch ausgelöst, nachdem eine benutzerdefinierte Tastenkombo sich selbst suspendiert hatte.
Geändert: TV_Add/TV_Modify erlauben nun Angaben wie "Bold1" und "Bold0".
Behoben: Hotkey-Paare mit einem #InputLevel ungleich 0 blockierten gesendete Ereignisse.
Behoben: Control Choose
sendet nun auch WM_COMMAND, wenn die ID des Steuerelements 0 ist.
Behoben: Heap Corruption in Skripten mit Tastatur-Hook aber ohne Hotkeys.
Behoben: Escapesequenzen in einzeiligen Hotstrings mit der X-Option.
Behoben: ``
-Escapesequenz, die vor einer ;
-Kommentarmarkierung steht.
Behoben: finally
korrumpierte den Wert eines ausstehenden return
.
Behoben: MsgBox erkennt Timeouts auch dann, wenn der Thread unterbrochen ist.
Behoben: Ahk2Exe unterstützt nun mehr interne Variablen in #Include.
Behoben: SendInput/SendPlay stellt DownR/neubelegte Modifikatoren wieder her.
Geändert: Die Anzahl der Hotkeys pro Skript wurde von 1000 auf 32762 erhöht.
Geändert: Befehle, die On/Off/Toggle akzeptieren, akzeptieren auch 1/0/-1 (wo dokumentiert).
Verbesserungen bei der Debugger-Unterstützung (DBGp):
Behoben: WinMove brachte in einigen Fällen das Skript zum Absturz [fehlerhaft seit v1.1.29.00].
Behoben: Gui x:Default
funktionierte nicht, wenn keine Gui erstellt wurde [fehlerhaft seit v1.1.29.00].
Hinzugefügt: Objekt.Count()
und ObjCount(Objekt)
.
Hinzugefügt: ObjGetBase(Objekt)
und ObjSetBase(Objekt, Basis)
.
Hinzugefügt: ObjRawGet(Objekt, Schlüssel)
.
Hinzugefügt: OnError(Funktion [, HinzufügenEntfernen])
.
Ausnahmebehandlung überarbeitet:
Entfernt: Die maximale Anzahl benutzerdefinierter Modifikatoren für jede Taste.
Geändert: Send {Text}
wird nicht mehr die Feststelltaste umschalten oder auf Win+L warten.
Behoben: #Warn ClassOverwrite gibt keine Warnung mehr für A_Args aus.
Verbessert: Der DBGp-Befehl source
wandelt nun korrekt zwischen der Codepage der Datei und UTF-8 um, und reduziert die Codegröße.
Weitere Optimierungen der Codegröße und triviale Codeanpassungen.
Behoben: Control ChooseString
und ControlGet FindString
ignorierten die ersten zwei Listeneinträge.
Behoben: Control ChooseString
sendet nun auch WM_COMMAND, wenn die ID des Steuerelements 0 ist.
Behoben: WinActivate stellt nun das aktive Fenster wieder her, wie ursprünglich für [v1.1.20.00] vorgesehen.
Behoben: Thread behandelte weggelassene Parameter als 0.
Behoben: Text via FileAppend zur Standardfehlerausgabe (stderr; **) senden.
Behoben: break Label
konnte zu einer fremden Schleife springen.
Das Hotstring-Reset-Verhalten wurde auf den Zustand vor v1.1.28.00 zurückgesetzt.
Hinzugefügt: Hotstring("Reset")
zum manuellen Zurücksetzen des Hotstring-Erkenners.
Änderungen:
0&
nun als Systemmenü des Fensters.Neue Features:
Fehlerbehebungen:
x up::y
-Neubelegungsfehler.Menu Tray, Icon, HICON:%hicon%
nutzt nun das hicon, ohne es größer/kleiner zu machen.Behoben: Die Standardgröße von Gui mit +Parent ist nicht mehr durch das übergeordnete Fenster eingeschränkt [fehlerhaft seit v1.1.27.05].
Behoben: Steuerelemente wurden nicht neu gezeichnet, wenn ein separates Tab-Steuerelement sichtbar/unsichtbar gemacht wurde, nachdem das Tab-Steuerelement für ungültig erklärt worden ist (z.B. wenn man mehrere Steuerelemente gleichzeitig sichtbar/unsichtbar macht).
Behoben: Hotstrings/Input bewirkten, dass tote Tasten hängen blieben (fehlerhaft seit v1.1.27.05).
Behoben: Sichtbare Input-Endungstasten bewirkten, dass eine bevorstehende tote Taste zweimal losgelassen wurde.
Behoben: Auswirkung von Hotstrings/Input auf das Verhalten von Tab/Esc in einer toten Tastenfolge.
Behoben: A_IconFile gab einen falschen Pfad zurück, wenn eine DLL verwendet wurde.
Behoben: Gui mit +Parent wird nun relativ zur übergeordneten GUI statt zum Bildschirm zentriert.
Behoben: Input/Hotstring-Erkennung von toten Tastenfolgen in UWP-Anwendungen (Universal Windows Platform).
Behoben: < & v
und > & v
wurden als Duplikate angesehen, und andere ähnliche Fälle. Dies betrifft benutzerdefinierte Kombinationen, wo die Präfixtaste auch ein Modifikatorsymbol ist. Zudem werden Hotkeys, die nur aus Modifikatorsymbolen und einem Leerzeichen am Ende bestehen, wie z.B. + ::
, ab sofort als Fehler behandelt, anstatt das Leerzeichen zu ignorieren (Hotkeys erlauben kein Leerzeichen am Ende).
Behoben: #Warn ClassOverwrite gab fehlerhafte Warnungen aus.
Verbessert: Menu x, NoStandard
und Menu x, DeleteAll
funktionieren nun, ohne dass versucht wird, das darunter liegende Win32-Menü zu zerstören. Dies macht es möglich, dass sie auch dann funktionieren, wenn x eine Menüleiste oder ein Untermenü einer Menüleiste ist.
Die Verarbeitung von vkXXscYYY
wurde überarbeitet:
Behoben: Numerische Schlüssel außerhalb des 32-Bit-Bereichs (aber innerhalb des 64-Bit-Bereichs) in einigen seltenen Fällen in 64-Bit-Builds werden nun korrekt behandelt. Dies betrifft nur Klassen, die solche Nummern als Namen verwenden (aus mehreren Gründen nicht empfohlen), und einen Array-Zugriff via IDispatch mit solchen Nummern als Schlüssel-/Elementnamen.
Behoben: Das Laden von .bmp-Dateien als Symbole in Originalgröße.
Behoben: Verbundzuweisungen wie Test.Eigenschaft[1] += 1
(fehlerhaft seit v1.1.27.01).
Behoben: ++X
oder --X
brachte ein Skript ohne #NoEnv zum Absturz (fehlerhaft seit v1.1.27.00).
Behoben: #Warn ClassOverwrite gab fälschlicherweise eine Warnung für ++MeineKlasse.X
aus.
Behoben: Neubelegung erlaubt nun benutzerdefinierte Tastenkombinationen wie a & b::c
.
Behoben: Send/Hotstrings/Input passen sich nun auch an die Tastaturbelegung des fokussierten Steuerelements an, nicht nur an die des aktiven Fensters. Dies betrifft insbesondere UWP-Anwendungen wie Microsoft Edge.
Behoben: Hook-Hotkeys unterdrücken nun die Aktivierung des Startmenüs, die auftritt, wenn ein isoliertes "Ctrl/Shift Up" erfolgt. "Ctrl Up" kann vom System erzeugt werden, wenn von einer Tastaturbelegung mit AltGr zu einer ohne AltGr gewechselt wird (z.B. von UK zu US) und Ctrl währenddessen nicht gedrückt gehalten wird. Dies behebt Hotkeys wie z.B. $#z::WinActivate x
, wenn die entsprechende Änderung solche Bedingungen verursacht.
Behoben: Input sammelte keine Zeichen, wenn beide UMSCHALT-Tasten unten sind.
Behoben: Input nutzt nun "sc" und "vk" statt "Sc" und "Vk" für Endungstasten in ErrorLevel (verursacht durch v1.1.20).
Behoben: GetKeyName/VK/SC("vkXXscYYY")
, wobei YYY mit A-F beginnt (fehlerhaft seit v1.1.26).
Änderungen:
AU3_Spy.exe wurde durch WindowSpy.ahk ersetzt.
Geändert: a-z bedeutet nun vk41-vk5A, wenn sie in der Tastaturbelegung fehlen, außer im Raw-Modus oder beim Senden einzelner unveränderter Zeichen. Dadurch können Hotkeys und gesendete Tastaturkurzbefehle intuitiver mit bestimmten nicht-englischen Tastaturbelegungen umgehen.
Geändert: Send verwendet nun in den ANSI-Versionen SendInput() statt Alt+nnnnn, um Sonderzeichen zu senden.
Geändert: Es gelten nun andere Regeln zum Maskieren von ALT/WIN nach dem Drücken eines Hook-Hotkeys:
AppsKey::RWin
, allerdings ist es möglich, dass Hotkeys, die zum Aktivieren des Startmenüs gedacht sind, neue Workarounds erfordern.#a::
, nicht *a::
), eine Maskierung. Auf diese Weise kann eine Neubelegung oder ein Platzhalter-Hotkey das Taste-Oben-Ereignis senden, ohne dass es maskiert werden muss.~#a::
verursachen keine Maskierung mehr, da das nicht unterdrückte Taste-Unten/Oben-Ereignis ausreicht, um ein Menü zu verhindern. Maus-Hotkeys wie ~*MButton::
unterdrücken das Startmenü nicht mehr, wenn sie mit der WIN-Taste kombiniert werden. Es kann manuell mit Send {Blind}{vk07}
oder ähnlichem unterdrückt werden.Die Hotkeys ~LWin::
und ~RWin::
unterdrücken nicht mehr das Startmenü. Weitere Informationen und ein Workaround finden Sie unter #MenuMaskKey.
Hinzugefügt: VK- oder SC-Tastennamen werden nun korrekt validiert, damit Namen wie "sc01ungültig" nicht mehr als Tasten erkannt werden.
Skripte, die Hotkeys im Format VKnnSCnnn::
enthalten, müssen korrigiert werden, indem man SCnnn
entfernt, das zuvor ignoriert wurde.
Hilfedatei: Die Seitenleiste des HTML Help Viewer wurde durch die neue HTML5-Seitenleiste ersetzt, die von Ragnar-F entwickelt wurde.
Neue Features:
AppsKey::RWin
und ähnlichem zu beheben.Fehlerbehebungen:
ControlSend {u n}
, wobei u Unicode ist, sendet nun n-mal, nicht nur einmal.RAlt::
, das das System unter Windows 10 erneut dazu veranlasste, die linke STRG-Taste "loszulassen", wie es vor v1.1.26.01 der Fall war (aber im Gegensatz zu den alten Versionen verhindert es, dass das Taste-Oben-Ereignis der rechten ALT-Taste das aktive Fenster erreicht). Diese Änderung sollte keine Auswirkungen auf Tastaturbelegungen ohne ALTGR haben.Menu Tray, Icon
, SB_SetIcon und LoadPicture mit einer Symbol-Option ungleich 0 erlauben nun Bitmaps (aber wandeln diese um, falls nötig).sc
oder vk
beginnen.>
/<
erlauben nicht mehr, dass beide Tasten gedrückt werden können. Zum Beispiel konnte <^A
fälschlicherweise durch LCtrl+RCtrl+A ausgelöst werden, wodurch der Hotkey <>^A
nicht funktionierte.{Raw}
enthält und die Optionen O, R und * nicht verwendet wurden).Send !^+#{Taste}
oder beim Senden von Unicode-Zeichen vorgenommen wurden. Dies stellt das Verhalten von Send wieder her, wie es vor v1.1.06 mit SendLevel 0 war, behält aber das v1.1.06+ Verhalten mit SendLevel >= 1 bei, so dass Send die richtigen Hotkeys auslösen kann.^m::Send x
den Modifikatorstatus wiederherstellt, wenn Send zum ersten Mal aufgerufen wird. Dadurch ist es unwahrscheinlicher, dass beim ersten Drücken ein anderes (und unerwartetes) Ergebnis erzeugt wird, wie z.B. xmmm statt xxxx.Behoben: RegDelete (ohne Parameter) schlug fehl, wenn A_LoopRegSubKey leer ist, z.B. beim Enumerieren von Schlüsseln direkt unter dem Root-Schlüssel.
Behoben: RAlt/LAlt::
konnte manchmal die Aktivierung des Menüs nicht verhindern, nachdem der Benutzer ein Fenster mit Alt-Tab verlassen und es danach wieder aktiviert hat.
Behoben: Die SC-zu-VK-Konvertierung für Multimediatasten, PrintScreen, Pause, LWin und RWin funktioniert nun korrekt, mit der Ausnahme, dass Multimediatasten, PrintScreen und CtrlBreak unter Windows 2000 und XP immer noch fehlerhaft konvertiert werden.
Behoben: Die VK-zu-SC-Konvertierung für Multimediatasten, CtrlBreak und Pause funktioniert nun korrekt.
Behoben: Wartende Befehle wie RunWait protokollieren nur noch Zeilen für ListLines, wenn gezeigt werden muss, dass sie noch immer warten; also wenn sie nach einer Unterbrechung fortgesetzt werden, die andere Zeilen protokolliert hat.
Geändert: ListVars zeigt Variablen, die Objekte enthalten, ab sofort in einem anderen Format an. Der Klassenname des Objekts wird nicht angezeigt.
Hinzugefügt: "Class" und "CLSID" Modi für ComObjType().
Geändert: Die vom Debugger angezeigten Klassennamen überarbeitet und deutlich die Codegröße im Prozess reduziert.
Geändert: FileSetAttrib, FileSetTime und FileDelete überarbeitet, um die Codegröße zu reduzieren. Deren Funktionsweise sollte sich nicht geändert haben.
Weitere kleinere Optimierungen an der Codegröße vorgenommen.
Behoben: GetKeySC() funktioniert nun korrekt mit den Tastennamen Esc, Escape, ScrollLock und PrintScreen.
Behoben: Die Hotstring-Worterkennung funktioniert nun korrekt mit Wörtern, die Nonspacing Marks enthalten, wie z.B. arabische diakritische Zeichen.
Behoben: GUI-Optionszeichenketten waren nach einer Fehlermeldung permanent gekürzt.
Behoben: Namen von Eigenschaften und Klassenuntervariablen können nun auch ASCII-fremde Zeichen enthalten.
Behoben: Der Operator new
wurde behoben, so dass __New als Ausnahme ausgelöst oder via Exit beendet werden kann.
Behoben: Send ermöglicht es nun anderen Skripten, auf Änderungen des Modifikatorstatus zu reagieren, die direkt danach ein Sonderzeichen haben, wie z.B. beim Loslassen von UMSCHALT in Send Mört
.
Hinzugefügt: Hotkey, If, % FunktionObjekt.
Behoben: Website-Adresse im Help-Menü.
Behoben: WinSet AlwaysOnTop/Trans/TransColor funktioniert nun bei Fenstern mit einem erweiterten Style von 0.
Behoben: File.ReadNum()
hat wiederholt alte Daten gelesen, wenn ein vorheriges File.Read()
am Ende des Pufferspeichers aufgehört hat zu lesen.
Geändert: Bessere Pufferspeichernutzung, wenn File.Read()
das Ende der gepufferten Daten erreicht hat.
Behoben: GuiControl +Password
verwendet in Windows XP und höher nun standardmäßig den schwarzen Punkt als Maskierungszeichen.
Behoben: GuiControl +/-Password
wird das Steuerelement nun sofort neu zeichnen.
Behoben: COM-Ausnahmefehlermeldungen enden nicht mehr mit `r
.
Behoben: {U+x}
unterstützt nun Ergänzungszeichen (x > 0xFFFF).
Behoben: Klasseneigenschaften ohne get{} geben nicht mehr das interne Property-Objekt zurück, sondern einen leeren Wert, wenn die Klasse eine Basis hat, die keinen Wert für die Eigenschaft definiert. Eigenschaften in basislosen Klassen verhielten sich bereits korrekt.
Behoben: Die Hintergrundfarbe von Steuerelementen innerhalb eines Tab3-Steuerelements war falsch, wenn die visuellen Styles im System deaktiviert sind (d.h. Windows Classic).
Behoben: Handhabung von Threadbeendigungen in Funktionen, die direkt von einem Ereignis aufgerufen werden (z.B. OnExit-Funktionen). Dieser Bug hatte außer im v2-alpha-Entwicklungszweig keine nennenswerten Auswirkungen.
Behoben: Der Debugger erkennt nun sofort eine Trennung (also wenn ein Client terminiert, ohne Stop/Detach aufzurufen).
Behoben: Der Debugger behandelt property_get -m 0
nun als "unlimitiert", gemäß der DBGp-Spezifikation.
Behoben: Der Debugger erwartet nun base64 bei property_set -t integer/float
, gemäß der DBGp-Spezifikation.
Hinzugefügt: Option Run with UI Access (mit UI-Access ausführen) für den Installer.
Hinzugefügt: Dokumentation für die automatische Größenanpassung von Tab3.
Folgende Tab3-Bugs wurden behoben:
AutoSize
-Option oder w
- und h
-Option verwendet wird.Behoben: OnMessage() wird lParam bei 32-Bit nun als vorzeichenlos übergeben.
Behoben: Gui Name :
erlaubt nun Leerzeichen vor dem Doppelpunkt.
Behoben: GUI-Fenster und -Steuerelemente konnten nicht über eine negative HWND-Nummer identifiziert werden.
Behoben: ComObject unterdrückt nun Fehler, die durch Trennung von Ereignissen ausgelöst werden, nachdem das Skript das Objekt freigegeben hat.
Behoben: Gui Show hatte das Fenster veranlasst, kleiner zu werden, wenn es eine mehrzeilige Menüleiste hat.
Behoben: LV_InsertCol(n, Breite)
konnte den ListView-Scrollbalken in einigen OS-Versionen nicht aktualisieren.
Geändert: Codegröße von FileRecycleEmpty optimiert.
Geändert: Hotkey, If, Ausdruck
löst nun einen Fehler aus, wenn der ungenutzte dritte Parameter nicht leer ist.
Behoben: &&
, ||
und der ternäre Operator werden nun jedes als Bedingung verwendete Objekt freigeben, wie in if (a.Unterobjekt && b)
.
Behoben: Gui/GuiControl konnte Radio-Steuerelemente innerhalb eines Tab3-Steuerelements nicht einschalten.
Behoben: Ab sofort sind in Windows 10 relative Pfade für den Verknüpfung-Parameter von FileCreateShortcut möglich.
Behoben: Ein Tab3-Steuerelement im aktuellen Windows-Design wird die benutzerdefinierte Textfarbe aller untergeordneten Steuerelemente nicht mehr überschreiben.
Behoben: Der Debugger hat Fortsetzungsbefehle in bestimmten Fällen nicht korrekt behandelt.
Gravierende Änderungen:
Der Versuch, eine leere Variable oder einen Ausdruck, der einen leeren Wert zurückgibt, an den Label-Parameter von SetTimer zu übergeben, wird ab sofort als Fehler eingestuft. Der Parameter muss entweder einen nicht-leeren Wert enthalten oder ganz weggelassen werden.
Einmalig laufende Timer werden nach ihrem Durchlauf automatisch gelöscht, wenn sie mit einem via Skript erstellten Objekt verbunden sind. Dadurch kann das Objekt freigegeben werden, wenn es vom Skript nicht mehr benötigt wird, was aber auch bedeutet, dass die Periode und Priorität des Timers verworfen werden.
SetTimer, Hotkey, GuiControl und Menu überprüfen nun die Mindestanzahl der Parameter von Funktionen, die via Referenz übergeben wurden (nicht nur via Namen, wie in früheren Versionen). Wenn die Funktion zu viele Parameter benötigt, wird ein Fehler ausgelöst oder ErrorLevel gesetzt (je nach Bedarf).
Abwärtskompatible Änderungen:
Wenn der Label-Parameter von SetTimer weggelassen wird und A_ThisLabel leer ist, wird der aktuelle Timer (sofern vorhanden) verwendet.
Neue Features:
Tab3-Steuerelement hinzugefügt, das eine Reihe von Problemen mit Tab-Steuerelementen behebt.
Fehlerbehebungen:
GuiControl wird Steuerelemente nun beim Hinzufügen/Löschen von Tabs aktualisieren. Konkret heißt das:
||
funktioniert nun korrekt.+Disabled
/+Hidden
verlieren nicht mehr ihren Effekt auf die Steuerelemente innerhalb eines Tabs.
Deaktivierte Tab-Steuerelemente ignorieren nun STRG+TAB.
Gui Tab
ohne Parameter beginnt nun eine neue Radiogruppe, falls möglich. Gui Tab
mit Parametern hatte diesen Effekt bereits.
Behoben: Menu x, Insert, y, z, % Objekt
verwendet nun das Objekt, anstatt es zu ignorieren.
Behoben: Menu x, Add, :Elementtext, % Objekt
verwendet nun das Objekt, anstatt nach einem Untermenü zu suchen.
Behoben: break label
brachte das Skript zum Absturz, wenn es direkt in dessen Zielschleife enthalten ist.
Behoben: InputBox, MsgBox, FileSelectFile und FileSelectFolder haben ein ungewolltes ALT-Up gesendet, wenn ALT unten ist. Schuld war der in v1.1.22.01 hinzugefügte STRG/UMSCHALT-Workaround.
Geändert: Der STRG/UMSCHALT-Workaround wurde verbessert, um zu verhindern, dass die WIN-Taste unnötig "maskiert" wird, wenn gleichzeitig auch STRG, UMSCHALT oder ALT unten ist.
Behoben: Bei LV_Modify können die Optionen nun weggelassen werden, wie in LV_Modify(r,, Spalte1)
.
Behoben: __Delete-Metafunktionen hatten Ausnahmen fälschlicherweise unterdrückt oder vorzeitig neu ausgelöst, wenn sie während der Ausnahmepropagierung aufgerufen werden.
Behoben: Erkennung von Funktionsaufrufen mit leerem Pflichtparameter beim Laden des Skripts, z.B. fn(x,,y)
.
Behoben: RegDelete löschte den kompletten Schlüssel anstatt den Standardwert.
Codepflege; kleine Verbesserung an der Codegröße.
Behoben: Theoretisches Problem beim Laden von Skripten mit seltsamen/sehr langen Pfaden.
Ahk2Exe: Unicode in kompilierten Skripten behoben (fehlerhaft seit v1.1.23.00).
Hinzugefügt: Unterbefehl Menu Insert.
Hinzugefügt: MenuGetHandle().
Hinzugefügt: MenuGetName().
Hinzugefügt: Menüpunktoptionen: Radio, Right, Break und BarBreak.
Geändert: Der Menu-Befehl wurde verbessert, um Menüpunkte anhand ihrer Position zu identifizieren: 1&
Hinzugefügt: LoadPicture().
Hinzugefügt: hicon/hbitmap: Syntax zur Übergabe von Handles an Befehle, die normalerweise Bilder aus einer Datei laden.
Hinzugefügt: Neue interne Variablen: A_CoordModeToolTip/Pixel/Mouse/Caret/Menu, A_DefaultGui, A_DefaultListView, A_DefaultTreeView, A_KeyDelayPlay, A_KeyDuration/Play, A_MouseDelayPlay, A_SendLevel, A_SendMode und A_StoreCapsLockMode.
Hinzugefügt: Hotkey-Option I
zum Setzen eines Inputlevels für die Hotkey-Variante.
Verbessert: Das Picture-Steuerelement unterstützt BackgroundTrans für Symbole.
Verbessert: Das Picture-Steuerelement flackert weniger beim Laden von großen Bildern.
Kleine Optimierungen am Menu-Code und bei der Abfrage interner Variablen.
Behoben: Umwandlungen von Menüpunkten zu Trennlinien und umgekehrt.
Behoben: A_ThisMenuItemPos unterstützt nun doppelt vorhandene Menüpunktnamen.
Behoben: Untermenüs wurden nach dem Löschen eines Menüs manchmal nicht neu erstellt.
Behoben: AutoHotkeyXXX.exe öffnet nun AutoHotkey.chm, nicht AutoHotkeyXXX.chm.
Einige Probleme mit SetTimer Delete behoben.
Behoben: Die For-Schleife übergibt nun korrekt die Kontrolle, wenn _NewEnum/Next eine Ausnahme auslöst.
Behoben: Finally zögert nun die bevorstehende Ausnahme hinaus, bis dessen Block ausgewertet wurde, nicht nur bis zum Aufruf der ersten internen Funktion.
Behoben: Erkennung von ungültigen Sprüngen aus Finally-Blöcken beim Laden des Skripts (fehlerhaft seit v1.1.20).
Behoben: Die GUI-Steuerelement-Optionen w-1
und h-1
schlugen fehl, wenn DPI größer gleich 150% ist und die GUI kein -DPIScale
aufweist.
Behoben: ~Taste up
-Hotkeys werden ab sofort kein automatisches Send {Taste down}
mehr durchführen. Dies trat nur auf, wenn der Hotkey eingeschaltet wurde, nachdem die Taste nach unten gedrückt wurde.
Behoben: Input und Hotstrings erkennen nun Ereignisse mit Zeichen, die Unicode oder keine Tasten sind.
Behoben: Die automatische Größenanpassung von Edit-Steuerelementen bezieht nun auch die letzte Zeile mit ein, wenn sie leer ist.
Behoben: Out-of-Memory-Handhabung in ComObj-Funktionen.
Behoben: ComObjArray() ignoriert nun überschüssige Parameter, anstatt das Skript zum Absturz zu bringen (gilt nur für dynamische Aufrufe).
Behoben: GuiControl fügt nun Tabs wie dokumentiert an, anstatt sie voranzustellen.
Behoben: XP64-Unterstützung.
Behoben: Symbole mit nicht-numerischen IDs wurden in suboptimaler Qualität geladen.
Behoben: Gui Destroy gab keine Funktionsobjekte frei, die mit der +g-Option gesetzt wurden.
Behoben: Gui Show versucht nicht länger, eine untergeordnete GUI gewaltsam zu aktivieren.
Behoben: Der Feststell-/Num-/Rollen-Status wurde gesetzt, während die Taste unten ist.
Behoben: Gui Color erzeugte eine falsche Textfarbe (üblicherweise schwarz).
Geändert: Gui Show wurde geändert, um die Chancen zu erhöhen, dass GuiSize sofort ausgeführt wird.
Für Entwickler:
Behoben: ObjRawSet() kann ab sofort nichts zurückgeben.
Hinzugefügt: Win10-supportedOS-Tag zum EXE-Manifest hinzugefügt (verhindert einige Probleme mit dem Programmkompatibilitätsassistenten und ähnlichem).
Hinzugefügt: Erkennung von Syntaxfehlern nach ")" in einer Funktionsdeklaration.
Behoben: A_EndChar gab bei Unicode-Endzeichen einen gekürzten Wert zurück.
Kleine Änderungen in der Implementierung:
Behoben: TreeView löst bei unbekannten Benachrichtigungen keine *
-Ereignisse mehr aus.
Behoben: Kein Absturz oder Fehlverhalten mehr, wenn sich ein Timer selbst löscht.
Behoben: RWin-up wurde in einigen seltenen Fällen maskiert, wo LWin-up dies nicht getan hätte.
Behoben: Größenanpassungen von Text/Edit/Button-Steuerelementen kompensieren nun hinausragende Zeichen.
Behoben: Registry-Befehle erlauben nun ein :
in UnterSchlüssel, wenn in Kombination mit RootSchlüssel.
Behoben: Hotkey-Priorisierung berücksichtigt nun Modifikatoren.
Geändert: Else/Try/Catch/Finally-Handhabung wurde überarbeitet, um hotkey::try cmd
zu unterstützen.
Hinzugefügt: Ein Workaround für Skriptdialogfenster, die sich so verhielten, als ob STRG oder UMSCHALT gedrückt wurde, nachdem sie vom Tastatur-Hook blockiert wurden.
Hinzugefügt: Ab sofort wird SetErrorMode(SEM_FAILCRITICALERRORS) beim Programmstart aufgerufen, um systembezogene Fehlermeldungen wie "Es befindet sich kein Datenträger im Laufwerk" zu unterdrücken. Der Aufruf von Drive oder DriveGet hat keinen Einfluss mehr auf den Fehlermodus des Prozesses.
Geändert: MonthCal-Steuerelemente haben nun standardmäßig Tabstopp in Windows Vista oder höher.
Verbessert: ComObjConnect() verwendet nun IProvideClassInfo, sofern verfügbar.
Behoben: Einige Probleme mit Methoden-/Eigenschaftsdefinitionen, die nach einer geschweiften Endklammer auf derselben Zeile folgen.
Behoben: Die automatische Größenanpassung vom Text/Link-Steuerelement kompensiert nun den +Border-Style (WS_BORDER).
Behoben: Break N
funktioniert nun korrekt, wenn Loop direkt unter einer If/Else/Try/Catch-Anweisung verwendet wird.
Behoben: Erkennung von Namenskonflikten zwischen Eigenschaften und Methoden.
Behoben: OnMessage(meld, fnobj, 0)
macht nichts mehr, wenn fnobj noch nicht registriert ist.
Behoben: Bei StrReplace() kann nun ErsatzText weggelassen werden.
Behoben: Namen von Klassenvariablen können nun auch ASCII-fremde Zeichen enthalten.
Hinzugefügt: Loop, Reg, RootSchlüssel[\Schlüssel, Modus].
Hinzugefügt: Loop, Files, DateiMuster [, Modus].
Geändert: EingabeVar-Parameter können ab sofort % Ausdruck enthalten (außer bei If-Befehlen).
Objektmethoden überarbeitet:
Hinzugefügt: Ord(); außerdem unterstützt Chr() nun auch Ergänzungszeichen (>0xFFFF).
Hinzugefügt: StrReplace().
Entfernt: Veralteter und undokumentierter 5-Parameter-Modus von RegRead, der ausschließlich für AutoIt-v2-Kompatibilität gedacht war (der zusätzliche Parameter wurde nicht verwendet).
Geändert: Die Parameter RootSchlüssel und UnterSchlüssel von RegRead, RegWrite und RegDelete können nun kombiniert werden.
Behoben: MouseGetPos (AusgabeVarSteuerelement), GuiContextMenu und GuiDropFiles (A_GuiControl) ignorieren nicht länger deaktivierte Steuerelemente [fehlerhaft seit v1.1.20.00].
Behoben: Add-First-Modus von OnMessage().
Behoben: A_OSVersion bei unbekannten Betriebssystemen in x64-Builds.
Behoben: ExitApp entpausiert nun das Skript, bevor Objekte freigegeben werden, falls eine __Delete-Metafunktion aufgerufen wird.
Geändert: Triviale Optimierungen und Codeanpassung.
Die in v1.1.20.00 vorgenommenen Änderungen bzgl. der Speicherung und Wiederherstellung von ErrorLevel bei Thread-Unterbrechungen wurden rückgängig gemacht, um unbeabsichtigten Folgen entgegenzuwirken.
Behoben (erneut): Timer haben manchmal bewirkt, dass ErrorLevel in Hexadezimal formatiert wurde.
Behoben: Klassenmethoden behalten eine gezählte Referenz zur Klasse.
Neue Features:
Hotkey, Menu, SetTimer, Gui-Ereignisse und Gui-Steuerelement-Ereignisse akzeptieren nun eine Funktion anstelle eines Labels, wenn kein Label gefunden wird.
Hotkey, Menu, SetTimer und Gui-Steuerelement-Ereignisse akzeptieren nun ein Funktionsobjekt. Delete-Unterbefehl für SetTimer hinzugefügt, um die Freigabe des Objekts zu ermöglichen.
OnMessage() verbessert, um einer beliebigen Anzahl von Funktionen oder Funktionsobjekten die Überwachung einer einzigen Meldung zu ermöglichen.
OnExit() und OnClipboardChange() hinzugefügt, die einen Funktionsnamen oder ein Funktionsobjekt akzeptieren.
Möglichkeit hinzugefügt, Hotkey-Labels auf eine Funktionsdefinition zu verweisen.
U/L/T-Modifikatoren hinzugefügt, um Groß-/Kleinschreibung-Umwandlungen mit Format() durchzuführen.
E-Option für den Input-Befehl hinzugefügt, um Endungszeichen als Zeichen statt als Tastencode zu behandeln.
** (stderr) für FileAppend hinzugefügt.
ObjBindMethod(obj, method, args*) und Func.Bind(args*) hinzugefügt.
Änderungen:
Standardverhalten hinsichtlich dessen geändert, was passiert, wenn das Hauptskript nicht gefunden wird:
WinActivate stellt nun das Fenster wieder her, wenn es bereits aktiv, aber minimiert ist.
WinActivate sucht nun nach einem sichtbaren Fenster, um es zu aktivieren, wenn DetectHiddenWindows ausgeschaltet ist und das aktive Fenster versteckt ist, anstatt nichts zu tun.
A_CaretX/A_CaretY verwendet nun eine andere Methode zum Abrufen der Position des Textcursors.
A_OSVersion verwendet nun RtlGetVersion(), um Windows 10 und hoffentlich zukünftige Versionen erkennen zu können.
A_OSVersion gibt nun eine Versionsnummer im Format "Haupt.Neben.Build" zurück, wenn kein vordefinierter Name für das Betriebssystem vorliegt.
Objekte unterstützen nun x[,y]
, x.y[,z]
und x[](y)
.
x.__Call(,y)
.x[]
ruft die Standardeigenschaft von x ab und fn[]()
kann für den Aufruf von JScript-Funktionen verwendet werden.Mehrere Änderungen am Code, um Fehler zu beheben, die Codegröße zu reduzieren oder die Performanz zu verbessern, einschließlich:
Fehlerbehebungen:
VK-zu-Tastenname-Umwandlungen für die Tasten A bis Z berücksichtigen nun die Tastaturbelegung.
Beim Senden von Text zur Standardausgabe via FileAppend (*) wird nun der Kodierung-Parameter berücksichtigt, anstatt immer einen ANSI-Text auszugeben.
Die automatische Größenanpassung von GUI-Fenstern mit nur einem Scrollbalken wird nun korrekt durchgeführt.
Exception(m, n)
verursacht keinen Absturz mehr, wenn n zu weit außerhalb der Grenzen liegt.
GuiContextMenu setzt nun A_GuiEvent korrekt in x64.
FileGetSize lieferte manchmal ein unklares Ergebnis, wenn die Datei nicht existiert oder nicht geöffnet werden kann.
Thread-Unterbrechungen speichern und stellen ErrorLevel in detaillierterer Form wieder her [wurde in v1.1.20.01 aufgrund von unbeabsichtigten Folgen rückgängig gemacht].
ControlClick-Pos-Modus ignoriert nun deaktivierte Steuerelemente.
Gui +MaxSize kleiner als +MinSize verhält sich nicht mehr merkwürdig.
GuiControl/Get benötigt keinen Gui-Namen mehr, wenn eine Steuerelement-HWND-Nummer angegeben wurde.
Metafunktionen beeinflussen nicht mehr die von Exception() gemeldete Zeilennummer.
Geändert: Die Neubelegung wurde verbessert, um scXXX::Y
zu erlauben, wenn die aktuelle Tastaturbelegung das ScXXX
keinem VK-Code zugeordnet hat. Allerdings muss Y
noch in der aktuellen Tastaturbelegung vorhanden sein.
Behoben: break n
funktioniert nun korrekt, wenn until
vorhanden ist, anstatt den Thread zu terminieren.
Behoben: ControlGetFocus verhinderte, dass der Benutzer einen Doppelklick ausführen konnte (danke HotKeyIt).
Behoben: ListView wurde korrigiert, um zu verhindern, dass das g-Label des Steuerelements bei nicht-unterstützten (und bisher unbekannten) Benachrichtigungen wie z.B. LVN_GETEMPTYMARKUP aufgerufen wird.
Behoben: #Include *i <X>
beendet das Programm nun wie vorgesehen, wenn X einen Syntaxfehler enthält.
Behoben: for Var in Ausdruck
brachte das Skript manchmal zum Absturz, wenn Ausdruck eine skriptdefinierte Funktion aufruft.
Entfernt: Die für Win9x/Win2k verwendeten Symbole mit einer Farbtiefe von 16 Bit.
Entfernt: Die separaten Tray-Symbol-Ressourcen.
Geändert: Verbesserungen am Auswahlverfahren von Symbolgrößen beim Laden von Symbolen aus DLL/EXE-Dateien.
Behoben: Einige Probleme im Zusammenhang mit der Hotkey-Validierung beim Laden des Skripts.
Behoben: /iLib schreibt die Datei nun auch bei einem Syntaxfehler.
Behoben: Return/Break/Continue/Goto innerhalb von Try..Finally.
Behoben: Der Hotkey-Befehl brachte das Skript zum Absturz bei dem Versuch, neue Varianten von bereits existierenden Hotkeys zu erstellen (fehlerhaft seit v1.1.19.00).
Geändert: Kleine Optimierungen am Hotkey-Befehl und an A_TimeIdle im Zusammenhang mit dem Wegfall der Win9x-Unterstützung.
Hinzugefügt: Ein Name für Func.Call()
. Func.()
funktioniert noch, ist aber veraltet.
Behoben: Einige Probleme mit X.Y
und X.Y(Z)
in VBScript/JScript/C#:
X.__Call
den Namen einer Funktion enthielt, wurde dieser zurückgegeben statt aufgerufen.X.Y(Z)
einen Wert zurückgab, wurde Z ignoriert. Nun verhält es sich wie X.Y[Z]
, sofern X.Y keine Funktion ist.Behoben: Der Hotkey-Befehl ignorierte das Tilde-Präfix (~; ursprüngliche Tastenfunktion nicht blockieren), wenn Label weggelassen wurde.
Behoben: Der Hotkey-Befehl ignorierte das Dollar-Präfix ($; Hook nutzen), wenn die Hotkey-Variante bereits ohne Dollar-Präfix erstellt wurde.
Behoben: Die Syntax %Fn%()
funktioniert ab sofort auch mit JavaScript-Funktionsobjekten.
Behoben: Das EXE-Manifest wurde geändert, um UAC-Erkennungsheuristiken des Installers zu umgehen (fehlerhaft seit v1.1.17).
Verbessert: Die Darstellung von Threads im Aufrufstapel des Debuggers.
Geändert: IDispatch-Implementierung für AutoHotkey-Objekte verbessert:
X.Y
in VBScript und C# gibt nun X.Y zurück, wenn es KEIN Func-Objekt ist; früher hat es versucht, X.Y() unabhängig vom Typ aufzurufen.X(Y)
in VBScript, JScript und C# gibt nun X[Y] zurück, es sei denn, X ist ein Func-Objekt, dann wird es wie bisher aufgerufen.X[Y]
in C# gibt nun X[Y] zurück, wenn X KEIN Func-Objekt ist; früher hat es versucht, X[Y]() unabhängig vom Typ aufzurufen.X.Y()
in C# gibt nun X.Y zurück, wenn es KEIN Func-Objekt ist, da es in der C#-Dispatch-Implementierung mehrdeutig ist.Hinzugefügt: Unterstützung für das Erstellen neuer Eigenschaften in IE-DOM-/JavaScript-Objekten.
Behoben: FileAppend, %VarMitClipboardAll%, Datei
brachte das Skript zum Absturz.
Behoben: COM-Ereignishandler haben den letzten Objektparameter nicht erhalten.
Neue Features:
Format() hinzugefügt.
FileOpen() kann nun verwendet werden, um Daten aus stdin zu lesen oder Daten in stdout oder stderr zu schreiben, indem man "*"
oder "**"
als Dateiname übergibt. AutoHotkey.exe *
kann verwendet werden, um Skriptcode auszuführen, der via Piping von einem anderen Prozess übergeben wurde. Siehe das Beispiel SkriptAusführen().
Unterstützung hinzugefügt, AutoHotkey-Objekte an COM-APIs als IDispatch zu übergeben.
Unterstützung für VT_BYREF in ComObject-Wrappern hinzugefügt. Mit obj[]
kann auf den referenzierten Wert zugegriffen werden.
Fehlerbehebungen:
Kompletter Systemabsturz in Win XP SP2 behoben.
Im Besitz befindliche ComObjArrays werden nicht via Pointer, sondern via Wert zurückgegeben. Das heißt, es wird eine Kopie des Arrays zurückgegeben, anstelle eines Pointers, der auf ein bald zu löschendes Array verweist.
Im Skript, das automatisch bei erstmaliger Ausführung von AutoHotkey erstellt wird, wurde die URL geändert.
sc15D
entspricht nun vk5D
/AppsKey (Send, GetKeyName, etc.).
Edit-Steuerelemente behandeln ALTGR+A nicht mehr wie STRG+A.
Statische Klassenvariablen dienen nicht mehr als Ziel für Labels, die direkt vor der Klasse stehen.
Behoben: x.y/[]/{} wurde manchmal inkorrekt als variadisch gekennzeichnet.
Behoben: Das Programm stürzte ab, wenn versucht wurde, eine schreibgeschützte Eigenschaft zu überschreiben.
Behoben: Das Programm stürzte ab, wenn während eines RegEx-Callouts ein RegExMatch-Objekt mit nicht-erfassten Teilsuchmustern erstellt wurde.
Behoben: Fehlverhalten in Abs() und Mod(), das durch eine fehlerhafte Fehlerbehebung in v1.1.16.01 verursacht wurde.
Behoben: #Include kann nun innerhalb einer Klasse verwendet werden (fehlerhaft seit a6ea27f).
Behoben: Clipboard gab in einigen Fällen binäre CF_HDROP-Daten zurück.
Verbessert: Genauigkeit von FileGetSize bei Dateien, die noch offen sind.
Verbessert: For-Loop-Kompatibilität im Zusammenhang mit COM-Objekten.
Hinzugefügt: Syntax zum Definieren von dynamischen Eigenschaften innerhalb von Klassen.
Hinzugefügt: Optionen x+m und y+m zum Positionieren von GUI-Steuerelementen.
Hinzugefügt: Der #InputLevel von jedem Hotkey wird nun in ListHotkeys angezeigt (wenn ungleich 0).
Optimiert: RegExMatch im Zusammenhang mit der O-Option (Objekt); das Erfassen von Bereichen einer langen Zeichenkette erfolgt nun in einigen Fällen wesentlich schneller als zuvor.
Behoben: Objekte prüfen nun, ob nach einem abgeschlossenen __Call neue Methoden verfügbar sind (um mit __Set und __Get gleichzuziehen).
Behoben: Undefiniertes Verhalten, das nach einem gescheiterten VarSetCapacity auftrat.
Behoben: FileRead meldet nun einen Fehler bei Dateien größer als 4 GB, anstatt die gelesenen Daten ungewollt zu kürzen.
Behoben: FileRead *c wird nun korrekt nullterminieren, wenn die Byte-Länge ungerade ist.
Behoben: Einige ClipboardAll-Probleme inklusive Verhaltensänderungen:
Behoben: A_EventInfo bei TreeView-Elementen mit negativen Bildschirmkoordinaten.
Behoben: Mögliches Problem beim Filtern von ListView/TreeView-Meldungen.
Behoben: A_LineFile/A_LineNumber in #If-Ausdrücken.
Behoben: #If fügt sich nun selbst zu ListLines hinzu (aber als "If").
Behoben: Abs(["-"]*)
und Ähnliches brachte das Skript zum Absturz.
Behoben: } funcdef(){
, das global verwendet wird, und }}
, das eine Methode/Eigenschaft/Klasse beendet.
Behoben: Performanzproblem im Zusammenhang mit &var_mit_langer_zkette_von_ziffern
.
Behoben: Interne Variablen korrumpierten den Speicher, wenn ihnen ein Objekt zugewiesen wurde.
Behoben: Der Parser kann continue
gegebenenfalls verbieten, selbst wenn die aktuelle Funktion innerhalb einer Schleife definiert ist.
Behoben: File.Encoding := x "-RAW"
unterbricht nicht mehr die Kodierung/Dekodierung von ASCII-fremden Zeichen. Das Suffix -RAW
wird ab sofort ignoriert.
Behoben: Metafunktionen beenden den Thread nach einem Exit oder Throw nun korrekt.
Behoben: FileInstall verwendet nun A_WorkingDir, wenn Ziel in einem unkompilierten Skript relativ ist.
Behoben: Debuggen von negativen Integerschlüsseln in Objekten.
Geändert: Interne Fehler- und Warndialogfenster sind nun immer im Vordergrund.
Behoben: Until
konnte nicht aus einer rekursiven Datei-/Registry-Schleife ausbrechen.
Hinzugefügt: WIN_8.1
als möglicher Wert für A_OSVersion.
Geändert: Der Hotkey-Befehl setzt/entfernt nun das Durchreicheverhalten bei vorhandenen Hotkey-Varianten, je nachdem, ob das Tilde-Präfix (~) vorhanden ist.
Geändert: Das EXE-Manifest wurde geändert, damit GetVersion/GetVersionEx die Windows-Version 8.1 erkennen kann.
Behoben: DllCall() bringt das Skript nicht mehr zum Absturz, wenn Funktion ein reiner Integer 0 ist.
Behoben: IsFunc("ComObj(")
gibt nun 0 (false) zurück, anstatt eine Ausnahme auszulösen.
Behoben: ControlClick sendet nun XButton1/XButton2 korrekt.
Behoben: Ein Speicherleck in new X
, wenn X.__Init
den Thread abbricht.
Behoben: Haltepunkte werden nicht länger auf Klassenvariableninitialisierer verschoben, wenn diese von Methodendefinitionen durchsetzt sind.
Behoben: x::
und x up::
wurden beide beim Loslassen ausgelöst, wenn der Zustand der Modifikatortasten das Auslösen von x beim Drücken verhindert. Seit v1.1.14 ist es eigentlich beabsichtigt, dass beide Hotkeys beim Loslassen ausgelöst werden, wenn x zudem in einer benutzerdefinierten Tastenkombination wie x & y::
verwendet wird.
Behoben: Try ohne Catch/Finally brachte das Skript zum Absturz, wenn keine Ausnahme ausgelöst wird.
Hinzugefügt: Finally-Anweisung für Cleanup-Aktionen nach Try/Catch. [fincs]
Geändert: Das Verhalten des Tilde-Präfixes (~) im Zusammenhang mit benutzerdefinierten Tastenkombos wurde geändert, um es intuitiver zu machen.
Behoben: x & y::
wird sowohl x::
als auch x up::
auslösen, wenn x im losgelassenen Zustand ist.
Behoben: ImageSearch setzt nun ErrorLevel auf 2 statt 0, wenn ein GDI-Aufruf fehlschlägt.
Behoben: EnvGet brachte das Skript zum Absturz, wenn die Variable länger als 32767 Zeichen ist.
Behoben: Ein kleiner Bug bei der Fehlerbehandlung im Zusammenhang mit StatusBarWaits ErrorLevel.
Behoben: Potenzielle Heap-Corruption im Zusammenhang mit FileRead *c in ANSI-Builds.
Behoben: Die Übergabe von lokalen Variablen an variadischen Funktionen bei rekursiven Aufrufen.
Behoben: Skripte konnten nicht geladen werden, wenn die erste Zeile ein in Klammern gesetzter Ausdruck ist.
Behoben: PixelSearchs Fast-Modus setzt AusgabeX/Y nur noch bei Erfolg.
Behoben: Variadische Funktionsaufrufe bei benannten Werten als Pflichtparameter.
Hinzugefügt: StrSplit() von v2 alpha.
Hinzugefügt: Optionale Parameter können nun durch Angabe von zwei aufeinanderfolgenden Kommas weggelassen werden, wie z.B. in InStr(a, b,, 2)
. Im Gegensatz zu früheren Versionen funktioniert das auch bei Objekten (inklusive COM-Objekte) und interne Funktionen. [a,,b]
kann verwendet werden, um ein lückenhaftes Array zu erzeugen.
Hinzugefügt: Objekteigenschaften können nun mithilfe der variadischen Syntax gesetzt werden, wie z.B. in x[y*]:=z
, wobei y ein Array mit Schlüsseln/Indizes oder Parametern enthält.
Behoben: GuiControl/Get akzeptiert nun die ClassNN-Bezeichnung des untergeordneten Eingabefeldes einer ComboBox. Zur Identifizierung der ComboBox konnte man bereits die HWND-Nummer des entsprechenden Eingabefeldes angeben.
Behoben: Vordefinierte Breite und Höhe der InputBox wiederhergestellt (fehlerhaft seit v1.1.11.00 - Commit 7373cc6443).
Behoben: Die DllCall-Argumenttyp-Validierung behandelt SYM_OBJECT nun zuverlässig und berücksichtigt #Warn UseUnset (wenn ein Variablenname ein ungültiger Typ ist).
Geändert: VarSetCapacity(var) warnt nicht mehr vor uninitialisierten Variablen.
Hinzugefügt: Unterstützung von %A_LineFile%
in #Include.
Geändert: Die Dateigröße von AutoHotkeySC.bin wurde durch Verringern der Auflösung des (selten verwendeten) Dateityp-Symbols reduziert.
Behoben: class X extends Y
ermöglicht nun die Definition von Y nach X.
Entwickelt von fincs: AutoHotkey ist nun DPI-sensitiv. Die Gui-Befehle passen sich automatisch an, falls die DPI ungleich 96 ist. Siehe Gui -DPIScale.
Verbessert: RegRead unterstützt nun REG_BINARY-Werte größer als 64 KB.
Verbessert: RegWrite unterstützt nun REG_BINARY/REG_MULTI_SZ-Werte größer als 64 KB.
Behoben: Process Close (und möglicherweise andere Dinge) in Windows XP.
Hinzugefügt: Grundlegende Unterstützung für Custom-Steuerelemente.
Verbessert: Die Befehle SoundSet/-WaveVolume und SoundGet/-WaveVolume funktionieren nun besser in Windows Vista und höher.
Behoben: Run "<Datei>" <Parameter>
übergibt das Leerzeichen nicht länger als Teil des Parameters.
Behoben: Einige Probleme beim Einlesen der Konsoleneingabe (CONIN$).
Behoben: GUI-Menü-Accelerator-Keys funktionierten nicht, wenn die GUI selbst (nicht ein Steuerelement) den Fokus hat.
Behoben: Zwei Bugs, die bestimmte Zuweisungen betrafen, deren Zielvariable eine nicht-geflushte Binärzahl enthält, aber eine Kapazität von 0 hat.
Behoben: GuiControl und GuiControlGet agierten mit dem falschen Steuerelement, wenn eine HWND-Nummer angegeben wurde, die nicht zur aktuellen GUI gehört. Stattdessen wird der Zustand als Fehler behandelt.
Behoben: OnMessage-Funktionen setzen A_Gui und A_GuiControl nun korrekt, wenn die Ziel-GUI ein untergeordnetes Fenster ist.
Behoben: MsgBox zeigt nun eine Fehlermeldung an, wenn ungültige Optionen angegeben sind, anstatt den kompletten Thread stillschweigend zu beenden.
Behoben: Syntaxfehler in Klassenvariableninitialisierern brachte das Skript zum Absturz ohne ordnungsgemäße Fehlermeldung.
Behoben: AND/OR nach einem Mehrfachanweisungskomma, z.B. ((x, y) and z)
.
Behoben: RegExReplace unterstützt nun korrekt doppelt vorhandene Teilsuchmusternamen.
Behoben: Objekt.Remove() gab keine Zeichenkettenschlüssel frei.
Behoben: base.Invoke() ist nicht mehr von der dynamischen Variablenauflösung abhängig.
Gravierende Änderungen:
.aut-Datei-Kompatibilität und #AllowSameLineComments entfernt.
Undokumentierte AutoIt-v2-Befehle entfernt.
Abwärtskompatible Änderungen:
Optionale Parameter können nun mit :=
statt =
deklariert werden, um mit Variablendeklarationen und Ausdrücken konsistent zu sein.
ASCII-fremde Zeichen sind nun in anführungszeichenlosen Schlüsseln ({Schlüssel: x}
und obj.Schlüssel
) erlaubt.
Der Name in der Versionsinfo wurde von "AutoHotkey_L" in "AutoHotkey" geändert.
Fehlerbehebungen:
Instabilität behoben, die durch teilweise erscheinende Warndialogfenster beim Evaluieren von Befehlsparametern verursacht wurde.
Der Fast-Modus von PixelSearch behandelt "nicht gefunden" nun als Fehler.
Es können nun andere ahk_-Kriterien nach ahk_exe angegeben werden.
else continue 2
und Ähnliches benötigt nicht mehr zwingend geschweifte Klammern um die Schleife.
RegRead meldet keinen Misserfolg mehr nach erfolgreichem Einlesen von Binärdaten.
File.Length
kompensiert oder flusht nun alle gepufferten Daten.
Die automatische Größenanpassung einer GUI berücksichtigt nun Scrollbalken, sofern vorhanden.
Debugger:
Unterstützung für asynchrone Befehle hinzugefügt.
Handhabung von Haltepunkten auf Zeilen wie else foo()
oder { bar()
verbessert, so dass der Debugger dort halten kann.
Codegröße optimiert, einige Bugs behoben und den Debugger generell robuster gemacht.
Debugger: Fehler behoben, dass max_depth nur halb oder gar nicht limitiert war.
Gravierende Änderungen:
Die Standard-Codepage des Skripts ist nun ANSI, da das vorherige Verhalten häufig zu Verwirrung führte. UTF-8-Dateien müssen nun eine Byte-Order-Markierung (BOM) haben, um korrekt erkannt zu werden. Notepad fügt jeder Datei, die unter UTF-8 gespeichert ist, automatisch eine BOM hinzu.
return x
wurde geändert, um die Formatierung von numerischen Zeichenketten beizubehalten; es ist nun äquivalent zu return (x)
.
Gui, Name: New
wurde geändert, um die neue GUI als Standard-GUI-Fenster zu setzen.
Sonstige Änderungen:
ClipboardAll wurde geändert, um CF_UNICODETEXT gegenüber anderen Textformaten zu bevorzugen.
Gui Show wurde geändert, um Floating-Point-Zahlen zu erlauben.
A_OSVersion gibt nun WIN_8 für Windows 8 zurück.
Die Dateibeschreibung von AutoHotkey.exe lautet nun "ANSI/Unicode 32/64-bit".
Der Parser wurde geändert, um Zeilen wie new MeinObjekt()
ohne Zuweisung zu erlauben.
PCRE wurde auf 8.30 aktualisiert.
Die Formulierungen einiger Warnungen wurden verbessert; der untere Bereich des Warndialogfensters verweist nun auf die Dokumentation.
Verbesserungen am Debugger:
Neue Features:
Unterstützung für das PCRE-Konstrukt (*MARK:NAME)
via RegExMatchObject.Mark
hinzugefügt.
Unterstützung von Zuweisungen wie classvar.x := y
in Klassendefinitionen hinzugefügt (nach dem Deklarieren von classvar).
A_Is64bitOS hinzugefügt.
SetRegView und A_RegView hinzugefügt.
Fehlerbehebungen:
Func.()
überspringt nun den Funktionsaufruf, wenn Pflichtparameter weggelassen werden, anstatt den kompletten Thread stillschweigend zu beenden.
Fehler behoben, dass Objekt.Remove()
die Objekt-Schlüssel nicht freigegeben hat.
Taste-Unten/Oben-Hotkey-Paare unterdrücken nun korrekt die Eingabe, wenn nur ein Hotkey des Paares aktiviert ist.
#Include <Bibl>
beeinflusst nicht mehr das von nachfolgenden #Include-Direktiven verwendete Arbeitsverzeichnis.
objaddref()
verhält sich nicht mehr wie ObjRelease()
, wenn diese Funktion mit einem kleingeschriebenen 'a' aufgerufen wird.
A_AhkPath in 32-Bit-kompilierten Skripten erkennt nun 64-Bit-AutoHotkey-Installationen und umgekehrt.
Fehler behoben, dass TreeView-Steuerelemente mit der -Background
-Option in älteren Betriebssystemen falsch gerendert wurden.
Fehlermeldungen, die bei der Ausführung von While/Until angezeigt werden, identifizieren nun korrekt die fehlerhafte Zeile.
Behoben: STRG/ALT/UMSCHALT-Taste-Unten-Hotkeys führen nicht mehr dazu, dass zuvor definierte Taste-Oben-Hotkeys desselben Modifikators unwirksam werden.
Behoben: Taste-Unten-Hotkeys verwenden nun immer den Hook, wenn sie nach einem Taste-Oben-Hotkey derselben Taste definiert werden. Wenn der Taste-Unten-Hotkey die Methode "reg" verwendet, wird der Hook das Taste-Unten-Ereignis blockieren und nur den Taste-Oben-Hotkey auslösen.
Behoben: Ladezeitprüfungen interpretieren Ausdrücke ohne Derefenrenzen nicht mehr als rohen Text. Zum Beispiel wurde Gosub % "foo"
beim Laden des Skripts in "foo":
aufgelöst. Ebenso wurde % ""
in verschiedenen Fällen als ungültig angesehen, selbst wenn laut Definition eine leere Zeichenkette möglich ist.
Behoben: Ein seltener Absturz konnte auftreten, wenn GetClipboardData() fehlschlägt.
Behoben: ComObjArray() gibt nun bei Misserfolg eine leere Zeichenkette anstelle eines willkürlichen Integers zurück.
Behoben: Objekt.Remove(i, "")
hatte Auswirkungen auf Integerschlüssel, wenn !Objekt.HasKey(i)
.
Behoben: FileRead ignoriert nun #MaxMem beim Lesen von UTF-16 in Unicode-Builds.
Behoben: Dynamische Funktionsaufrufe funktionieren nun mit internen Variablen wie z.B. %A_ThisLabel%()
.
Verbessert: %var%()
unterstützt nun Funktionsobjekte und die Standard-__Call-Metafunktion.
Behoben: ControlGet List funktioniert nun für ListViews, wenn das Skript und der Zielprozess nicht beide 32-Bit oder beide 64-Bit sind.
Behoben: SendEvent mit einer Tastenverzögerung von 0; eine mit v1.1.05.04 eingeführte Änderung führte dazu, dass SendEvent langsamer war als erwartet.
Behoben: Objekt.Remove(i) passte die Schlüssel nicht an, wenn Objekt[i] nicht existiert.
Behoben: ComObjType() verhält sich nun wie erwartet, wenn diese Funktion über einen alternativen Namen aufgerufen wird.
Behoben: ExitApp beendet nun den Thread, wenn die Terminierung des Skripts von einer OnExit-Subroutine verhindert wird, anstatt die Ausführung nach dem Block, der ExitApp enthält, fortzusetzen.
Behoben: Ein Funktionsaufruf über ein Objekt verhindert nicht länger, dass der Thread beendet werden kann. Dies hat zur Folge, dass wenn innerhalb einer Klassenmethode Exit verwendet wird oder ein Laufzeitfehler auftritt, nicht nur die Funktion, sondern der komplette Thread beendet wird.
Behoben: Der Aufruf einer Basisklassenmethode über base.Methode() oder Ähnlichem innerhalb einer Klassendefinition führt nicht mehr zu einer UseUnset-Warnung, wenn die Methode nicht existiert. Folglich führt die Instanziierung eines Objekts mit Instanzvariablen nicht mehr zu einer Warnung bezüglich der internen Methode base.__Init
, wenn die Basisklasse keine Instanzvariablen hat.
Behoben: IniRead verursachte einen Absturz, wenn der Schlüssel-Parameter verwendet wird, aber der Sektion-Parameter weggelassen wird.
Behoben: Genauigkeit von FileGetSize bei Dateien größer als 4 GB.
Behoben: Die smarte Kommabehandlung des MsgBox-Befehls benötigt einen numerischen Optionen-Parameter, nicht den Titel-Parameter.
Neue Features:
#InputLevel-Direktive und SendLevel-Befehl integriert (entwickelt von Russell Davis).
Unterstützung für Link-Steuerelemente integriert (entwickelt von ChrisS85).
Gravierende Änderungen:
Der Befehlsparser wurde geändert, um zu verhindern, dass Escapesequenzen wie `t
oder `
am Anfang oder Ende eines Parameters entfernt werden.
Die smarte Kommabehandlung des MsgBox-Befehls wurde hinsichtlich Flexibilität und Konsistenz verbessert.
%
kann nun verwendet werden, um einen Ausdruck für den Optionen- und Zeitlimit-Parameter anzugeben.%Zeitlimit%.500
). Entgegen der Dokumentation interpretierte das frühere Verhalten die meisten anderen Fälle, die mit %
beginnen, als Ausdrücke (die eine Doppeldereferenz enthalten).A_IsUnicode und A_IsCompiled sind in ANSI-Versionen bzw. unkompilierten Skripten nicht mehr undefiniert, sondern enthalten eine leere Zeichenkette. Dadurch können sie geprüft werden, ohne #Warn-Warnungen auszulösen. Nebeneffekte sind:
Send und verwandte Befehle respektieren nun #MenuMaskKey beim Ändern von Modifikatortastenzuständen.
Sonstige Änderungen:
GuiControl Choose wählt nun alle ausgewählten Listeneinträge einer ListBox/ComboBox/DDL ab, wenn N=0.
RegisterCallback kann nun ein Func-Objekt anstelle eines Namens verwenden.
ListLines zeigt nun Dateinamen an (außer wenn kompiliert).
Run wurde verbessert, um im Zusammenhang mit ShellExecuteEx eine Prozess-ID zurückzugeben, wenn möglich.
Fehlerbehebungen:
Handle-Leaks in RegRead behoben.
x.y++
und Ähnliches weist nun eine leere Zeichenkette zu, wenn x.y nicht-numerisch ist.
Der WIN+L-Workaround von SendInput führte dazu, dass die WIN-Taste im gedrückten Zustand "hängen blieb".
Ahk2Exe hatte die falsche Datei inkludiert, wenn eine automatische Inklusion über #Include <Bibl> erfolgt.
Behoben: Inkrement (++) und Dekrement (--) funktionierten nicht bei Objektelementen, die eine Zeichenkette enthalten.
Behoben: Inkrement (++) und Dekrement (--) zeigen nun eine Warnmeldung an, wenn sie mit uninitialisierten Variablen verwendet werden.
Behoben: continue n
verhält sich nun korrekt, wenn eine innere Schleife keine geschweiften Klammern nutzt.
Behoben: RegExMatchObject[Name]
funktioniert nun korrekt mit doppelt vorhandenen Namen.
Behoben: Der Selected-Unterbefehl von ControlGet war in der x64-Version unzuverlässig.
Behoben: CPU wird nicht mehr voll ausgelastet, wenn ein darunter liegender Thread ein modales Dialogfenster anzeigt (und wahrscheinlich auch in anderen Fällen).
Behoben: Loop ... Until VarMitObjekt
.
Behoben: Beim Laden eines kompilierten Skripts wurde das EOF (End of File) in einigen Fällen falsch erkannt.
Behoben: SendInput lässt nun Modifikatortasten beim Senden von Sonderzeichen oder {U+xxxx} automatisch los (fehlerhaft seit v1.1.00.01).
Behoben: ComObjConnect() filtert nun Non-Dispatch-Schnittstellen heraus, anstatt das Skript abstürzen zu lassen.
Behoben: new %VarMitKlasseName%()
.
Behoben: Klassendeklarationen erlauben nun Direktiven wie z.B. #Include.
Hinzugefügt: Neuer Koordinatenmodus Client.
Hinzugefügt: Objekt-Ausgabemodus für RegExMatch und RegEx-Callouts.
Hinzugefügt: Superglobale Deklarationen, um die mehrfache Angabe von globalen Deklarationen zu vermeiden.
Gravierende Änderung: Klassendeklarationen wie class c
erzeugen nun eine superglobale anstelle einer gewöhnlichen globalen Variable.
Hinzugefügt: Im Fehlerdialogfenster werden mehr Details bezüglich unbehandelter Ausnahmen angezeigt.
Geändert: Gui +Owner
wurde angepasst, damit es auch nach Erstellung der GUI funktioniert.
Geändert: Instanzvariablendeklarationen in Klassendefinitionen wurden angepasst, um zu vermeiden, dass leere Schlüssel-Wert-Paare im Klassenobjekt verbleiben.
Geändert: Bei Misserfolg verwendet #Include nun das Standardfehlermeldungsformat (mehr Details; berücksichtigt auch ErrorStdOut).
Geändert: Throw ohne Parameter löst nun standardmäßig ein Exception-Objekt aus.
Geändert: Das Format von Laufzeitfehlermeldungen wurde zugunsten der Einheitlichkeit und Codegröße leicht angepasst.
Geändert: PCRE verwendet nun aus Performanzgründen UTF-16 für eingehende Zeichenketten in Unicode-Builds.
Geändert: PCRE auf 8.13 aktualisiert.
Behoben: Threads beendeten sich nicht wie erwartet, wenn eine Zuweisung in einem Ausdruck fehlschlägt.
Behoben: #MaxMem verhinderte, dass man Variablen, die keine Erweiterung erfordern, etwas zuweisen kann.
Behoben: Try/Catch konnte keine COM-Fehler abfangen.
Behoben: GuiControlGet behandelte Parameter #2 in einigen Fällen fälschlicherweise als ungültig.
Behoben: Eingabevariablen wurden zu früh aufgelöst, was dazu führte, dass sie später von einem anderen Ausdruck auf derselben Zeile ungültig gemacht wurden.
Behoben: RegEx-Callouts führten zum Abbruch der Übereinstimmungssuche, wenn eine Ausnahme ausgelöst wurde.
Behoben: DllCall setzte ErrorLevel auf -4 statt -3.
Behoben: While erschien bei der ersten Wiederholung zweimal in ListLines.
Behoben: Bei Try/Catch kann nun If/Loop/For/While ohne umschließenden Block verwendet werden.
Behoben: Enumerator-Objekte wurden nicht freigegeben, wenn Until zum Unterbrechen einer For-Schleife verwendet wird.
Behoben: FileRemoveDir setzte ErrorLevel nicht korrekt.
Warnung: Diese Version enthält eine Vielzahl von Änderungen, die die Funktionsweise eines Skripts unerwartet ändern können.
Hinzugefügt: Ausnahmebehandlung via Try/Catch/Throw und Exception().
Hinzugefügt: StdOut-Modus für #Warn.
Hinzugefügt: Option Gui +HwndVARNAME.
Hinzugefügt: Gui, New [, Optionen, Titel].
Hinzugefügt: Automatische Unterstützung für Keyboard Accelerators (z.B. CTRL+O) in Gui-Menüs.
Geändert: Die Handhabung von #Include <Bibl>
im Zusammenhang mit der Befehlszeilenoption "/iLib", um ein Problem bei Ahk2Exe zu lösen.
Geändert: GuiControl behält nun den aktuellen Wert des Progress-Steuerelements, wenn dessen Style geändert wird.
Geändert: GuiControl und GuiControlGet erlauben nun eine HWND-Nummer im SteuerelementID-Parameter.
Geändert: Das 1GB-Limit von FileRead wurde entfernt.
Fehlererkennung verbessert:
Hotkey, If, Ausdruck
wird, wenn Ausdruck noch nicht als #If-Ausdruck vorhanden ist, beim Laden des Skripts abgefangen, falls möglich.Hotkey, IfIrgendetwas
werden, wenn Irgendetwas ungültig ist, beim Laden des Skripts abgefangen.Behoben: Es wurde ein Bug im Zusammenhang mit rekursiven variadischen Funktionen behoben.
Hinzugefügt: Unterstützung für GUI-Namen.
Hinzugefügt: GUI-Fenster können nun via HWND-Nummer identifiziert werden.
Hinzugefügt: Gui-Option +Parent%ParentGui%
.
Hinzugefügt: GUI-Fenster können nun mithilfe von +Owner%HWND%
einem externen Fenster untergeordnet werden.
Hinzugefügt: Unterbefehl "Name" für GuiControlGet.
Hinzugefügt: Unterstützung für ActiveX-Steuerelemente mithilfe des Gui-Befehls.
Behoben: Leeres Hotkey-Steuerelement gab "vk00" zurück.
Behoben: Abstürze und Speicherlecks bei COM-Ereignissen/ComObjConnect().
Behoben: GuiControlGet AusgabeVar, Unterbefehl, %AusgabeVar%
schlug immer fehl.
Geändert: Fehlermeldung "Missing (/[/{" zu "Unexpected )/]/}" geändert, um Missverständnissen vorzubeugen.
Geändert: ListLines zeigt nun While- und Until-Zeilen an, die bei jeder Wiederholung ausgeführt werden.
Geändert: Der Operator ~= hat nun eine höhere Priorität als =/!=/</>/<=/>=, aber eine niedrigere als Verkettung, außerdem wurde er dokumentiert.
Behoben (Debugger): Das numChildren-Attribut hat Objekt.Base nicht mit einbezogen.
Behoben: Die Kapazität von Variablen wurde in x64-Builds auf 2 GB begrenzt.
Behoben: Das zuletzt gefundene Fenster wurde nicht von #if WinExist(T)
gesetzt.
Geändert: A_PriorKey ignoriert nun die Up-Ereignisse der Tasten.
Behoben: Abrufen von Prozessnamen und -pfaden in bestimmten Fällen, einschließlich:
Hinzugefügt: TV_SetImageList().
Geändert: Zeichen, die die exotischen Umschaltzustände 16 und 32 erfordern, verwenden nun eine Fallback-Methode, anstatt die falschen Tastendrücke zu erzeugen.
Geändert: Die Handhabung toter Tasten wurde überarbeitet, um Probleme zu beheben, die auftreten, wenn mehrere Skripte mit Hotstrings aktiv sind.
Hinzugefügt: Unterstützung für Instanzvariablen in Klassendefinitionen unter Verwendung einer einfachen Zuweisungssyntax.
Entfernt: Das in Klassendefinitionen verwendete Schlüsselwort var
; verwenden Sie stattdessen static
.
Hinzugefügt: Neue interne Variablen: A_ScriptHwnd und A_PriorKey.
Hinzugefügt: Neue interne Funktionen: GetKeyName(), GetKeyVK(), GetKeySC() und IsByRef().
Hinzugefügt: Neuer Unterbefehl: WinGet, AusgabeVar, ProcessPath.
Hinzugefügt: Ein Fenster kann nun über dessen Prozessnamen oder -pfad identifiziert werden: ahk_exe %Name%.exe
oder ahk_exe %VollständigerPfad%
.
Geändert: ProcessName-Unterbefehl von WinGet wurde optimiert.
Geändert: SetTimer verwendet nun A_ThisLabel, wenn das Label weggelassen wird.
Geändert: ComObjConnect() unterstützt nun die Verwendung eines Objekts anstelle eines Funktionsnamenspräfixes.
Geändert: ComObjConnect() wurde verbessert, so dass das Präfix/Objekt ohne Trennung aktualisiert werden kann.
Geändert: Das Parsen von Fortsetzungsbereichen wurde verbessert, um Ausdrücke wie (x.y)[z]()
zu ermöglichen, ohne dass "(" mit einem Escapezeichen versehen werden muss.
Geändert: Die Methode zum Speichern von Skripttext in 32-Bit kompilierten Skripten wurde ersetzt; jetzt konsistent mit 64-Bit.
Behoben: Die Erkennung von ALTGR in der Tastaturbelegung des aktiven Fensters (in Unicode-Builds).
Behoben: SendInput machte ein redundantes LCTRL-UP einige Zeit nach ALTGR-UP.
Behoben: Modifikatortasten wurden beim Senden von Sonderzeichen nicht automatisch losgelassen.
Behoben: Konflikte beim Neubelegen mit Scancode/Modifikatortasten wie sc1xx statt ^sc0xx.
Behoben: $ und #UseHook waren unwirksam, wenn sie nur bei der zweiten oder nachfolgenden Instanz(en) eines Hotkeys verwendet wurden.
Behoben: Potentieller Absturz bei der Rückgabe eines Wertes mit einer __Delete-Metafunktion.
Behoben: "Uninitialisierte Variable"-Warnungen wurden vom Debugger ausgelöst.
Geändert: base.Methode()
löst keine Standard-Metafunktion oder Warnung mehr aus.
Geändert: Gui +(Ex)Style
versteckt/zeigt nicht länger das GUI-Fenster.
Geändert: Der Debugger meldet nun type="undefined" für uninitialisierte Variablen.
Hinzugefügt: Ab sofort erfolgt eine Überprüfung, um zu verhindern, dass für Zeichen, die die Hankaku-Taste benötigen, die falschen Tastendrücke gesendet werden.
Hinzugefügt: Integer werden nun als Klassenvariablennamen unterstützt.
Hinzugefügt: Ab sofort können Klassenvariablen mit dem Schlüsselwort "static" deklariert werden.
Neue Features:
Einfache Syntax zum Definieren von Klassen implementiert.
Schlüsselwort new
zum Erstellen eines abgeleiteten Objekts implementiert.
Func() zum Abrufen einer Referenz auf eine existierende Funktion hinzugefügt und IsFunc zur Erkennung von Funktionsreferenzen verbessert.
++
und --
können nun mit Objektelementen verwendet werden, wie z.B. x.y[z]++
.
Änderungen:
__Delete löst nicht mehr __Call aus.
OnClipboardChange verwendet nun AddClipboardFormatListener, falls verfügbar (also in Windows Vista oder höher), um die Zuverlässigkeit zu verbessern.
Auto-Verkettung mit (
ist selektiver, damit einige ungültige Ausdrücke wie 12(34)
nicht mehr funktionieren.
Fehlerbehebungen:
SetTimer Label, -0
wird nun als "einmal ausführen, so früh wie möglich" behandelt.
A_MyDocuments usw. verwendet nun SHGetFolderPath anstelle eines undokumentierten Registry-Schlüssels.
Ein nicht-leerer AusnahmeText-Parameter schließt Fenster ohne Text nicht mehr aus.
Behoben: Ein mit {}
umschlossenes Komma wurde fälschlicherweise als Trennung von Argumenten interpretiert.
Behoben: Die For-Schleife setzt A_Index erst dann, wenn das Ausdruck-Argument ausgewertet wurde, so dass der Wert der äußeren Schleife verwendet werden kann.
Behoben: Der Standort des Standardskripts basiert nun auf dem Verzeichnis der aktuell verwendeten EXE-Datei (wie dokumentiert) und nicht mehr auf dem Arbeitsverzeichnis.
Geändert: Die Ladezeitvalidierung wurde verbessert, um ungültige Versuche zu erkennen, mit Goto aus einer Funktion "herauszuspringen".
Behoben: 64-Bit-Builds kürzen HWND-Nummern oder SendMessage/PostMessage-Parameter nicht länger auf 32 Bit.
Behoben: */::
wurde als ungültiger Hotkey behandelt (fehlerhaft seit L54).
Behoben: Symbole.
Hinzugefügt: {Schlüssel: Wert}
als alternative Schreibweise für Object("Schlüssel", Wert)
.
Hinzugefügt: [x, y, z]
als alternative Schreibweise für Array(x, y, z)
(eine neue Funktion äquivalent zu Object(1, x, 2, y, 3, z)
).
Hinzugefügt: Geringfügige Optimierung: Referenzen auf True, False, A_PtrSize oder A_IsUnicode innerhalb von Ausdrücken werden beim Laden des Skripts aufgelöst.
Behoben: Hotkey-Parser behandelt x & ^y
nun als Fehler, anstatt ^
zu ignorieren.
Neue Features:
ComObjQuery: Fragt ein COM-Objekt nach einem Interface oder Service ab.
ComObjFlags: Ermittelt oder ändert Flags, die das Verhalten eines COM-Wrapper-Objekts kontrollieren.
ComObjCreate() ermöglicht das Erstellen von Non-Dispatch-Objekten, wenn ein Interface-Identifikator (IID) angegeben ist.
COM-Arrays unterstützen For-Schleifen und die Clone()-Methode.
ListVars zeigt neben der Wrapper-Adresse auch den inneren Variantentyp und Wert jedes COM-Wrapper-Objekts an.
Änderungen:
Wenn ein direkt geschriebener Integer oder eine Variable, die eine numerische Zeichenkette und einen zwischengespeicherten binären Integer enthält, einem Objektelement zugewiesen wird, wird ein Integer anstelle einer Zeichenkette gespeichert. Dies kommt insbesondere einem Skript zugute, das COM-Methoden aufruft, die nur Integer als Parameter akzeptieren oder sich je nach Typ des Wertes unterschiedlich verhalten.
NULL-Werte können nun mit ComObjParameter() für die Typen VT_UNKNOWN und VT_DISPATCH verwendet werden.
Verbesserte Unterstützung für "Common Language Runtime"-Objekte (.NET) via COM.
FileRecycle zeigt nun eine Warnmeldung an, wenn eine Datei gelöscht wird, die zu groß für den Papierkorb ist.
Wenn ein via ComObjArray() erstelltes SafeArray einem Element eines anderen SafeArrays zugewiesen wird, wird eine separate Kopie erstellt. Dadurch wird verhindert, dass das Skript beim zweiten Versuch, das Array zu "zerstören", abstürzt. Mit ComObjFlags() kann dieses Verhalten verhindert werden.
Fehlerbehebungen:
Beim Versuch, einem COM-Array des Typs VT_DISPATCH oder VT_UNKNOWN etwas zuzuweisen, stürzte das Skript ab.
Break und Pause wurden manchmal außerhalb von Schleifen toleriert.
Ein alleinstehender Wagenrücklauf (`r) wurde nicht korrekt als Zeilenumbruch interpretiert.
MouseMove berechnete im SendInput- und SendEvent-Modus falsche negative Koordinaten.
Das Auswählen von Edit This Script im Tray-Menü oder Verwenden des Edit-Befehls führte zum Absturz des Skripts (fehlerhaft seit v1.0.95).
Fehlerdialogfenster verwiesen manchmal auf irrelevante Codezeilen.
Alle Datei-Ein-/Ausgaben wurden stark optimiert.
#Warn als zusätzliche Möglichkeit zum Debuggen des Skripts hinzugefügt; ursprüngliches Design von ac.
Standardmäßig ruft name_var.()
eine Funktion auf, wenn name_var einen Funktionsnamen enthält. Dies kann wie gewohnt mithilfe des Standardbasisobjekts überschrieben werden.
Run unterstützt nun Verben mit Parametern, wie z.B. Run *RunAs %A_ScriptFullPath% /Param
.
Wenn nach einer direkt geschriebenen, in Anführungszeichen gesetzten Zeichenkette ein Operator folgt, der entweder einen Operanden (&x
) oder zwei numerische Operanden (x & y
) akzeptiert, wird eine Auto-Verkettung durchgeführt und der Operator nur auf den rechten Operanden angewendet. Der Grund dafür ist, dass direkt geschriebene, in Anführungszeichen gesetzte Zeichenketten immer als nicht-numerisch angesehen werden und deshalb keine gültigen Eingabewerte für numerische Operatoren sind. Zum Beispiel funktionieren nun Ausdrücke wie "x" &y
und "x" ++y
.
Behoben:
^!+
nicht.~x::
beeinflusst nun x & y::
auf dieselbe Weise wie ~x & z::
, anstatt keinen Effekt zu haben.Behoben: Es trat ein Speicherleck auf, wenn der Rückgabewert eines indirekten Objektaufrufs oder einer internen Funktion nicht verwendet wurde, also Zeilen wie file.ReadLine()
oder SubStr(x,y,z)
.
Behoben: Die Fehlerbehebung von v1.0.92.01 wurde verbessert, um zudem k::MsgBox(),x:=y
zu beheben und if()
wieder funktionsfähig zu machen.
Geändert: FileCreateDir setzt nun A_LastError.
Behoben: GuiControl()
oder Ähnliches wurde manchmal fälschlicherweise als Befehl interpretiert.
Hinzugefügt: Verbundzuweisungen können nun mit Objekten verwendet werden, wie z.B. x.y += z
.
Geändert: IniWrite wurde in Unicode-Builds verbessert, um zu verhindern, dass am Anfang einer neuen Datei eine leere Zeile erscheint.
Geändert: Der Parser wurde verbessert, um toleranter hinsichtlich dessen zu sein, was nach {
/}
/Else
folgt, besonders wenn diese in Kombination verwendet werden.
Behoben: Der Cleanup-Code in COM-Methodenaufrufen gab die falschen Parameter frei.
Behoben (ANSI): DllCall setzte bei der Ausgabe eine falsche Länge für WStr-Parameter.
Behoben: Variadische Funktionsaufrufe waren instabil, wenn das Parameterobjekt leer ist.
Behoben (Unicode): RegExReplace ließ den gesamten Text bis zu StartPos weg (fehlerhaft seit v1.0.90.00).
Behoben: RegEx-Callout-Teilsuchmustervariablen - fehlerhaft seit v1.0.90.00.
COM: Schutz gegen NULL-IDispatch/IUnknown-Pointer hinzugefügt.
COM: QueryInterface für IDispatch wird übersprungen, wenn VT_DISPATCH explizit übergeben wird.
Kleine Fehlerbehebung bezüglich der Wartbarkeit: obj.field := var
liefert nun korrekt SYM_STRING, nicht SYM_OPERAND.
Behoben: Unerwartete Ergebnisse mit File.Write(Str)
nach Einlesen des Textes.
Behoben: Eine UTF-BOM-Überprüfung führte zu unerwarteten Ergebnissen bei Dateien ohne BOM.
Behoben (ANSI): Parsende Schleifen und File.ReadLine()
behandelten Chr(255)
als EOF.
Behoben (Unicode): RegExReplace-Fehler, bei denen die UTF-8- und UTF-16-Längen unterschiedlich waren.
Behoben: Die Deaktivierung des letzten Hook-Hotkeys unterbrach Input.
Hinzugefügt: Kleine Optimierungen für RegExMatch/Replace.
Alle Änderungen in dieser Version beziehen sich auf COM.
Hinzugefügt: ComObjError() gibt nun die vorherige Einstellung zurück.
Hinzugefügt: ComObjType(co) und ComObjValue(co).
Hinzugefügt: ComObjMissing().
Hinzugefügt: ComObjArray() und einfache SAFEARRAY-Unterstützung.
Hinzugefügt: "Besitz ergreifen"-Parameter für ComObjParameter().
Geändert: Werte, die via ComObjParameter() an COM-Funktionen übergeben werden, werden beim Aufrufen der Funktion nicht mehr freigegeben.
Geändert: ComObj.x()
fällt nun auf PROPERTYGET zurück, wenn das Objektelement 'x' nicht gefunden wird. Dies behebt For-Schleifen-Fehler in Bezug auf einige Objekte.
Geändert: Unbehandelte Variantentypen werden in ein verwendbares Objekt umgewandelt, anstatt einen Integerwert zurückzugeben.
Geändert: Standardmäßig wird die Lebensdauer von VT_UNKNOWN / VT_ARRAY automatisch verwaltet.
Behoben: URLDownloadToFile funktioniert nun korrekt in Unicode-Builds unter Windows < 7.
Behoben: ANSI-Großbuchstaben wurden im ANSI-Build als ALT+0 gesendet.
Behoben: File.Pos war inkorrekt, wenn versucht wurde, etwas nach EOF zu lesen.
Behoben: Escapesequenzen in #If-Ausdrücken und statischen Initialisierungen.
Behoben: ClipboardAll brachte bei bestimmten Formaten das Skript manchmal zum Absturz.
Behoben: Transform HTML berechnete die Länge von &#NNN;-Entitäten falsch.
Behoben: VarSetCapacity ignoriert nun korrekt #MaxMem bei ByRef-Variablen.
Behoben: FileAppend,,Datei.txt
setzte ErrorLevel auch bei Erfolg auf 1.
Behoben: Übereinstimmungslänge wurde bei RegEx-Callouts mit der P)-Option falsch berechnet.
Geändert: Seans Verbesserungen bzgl. der Handhabung von Zahlen in die COM-Interoperabilität integriert.
Geändert: RegExReplace und RegExMatch in Unicode-Builds optimiert.
Hinzugefügt: ObjClone(Objekt)
(wurde bei der Implementierung von Objekt.Clone()
vergessen).
Hinzugefügt: Unterstützung für RegEx-Unicode-Eigenschaften in Unicode-Builds. Außerdem wurde PCRE auf 8.10 aktualisiert.
Hinzugefügt: Objekt.Remove(int, "")
entfernt Objekt[int]
, ohne andere Schlüssel zu beeinflussen.
Geändert: ComObj.xyz()
wird nun immer als Methodenaufruf behandelt.
Geändert: Var := 123
ist aus Konsistenzgründen nun immer ein Ausdruck. Dadurch wird sichergestellt, dass Var := 123
und Var := (123)
äquivalent sind. Vorher wurde mit der ersten Zuweisung nur eine Zeichenkette zugewiesen und mit der zweiten Zuweisung sowohl eine Zeichenkette als auch ein zwischengespeicherter binärer Integer zugewiesen. Insbesondere werden dadurch einige verwirrende Fehler durch Nichtübereinstimmung von Typen bei COM-Objekten verhindert.
Behoben: Dynamische variadische Aufrufe von Funktionen mit Pflichtparametern.
Behoben: Der letzte Parameter einer variadischen Assume-Global-Funktion musste explizit als lokal deklariert werden.
Behoben: Statische Initialisierungen störten das Setzen von Haltepunkten.
Behoben: Pointergrößenbezogene Fehler bei PCRE-Callouts in x64-Builds.
Behoben: Input mit der M-Option behandelte STRG+M (`r
) als STRG+J (`n
).
Behoben: Objekt.Remove(n)
gab 0 zurück (nicht ""), wenn Objekt[n]
nicht existierte.
Hinzugefügt: File.Encoding zum Ändern oder Abrufen der Codepage, die von einem File-Objekt verwendet wird.
Hinzugefügt: Variadische Funktionen und Funktionsaufrufe und indirekter Modus für Rückruffunktionen.
Hinzugefügt: Objekt.Clone()
Geändert: ByRef-Parameter erfordern nicht mehr, dass der Aufrufer eine Variable bereitstellt.
Geändert: Obj.foo := ""
gibt nun den Inhalt von foo wie erwartet frei (aber das Objektelement selbst kann damit nicht entfernt werden).
Geändert: OnMessage-Funktionen tolerieren nun optionale Parameter und ByRef-Parameter.
Geändert: RegisterCallback ermöglicht nun den Zugriff auf Rückrufe in 32-Bit-Builds (was in 64-Bit-Builds bereits möglich ist).
Geändert: RegisterCallback behandelt nun ein explizites ParamAnzahl="" als weggelassen.
Behoben: For-Schleife behandelte Nichtausdruck "0" als wahr für geskriptete Enumeratoren.
Behoben: ComEvent (ComObjConnect) funktionierte nicht im ANSI-Build.
Behoben: ComEvent (ComObjConnect) konnte lokale Variablen nicht korrekt zwischenspeichern/wiederherstellen, wenn eine bereits laufende Funktion erneut aufgerufen wird.
Behoben: Ein Pufferspeicherüberlauf in A_EndChar, der auftrat, wenn kein Endungszeichen vorhanden ist.
Behoben: Func->mNextFunc wurde nicht mit NULL initialisiert (wird nur von LowLevel-Skripten verwendet).
Debugger: Es wurde die Möglichkeit hinzugefügt, den Inhalt des Objekts abzurufen (mit einem Debugger-Client, der dies unterstützt).
Debugger: Es wurden einige Fehler behoben.
Behoben: #If Ausdruck sollte nun jeden Ausdruck höchstens einmal pro Tastendruck auswerten.
Geändert: SplashImage verwendet nun gängige Routinen zum Laden von Bildern; es unterstützt nun PNG und Ähnliches, aber die Ergebnisse können bei Symboldateien anders ausfallen als zuvor.
Hinzugefügt: For x,y in z
.
Hinzugefügt: Loop .. Until Ausdruck
, das für jede Art von Schleife verwendet werden kann.
Hinzugefügt: Benannte Schleifen; continue äußere_Schleife
, break 2
, usw.
Debugger: Kodiert stdout- und stderr-Pakete in UTF-8.
Debugger: Der Benutzer kann Abbrechen, Wiederholen oder Ignorieren, wenn die erste Verbindung fehlschlägt.
Debugger: Erlaubt das Verbinden eines Debugger-Clients mit dem Skript durch Senden einer registrierten Fenstermeldung.
Debugger: Ermöglicht die Trennung vom Debugger-Client durch Senden des DBGp-Befehls "detach".
Hinzugefügt: static Var := Ausdruck
.
Behoben: DllCall-Rückgabetypen Str*, WStr* und AStr* funktionieren nun wie erwartet unter x64.
Hinzugefügt: InStr wurde an StringGetPos angeglichen:
Hinzugefügt: #Include <BiblName>
zum expliziten Einbinden eines Skripts aus einem Funktionsbibliotheksordner.
Hinzugefügt: IniRead und IniWrite können jetzt eine komplette Sektion lesen bzw. schreiben.
Hinzugefügt: IniRead kann jetzt eine Liste mit Sektionsnamen abrufen.
Hinzugefügt: Ab sofort werden benutzerdefinierte Verben in Run/RunWait unterstützt: Run *Verb Datei
.
Geändert: Es wurden Verbesserungen hinsichtlich dessen gemacht, wie Run/RunWait die Aktion und ihre Parameter aus dem Ziel-Parameter extrahiert.
Geändert: Der Offset-Parameter von NumGet/NumPut kann weggelassen werden, da der Typ-Parameter immer nicht-numerisch sein muss.
Geändert: Ein Label kann nun auf das Ende eines Blocks zeigen.
Hinzugefügt: Ab sofort werden x64-kompilierte Skripte unterstützt. Benötigt Ahk2Exe_L und x64 AutoHotkeySC.bin.
Behoben: Der Deref-Operator (*addr
) lehnte Adressen außerhalb des 32-Bit-Bereichs ab.
Behoben: Ein Speicherreservierungsfehler bei #If Ausdruck
unter x64.
Behoben: Benutzerdefinierte Hotstring-Endungszeichen mit Codepunkten größer als U+00FF.
Behoben: SendInput/Play sendete Sonderzeichen in der falschen Reihenfolge.
Behoben: */
wurde in Fortsetzungsbereichen verworfen (siehe L54).
Behoben: GroupActivate setzte ErrorLevel nicht auf 1, wenn kein Label angegeben ist.
Behoben: Tab-Steuerelemente im x64-Build.
Behoben: Zeichenkettenkopiermodus von StrPut, wenn Länge weggelassen wird; fehlerhaft seit L53.
Behoben: Datenabgleichprobleme in x64-Builds.
Geändert: A_LastError wird bei mehr File*-Befehlen gesetzt, um das Debuggen zu unterstützen.
Dies gilt für FileAppend, FileRead, FileReadLine, FileDelete, FileCopy, FileMove, FileGetAttrib/Time/Size/Version und FileSetAttrib/Time.
Aber nicht für FileCopyDir, FileRecycle, FileMoveDir, FileRemoveDir, FileRecycleEmpty, FileCreateDir und FileInstall, weil die dafür verwendeten APIs nicht immer einen Win32-Fehlercode setzen oder zurückgeben.
Behoben: RunAs im Unicode-Build. [jackieku]
Behoben: RegisterCallback im x64-Build. [fincs]
Behoben: EXE-Dateien können nun in Windows 2000 und Windows XP vor SP2 ausgeführt werden. Windows 2000 benötigt SP4 und Updates (vermutlich KB 816542). XP wurde nicht getestet.
Behoben: Dialogfenster wie MsgBox reagierten nicht mehr, wenn sie von einem anderen Skript-Thread unterbrochen werden. Der in L45 hinzugefügte Meldungsfilter/Workaround musste entfernt werden.
Behoben: Multi-Byte-Zeichen in der Standard-ANSI-Codepage; dies verursachte auch ein Speicherleck.
Behoben: ComObject erlaubt nun rein numerische Namen für Eigenschaften/Methoden.
Geändert: Benutzerfreundlichkeit und Fähigkeiten von FileOpen/File-Objekten verbessert.
File := FileOpen(handle,"h")
wandelt ein existierendes Datei-Handle in ein verwendbares Objekt um.File.Seek(n)
verwendet standardmäßig SEEK_END, wenn n negativ ist.File.Pos
(oder File.Position
) kann anstelle von Tell und Seek verwendet werden.File.Pos
, File.Length
, File.AtEOF
und File.__Handle
können ohne leere runde Klammern()
verwendet werden.File.Length
kann gesetzt werden, wie in File.Length:=n
.File.ReadNum()
und File.WriteNum(n)
schreiben oder lesen eine Zahl, wobei Num der Name eines NumGet-kompatiblen Zahlentyps ist.File.WriteLine(s)
ist äquivalent zu File.Write(s "`n")
, um mit File.ReadLine()
gleichzuziehen.File.Read()
liest und gibt den Rest der Datei zurück, wenn keine Parameter verwendet werden.Geändert: Der Label-Parameter von GroupAdd gilt nun für die gesamte Gruppe. [Diskussion]
Geändert: GroupActivate setzt ErrorLevel bei Erfolg/Misserfolg. (Gleicher Thread wie oben)
Geändert: */
am Anfang einer Zeile wird ignoriert, wenn kein /*
vorhanden ist. [Diskussion]
Entfernt: Die Unterbefehle ToCodePage und FromCodePage von Transform.
AutoHotkey64 integriert - COM-Unterstützung und x64-Kompatibilität.
x64 (Änderungen seit AutoHotkey64):
COM (Änderungen seit AutoHotkey64):
Gängige Syntaxvalidierung für Enumeratoren implementiert. Enum[]
und Enum.Next()
können nun mit oder ohne Parameter verwendet werden. Enum[]:=Wert
und ähnliche obskure Formen, die in AutoHotkey_COM/AutoHotkey64 funktionierten, sind nicht mehr erlaubt.
Ptr-Typ bleibt vorzeichenfähig (im Gegensatz zu AutoHotkey64), für maximale Flexibilität und Konsistenz.
Sonstige Änderungen:
Hinzugefügt: Objekt.HasKey(Schlüssel)
.
Hinzugefügt: Object(obj)
erhöht die Referenzanzahl von obj um 1 und gibt dessen Adresse zurück.
Hinzugefügt: ObjAddRef()
und ObjRelease()
.
Behoben: A_ThisHotkey enthält nun den erwarteten Wert, wenn es mit #If verwendet wird.
Behoben: RunAs im Unicode-Build (von jackieku behoben).
Geändert: Standardcodepage des Skripts ist in ANSI-Builds nun CP0 (ANSI).
Geändert: x.y[]
ist nun äquivalent zu (x.y)[]
statt x["y"]
.
Geändert: Interne Methoden können nun mit oder ohne Unterstrich-Präfix aufgerufen werden (z.B. obj.MaxIndex()
oder obj._MaxIndex()
).
Hinzugefügt: Interne Variablen und Umgebungsvariablen können nun als Doppeldereferenzen (double-derefs) verwendet werden.
Geändert: Verbesserte Unterstützung für Multi-Byte-Zeichen in bestimmten Codepages (bisher wurden nur 932, 936, 949, 950 und 1361 unterstützt).
Behoben: StrPut schlug bei Codepages fehl, die WC_NO_BEST_FIT_CHARS nicht unterstützten, wie z.B. UTF-7.
Behoben: Doppeldereferenz (double-deref) als Objekt - text%var%.text
.
Behoben: StrPut("", Kodierung)
nullterminierte eine ungültige Adresse.
Behoben: Der Schlüssel-Parameter von ObjRemove ist nun optional, wie bereits bei Objekt._Remove.
Behoben: Dateien wurden beim Lesen nicht ordnungsgemäß gesperrt.
Behoben: Die Großschreibung von hexadezimalen Formaten führte dazu, dass negative Integer vorzeichenlos wurden.
Behoben: RegExMatch machte Ausgabe-Array-Elemente unbrauchbar, wenn bestimmte Bedingungen erfüllt sind. Siehe Bug Report.
Geändert: Es wird nun <EXENAME>.ahk statt AutoHotkey.ini oder AutoHotkey.ahk verwendet.
Geändert: Standardmäßig wird nun UTF-8 für Skriptdateien verwendet; kann mit /CPnnn überschrieben werden.
Behoben: Entpausieren, wenn das Skript beendet wird, damit __Delete-Metafunktionen ausgeführt werden können.
Verbessert: Mehr Flexibilität für Objekt._Insert.
Objekt._Insert(x)
- fügt x bei _MaxIndex()="" ? 1 : _MaxIndex() + 1
ein.Objekt._Insert(i,x,y,z)
- fügt x,y,z
bei i,i+1,i+2
ein.Verbessert: Mehr Flexibilität für Objekt._Remove.
Objekt._Remove(k)
- entfernt den mit k verbundenen Wert und gibt diesen zurück.Objekt._Remove()
- entfernt den Wert von _MaxIndex() und gibt diesen zurück.Hinzugefügt: Freigabemodusflags für FileOpen [von jackieku].
Behoben: P-Option von RegExMatch gab bei Teilsuchmustern, die mit nichts übereinstimmten, fälschlicherweise 1 zurück.
Behoben: Objekt._SetCapacity(Schlüssel,n)
nullterminierte in einigen Fällen nicht.
Behoben: StatusBarGetText gab in Unicode-Builds nur die Hälfte des Textes zurück.
Hinzugefügt: obj._NewEnum().
Hinzugefügt: ObjMethod(obj) für jede interne obj._Methode()
.
Geändert: ObjSet/Get/Call kann nicht länger vom Skript aufgerufen/überschrieben werden.
Behoben: Die in L48 hinzugefügte VK_PACKET-Überprüfung konnte das Skript zum Absturz bringen.
Behoben: Zeichencodes in VK_PACKET-Ereignissen wurden manchmal fälschlicherweise als Scancodes interpretiert.
Behoben: Der AusnahmeText-Parameter wurde nach dem ersten gefundenen Steuerelement unwirksam.
Behoben: Alleinstehendes obj.()
wurde nicht als gültiger Ausdruck erkannt.
Geändert: ControlSend verwendet nun WM_CHAR, um Zeichen zu unterstützen, die keinen zugehörigen Tastencode haben. Dies gilt zum Beispiel für "…" (en-US), "∞" in einem Unicode-Build und {U+221e}
in beiden Builds.
Geändert: KeyHistory zeigt nun den kompletten 16-Bit-Zeichencode für VK_PACKET-Ereignisse (VK=E7) an. Send kann indirekt dazu führen, dass diese für Unicode-Zeichen erzeugt werden.
Behoben (Unicode): ControlGet List in Verbindung mit ListView-Steuerelementen.
Hinzugefügt: A_FileEncoding zum Abrufen der aktuellen Standardkodierung einer Datei.
Hinzugefügt: StrPut (zusätzlich wurde StrGet um einige Features erweitert).
Hinzugefügt: _GetAddress; _SetCapacity/_GetCapacity kann nun auf ein bestimmtes Objektelement angewendet werden. [mehr Infos]
Hinzugefügt: Workaround für WM_PAINT-Endlosschleifen, die häufig durch Subclassing verursacht wurden.
Geändert: obj.()
kann verwendet werden, um die Standardmethode eines Objekts aufzurufen; äquivalent zu obj[""]()
.
Entwickler: Solution- und Project-Dateien für MSBuild 4.0 & VS2010 hinzugefügt. [mehr Infos]
Behoben (Unicode): 'Running'-Spalte in ListHotkeys.
Behoben: Der Versuch, "nichts" zu setzen, führte zum Absturz des Skripts. Zum Beispiel x[]:=z
.
Behoben (Unicode): Standardskript konnte nicht gefunden werden (Documents\AutoHotkey.ahk).
Behoben (Unicode): A_Desktop, A_ProgramFiles und einige andere interne Variablen, die ihren Wert aus der Registry lesen, terminierten Zeichenketten fehlerhaft.
Behoben (ANSI): Zeichen im Bereich von 0x80 bis 0xFF konnten nicht von InStr oder StringReplace gefunden werden.
Geändert (ANSI): ToCodePage/FromCodePage werden wie andere nicht unterstützte/ungültige Unterbefehle behandelt.
Behoben: obj.Func() gab nicht wie eigentlich vorgesehen eine leere Zeichenkette, sondern einen willkürlichen Integer zurück.
AutoHotkeyU integriert.
Zahlreiche Fehlerbehebungen und Verbesserungen, teilweise im Zusammenhang mit der Integration.
Behoben: Floating-Point-Zahlen entsprachen einer leeren Zeichenkette, wenn sie als Schlüssel in Objekten verwendet werden. Sie werden nun wie vorgesehen in numerische Zeichenketten umgewandelt, abhängig vom Float-Format.
Geändert: Erhöhte Flexibilität für Metafunktionen und Multi-Parameter-Verhalten. Metafunktionen werden nun indirekt aufgerufen, *bevor* nach einem geeigneten Objektelement in jedem Basisobjekt gesucht wird; Werte in x.base überschreiben jedoch die in x.base.base definierten Metafunktionen. Metafunktionen können nun durch Vermeidung von "Return" verkettet werden (Vererbung).
Geändert: Standard-Base-Funktionalität wurde verbessert, um eine höhere Konsistenz mit realen Objekten zu gewährleisten.
Geändert (Debugger): Während der Code schrittweise durchlaufen wird, werden alle geschweiften Klammern, außer solche, die eine Funktion beenden, übersprungen.
Geändert (Debugger): Wenn das versteckte "Exit" am Ende des Skripts erreicht wird, sollte es so behandelt werden, dass es *unterhalb* der letzten physischen Zeile ist, um Verwirrung zu vermeiden.
Behoben (Debugger): Fehler in der von property_set verwendeten Base64-Dekodierung.
Hinzugefügt: #MenuMaskKey-Direktive zum Ändern der Taste, mit der Taste-Oben-Ereignisse von WIN oder ALT maskiert werden. Weitere Hintergrundinformationen finden Sie in diesem Thread.
Geändert: Wenn x[1,2]:=3
ein Objekt für x[1]
erstellt, wird dessen Basis nicht länger automatisch auf x.base
gesetzt. In der Dokumentation finden Sie eine Methode, wie dieses Verhalten kontrolliert werden kann.
Hinzugefügt: Unterstützung für die Objektaufrufsyntax Obj[MethodeName](Parameter)
.
Geändert: Wenn unmittelbar nach x.y
oder Ähnliches eine eckige Startklammer ([
) erfolgt, wird der Identifikator ganz rechts vor der Klammer als erster Parameter der Operation behandelt. Zum Beispiel ist a.b.c[d]
äquivalent zu ObjGet(a.b,"c",d)
und x.y[z]:=v
äquivalent zu ObjSet(x,"y",z,v)
. Bisher wurde jeder Teilausdruck vor einer eckigen Klammer separat ausgewertet.
Geändert: Wenn unmittelbar nach einem Methodenaufruf wie x.y()
eine Zuweisung erfolgt, werden die runden Klammern wie eckige Klammern behandelt. Zum Beispiel ist x.y(z):=v
nun äquivalent zu ObjSet(x,"y",z,v)
.
Behoben: If(Ausdruck) und While(Ausdruck) ohne trennendes Leerzeichen oder Komma.
Behoben: Alleinstehende Ausdrücke, die mit zwei oder mehr "Punkten" beginnen, wie z.B. x.y.z()
. (fehlerhaft seit L34). Beachten Sie, dass '(' oder '[' oder ':=' weiterhin erforderlich ist.
Geändert: Das Setzen einer leeren Zeichenkette innerhalb eines Objekts speichert nun die leere Zeichenkette, anstatt das Schlüssel-Wert-Paar aus dem Objekt zu entfernen. Verwenden Sie stattdessen _Remove, um Schlüssel-Wert-Paare vollständig zu entfernen.
Geändert: Befehlsnamen müssen mit einem Leerzeichen, Tabulatorzeichen oder Komma terminiert werden. Die folgenden Zeichen umgehen nicht länger diese Anforderung: <>:+-*/!~&|^[]
. Zum Beispiel werden nun Syntaxfehler wie MsgBox< foo
und If!foo
beim Laden des Skripts abgefangen.
Behoben: Return kann nun korrekt mit Ausdrücken umgehen, die zu einer Variable, in der sich ein Objekt befindet, ausgewertet werden. Zum Beispiel sollten return x:=y
, return (x)
, return x,...
und Ähnliches nun wie vorgesehen funktionieren (return x
hat bereits funktioniert).
Behoben: Multiparameter get/set unterstützte Metafunktionen für mehrere Objekte nicht korrekt (wie z.B. für x
und x[y]
im Ausdruck x[y,z]
).
Behoben: Verkettende Objektzuweisungen, wie z.B. das x[y]:=z
in r:=x[y]:=z
, konnten keine Zahlen oder Objekte als Ergebnis liefern - fehlerhaft seit L33.
Behoben: x._Remove(y)
brachte das Skript zum Absturz oder entfernte das falsche Element, wenn y
nicht in x
enthalten ist.
Behoben: x.=y
, if x.y=...
und Ähnliches. Betrifft vermutlich auch andere Ausdrücke.
Behoben: Alleinstehende ternäre Ausdrücke benötigen keine Leerzeichen mehr. Zum Beispiel ist jetzt x? F(1) : F(2)
möglich.
Debugger: Bei Beendigung des Skripts wird der Debugger erst *nach* dem Freigeben von Objekten getrennt, damit die __Delete-Handler debuggt werden können.
Behoben: Lokale Variablen wurden nicht automatisch für Funktionen freigegeben, die Objekte oder reine Zahlen zurückgeben.
Behoben: Zwei separate Referenzzählungsfehler in Bezug auf dem ternären Operator und Object().
Behoben: Die Länge einer Variable wird nicht mehr falsch gesetzt, wenn ihr eine Zeichenkette zugewiesen wird, die von einer geskripteten Objektfunktion zurückgegeben wurde.
Behoben: Wenn die letzte Operation in einem Ausdruck eine Zeichenkette aus einem temporären Objekt abgerufen hat, wurden das Objekt und die Zeichenkette vorzeitig freigegeben.
Behoben: Numerische Zeichenketten mit spezieller Formatierung wurden nicht beibehalten, wenn sie von einer Funktion via Variable zurückgegeben oder an einer rekursiven Funktion übergeben werden.
Behoben: Wenn das Endergebnis eines Ausdrucks (außer bei Return) ein Objekt ist, wird nun korrekt eine leere Zeichenkette zurückgegeben, anstatt den Thread stillschweigend abzubrechen.
Behoben: __Delete-Metafunktionen überschrieben manchmal temporäre Werte im Deref-Pufferspeicher.
Hinzugefügt: Eine via &Objekt abgerufene Adresse kann mithilfe von Object(Adresse) in eine Objektreferenz zurückverwandelt werden.
Behoben: Send/PostMessage-Absturz, wenn weniger als drei Parameter angegeben sind.
Hinzugefügt: Objekt/Array-Unterstützung und darauf bezogene zahlreiche kleinere Änderungen.
Hinzugefügt: While(Ausdruck) kann ohne trennendes Leerzeichen verwendet werden.
Hinzugefügt: Trim, LTrim, RTrim.
Hinzugefügt: A ~= B; äquivalent zu RegExMatch(A, B). Wird eventuell in einer zukünftigen Version entfernt.
Behoben: Eine Inkompatibilität mit LowLevel.
Geändert: Die Zeichen [, ] und ? sind in Variablennamen nicht mehr zulässig. Folglich benötigt ? (ternär) auf beiden Seiten kein Leerzeichen mehr.
Geändert: Optionale Parameter können nun an beliebiger Position in der Parameterliste eines nicht-dynamischen Funktionsaufrufs weggelassen werden. Um das zu realisieren, wird der Standardwert eines Parameters bereits beim Laden des Skripts automatisch eingefügt, infolgedessen ist diese Vorgehensweise für dynamische Funktionsaufrufe nicht erlaubt bzw. möglich.
Debugger: Verschiedene kleinere Änderungen, um den Programmablauf beim schrittweisen Durchlaufen des Codes besser nachvollziehen zu können.
Optimierung: Wenn der erste Parameter von DllCall eine direkt geschriebene Zeichenkette ist, die eine bereits im Speicher vorhandene Funktion identifiziert, wird sie mit der aktuellen Adresse der Funktion ersetzt.
Von v1.0.48.03 auf v1.0.48.04 aktualisiert.
Von v1.0.48.02 auf v1.0.48.03 aktualisiert.
Jedes unterstützte Bildformat kann jetzt als Menüsymbol verwendet werden. Derzeit ist es notwendig, die "tatsächliche Größe" beim Setzen des Symbols anzugeben, wenn in Windows Vista oder höher dessen Transparenz erhalten bleiben soll. Zum Beispiel:
Menu, Icon, MenüpunktName, Dateiname.png,, 0
Die Average-Case-Performance von dynamischen Funktionsaufrufen wurde durch die Implementierung einer binären Suche nach Funktionsnamen verbessert. Diese Änderung betrifft auch andere Bereiche, wie z.B. die Ladezeitauflösung von Funktionsreferenzen in Ausdrücken und die Laufzeitauflösung über OnMessage(), RegisterCallback(), etc.
Von v1.0.48.00 auf v1.0.48.02 aktualisiert.
Behoben: Menüsymbole wurden nicht auf Menüpunkten mit Untermenüs gezeichnet, wenn Owner-Drawing verwendet wird.
Behoben: Menüsymbole wurden nicht freigegeben, wenn alle Menüpunkte auf einmal gelöscht wurden.
Geändert (Source): AutoHotkey.sln in AutoHotkey_L.sln umbenannt, damit das VS-Fenster leichter identifiziert werden kann.
Behoben: Send {U+xxxx} setzt nun korrekt den Modifikatorstatus wie bei einer normalen Taste.
Behoben: Send {U+..xx} löst keinen SCxx-Hotkey mehr aus.
Hinzugefügt: Unterstützung für Send {U+xxxx}. Für eine ordnungsgemäße Unicode-Unterstützung wird SendInput() verwendet, sofern möglich, andernfalls fällt es auf die ALT+Ziffernblock-Methode zurück.
Behoben: GuiControl Enable/Disable setzt nun den Fokus nur zurück, wenn das fokussierte Steuerelement deaktiviert ist.
Geändert: If var [not] in/contains VergleichListe wurde optimiert, insbesondere für lange Listen mit kürzeren Feldern.
Kleinere Optimierungen für While. [danke Chris]
Behoben (Debugger): Revisionen 19 und 20 hatten Timer-Threads in der Aufrufliste weggelassen.
Behoben (Debugger): XML-reservierte Zeichen wurden so gut wie nie mit einem Escapezeichen versehen.
Behoben (Debugger): Falscher Befehl und transaction_id wurden in der letzten Antwort verwendet, bevor das Skript beendet wurde.
Geändert: Wenn ein Symbol nicht mit der neuen Methode geladen werden kann, fällt es auf die alte Methode zurück.
Hinzugefügt: Neue Option "Gui, Font, qN" (wobei N eine Zahl im Bereich von 0 bis 5 ist) zum Ändern der Schriftqualität bzw. Einstellen der Kantenglättung.
Behoben: IL_Add lädt nun Symbole in der am besten geeigneten Größe, wenn mehrere Größen vorhanden sind.
AutoHotkey v1.0.48 integriert, das Fehlerbehebungen, Optimierungen und andere Änderungen von Chris enthält. Einige AutoHotkey_L-Features wurden in die Hauptversion integriert; folgende Änderungen wurden an diesen Features seit den vorherigen Revisionen vorgenommen:
Behoben: Aufgrund einer unvollständigen Fehlerbehebung in der vorherigen Revision bewirkte eine Verkettung gefolgt von einer Zuweisung in einigen Fällen, dass der Rest des Ausdrucks übersprungen wurde.
Hinzugefügt: Menüsymbole können jetzt mit dem Icon- oder NoIcon-Unterbefehl des Menu-Befehls hinzugefügt bzw. entfernt werden.
Geändert: Negative Symbolnummern können nun zur Kennzeichnung einer Ressourcen-ID innerhalb einer EXE-Datei verwendet werden.
Geändert: MNS_CHECKORBMP als Standard-Style für Menüs hinzugefügt.
Geändert: Es wird nun sowohl die kleine als auch große Version eines benutzerdefinierten Tray-Symbols geladen, um sicherzustellen, dass das richtige Symbol an der richtigen Stelle angezeigt wird.
Behoben: Symbole, die eine andere Größe als die üblichen Systemgrößen Klein/Groß haben, werden nun korrekt aus EXE-Dateien geladen.
Behoben: Beim Löschen eines Menüpunkts wurde teilweise auch das zugehörige Untermenü gelöscht.
Behoben: Wenn man SetFormat in einem *kompilierten* Skript verwendet, wurde der Binärzahl-Schreibcache nicht deaktiviert. SetFormat sollte nun ordnungsgemäß in kompilierten Skripten funktionieren.
Zahlreiche Fehlerbehebungen und Optimierungen von Chris (pre-v1.0.48 beta).
Hinzugefügt: Unterstützung für RegEx-Callouts und die Auto-Callout-Option 'C'.
Geändert: A_AhkVersion enthält nun die Revisionsnummer. Zum Beispiel 1.0.47.07.L14.
Behoben: HWNDs/Fenster-IDs wurden via Vorzeichenerweiterung auf 64-Bit erweitert. Zum Beispiel wurde 0xb482057e zu 0xffffffffb482057e.
Behoben: Ungültige DllCall-Typen wurden in einigen Build-Umgebungen als INT behandelt.
Hinzugefügt: Workaround für das GuiEscape-Problem beim Deaktivieren des fokussierten Steuerelements.
Geänderte Versionsinformation: InternalName, ProductName und FileDescription sind nun "AutoHotkey_L" statt "AutoHotkey".
Behoben: Mögliche Zugriffsverletzung, wenn property_get auf eine interne Variable angewendet wird. -- DBGP
Behoben: Prüfsumme wird aus AutoHotkeySC.bin via Post-Build-Skript entfernt (AutoHotkey muss installiert sein).
Hinzugefügt: .L-Suffix in A_AhkVersion.
Hinzugefügt: Vorläufige Unterstützung für DBGp (interaktives Debuggen).
Behoben: Die seit Revision 9 fehlerhafte Unterstützung für WheelLeft/WheelRight wurde wiederhergestellt.
Behoben: Break/Continue kann nun auch in While verwendet werden.
Behoben: TrayTip in nicht-englischen Windows-Versionen und möglicherweise andere Nebeneffekte bei Verwendung von Vista-Headern.
Hinzugefügt: #IfTimeout-Direktive zum Limitieren der Auswertungszeit von #If-Ausdrücken (in Millisekunden). 1000 ist Standard.
Hinzugefügt: Assume-Static-Modus für Funktionen. "Static" muss vor jeder lokalen/globalen Variablendeklaration erfolgen.
Hinzugefügt: One-True-Brace-Unterstützung für While.
Geändert: While setzt nun A_Index auf die gleich zu startende Wiederholung.
Hinzugefügt: IsFunc(FunkName) - Gibt eine Zahl ungleich 0 zurück, wenn FunkName im Skript oder als interne Funktion existiert.
Veraltete Referenzen zu Test-Skripten entfernt.
Einfaches Standard-Testskript hinzugefügt.
Hinzugefügt: #if (Ausdruck) - Vergleichbar mit #IfWinActive, aber für beliebige Ausdrücke.
Hinzugefügt: WheelLeft, WheelRight - Unterstützung für WM_MOUSEHWHEEL, eingeführt mit Windows Vista. (Benötigt Vista).
Hinzugefügt: While, Ausdruck - Anweisungen wiederholen, während eine Bedingung wahr ist.
Hinzugefügt: A_IsPaused - Wahr, wenn der darunter liegende Thread pausiert ist.
Hinzugefügt: A_IsCritical - Wahr, wenn der aktuelle Thread durch den Critical-Befehl als unterbrechungsfrei markiert ist.
Geändert: Es können bei dynamischen Funktionsaufrufen beliebig viele Parameter übergeben werden.
Behoben: Eine Zugriffsverletzung, die durch WinGetClass und unterklassifizierte Fenster hervorgerufen wurde.
Behoben: Eine Zugriffsverletzung, die durch leere dynamische Funktionsreferenzen hervorgerufen wurde.