From e54e2bd1c21805e651e46189eb7e3d0e0c6c2862 Mon Sep 17 00:00:00 2001
From: Ragnar-F Ältere Änderungen können in Archivierte Änderungen gefunden werden. Der Versuch, eine leere Variable oder einen Ausdruck, der zu einem leeren Wert führt, an SetTimer's Label-Parameter zu übergeben, wird absofort als Fehler eingestuft. Dieser Parameter darf weder leer sein noch fehlen. 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 länger benötigt wird, aber das bedeutet auch, dass die Periode und Priorität des Timers verworfen werden. SetTimer, Hotkey, GuiControl und Menu überprüfen nun die minimale Parameteranzahl von Funktionen, die via Verweis ü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). Wenn SetTimer's Label-Parameter fehlt und A_ThisLabel leer ist, wird der aktuelle Timer (sofern vorhanden) verwendet. Hinzugefügt: Neue Tab-Steuerelementart Tab3, das viele Probleme löst, die bei den anderen Tab-Steuerelementarten vorkommen. Behoben: GuiControl aktualisiert nun Steuerelemente beim Hinzufügen/Löschen von Tabs. Im Einzelnen: Behoben: Behoben: Deaktivierte Tab-Steuerelemente ignorieren absofort STRG+TAB. Behoben: Behoben: Behoben: Behoben: Behoben: InputBox, MsgBox, FileSelectFile und FileSelectFolder sendeten ein ungewolltes ALT-UP, wenn ALT unten war. Der Grund war ein Fehler mit dem STRG/UMSCHALT-Workaround in v1.1.22.01. Verbessert: Der STRG/UMSCHALT-Workaround "maskiert" nicht länger unnötigerweise die WIN-Taste, wenn STRG, UMSCHALT oder ALT unten ist. Eine deutsche Übersetzung von https://autohotkey.com/docs/ (siehe hier für mehr Details). ©2003-2014 Chris Mallett, und zum Teil ©AutoIt-Team und die AHK-Community Software-Lizenz: GNU General Public LicenseÄnderungen und neue Features
1.1.24.00 - 22. Mai 2016
+Gravierende Änderungen:
+Abwärtskompatible Änderungen:
+Neue Features:
+Fehlerbehebungen:
+
+
+||
funktioniert nun korrekt.+Disabled
/+Hidden
verloren ihren Effekt bei Steuerelementen in einem Tab.Gui Tab
ohne Parameter beginnt nun eine neue Radiogruppe, falls zutreffend. Gui Tab
mit Parametern hatte bereits diesen Effekt.1.1.23.07 - 20. Mai 2016
+Menu x, Insert, y, z, % Objekt
verwendet nun das Objekt, anstatt es zu ignorieren.Menu x, Add, :item text, % Objekt
verwendet nun das Objekt, anstatt nach einem Untermenü zu suchen.1.1.23.06 - 15. Mai 2016
+break label
ließ das Programm abstürzen, wenn diese Anweisung direkt in ihrer Zielschleife verschachtelt wurde.1.1.23.05 - 27. März 2016
Version v1.1.23.05
+Version v1.1.24.00
Sprachsyntax
Allgemeine Problembehandlung
+
Wann sollten Prozentzeichen und Kommas mit einem Ausdrucks in Anführungszeichen gesetzt, ist das umgekehrte Häkchen zulässig, aber nicht notwendig. Zum Beispiel:
Var := "15%"
.
7-Zip-Fehler: Verwende 7-Zip oder ein kompatibles Programm, um die Setup-Dateien aus der Installer-EXE zu extrahieren und starte dann setup.exe oder Installer.ahk (zieh Installer.ahk mit gedrückter Maustaste auf AutoHotkeyU32.exe und lass los).
+Der AutoHotkey-Installer ist ein selbstextrahierendes 7-Zip-Archiv, das versuchen wird, die Dateien in den temporären Benutzerverzeichnis zu entpacken und ein kompiliertes Skript zu starten. Manchmal kann es vorkommen, dass die Dateien aufgrund von Systemrichtlinien oder andere Faktoren nicht extrahiert oder ausgeführt werden dürfen. In solchen Fällen wird üblicherweise ein "7-Zip-Fehler" angezeigt. Die Dateien manuell in ein anderes Verzeichnis zu extrahieren könnte helfen.
+Setup hängt: Erscheint das Setup-Fenster ohne Inhalt oder überhaupt nicht, kannst du eine oder beide folgende Methoden ausprobieren:
+setup.exe /S
oder AutoHotkeyU32.exe Installer.ahk /S
verwenden.Sonstiges: Die obigen Vorschläge decken die häufigsten Probleme. Weitere Unterstützung findest du im Forum.
+Jede Zeile, die unmittelbar beim Starten des Skripts ausgeführt werden soll, muss ganz oben im Skript vorkommen und vor dem ersten Hotkey, Hotstring oder Return stehen. Siehe automatischer Ausführungsbereich für weitere Details.
Bei einem Hotkey, der mehr als eine Zeile ausführt, muss seine erste Zeile unterhalb des Hotkeys geschrieben werden, nicht auf der gleichen Zeile. Zum Beispiel:
diff --git a/KeyList.htm b/KeyList.htm index 9a33a787..77e51d8a 100644 --- a/KeyList.htm +++ b/KeyList.htm @@ -536,7 +536,7 @@Rekonfiguriere die Software deiner Maus oder Tastatur (in der Regel über die Systemsteuerung oder das Startmenü erreichbar), so dass die "Geheimtaste" eine andere Tastatureingabe sendet. So eine Tastatureingabe könnte dann in einem Skript als Hotkey definiert werden. Bringst du beispielsweise eine Geheimtaste dazu, STRG+F1 zu senden, könntest du diese Taste indirekt zu einem Hotkey machen, wenn du ^F1::
in einem Skript verwendest.
Probiere DllCall: Unterstützung für Eingabegeräte (HID). Du kannst außerdem versuchen, im Forum nach Schlüsselwörtern wie RawInput* zu suchen.
+Probiere AHKHID aus. Du kannst außerdem versuchen, im Forum nach Schlüsselwörtern wie RawInput*
, USB HID
oder AHKHID
zu suchen.
Die letzte Möglichkeit sollte nur in Angriff genommen werden, wenn alle anderen Versuche fehlschlagen, weil die Erfolgschance gering ist und Nebeneffekte auftreten können, die man nur schwer wieder rückgängig machen kann:
diff --git a/commands/GuiControls.htm b/commands/GuiControls.htm
index 00032b3a..eaf65df8 100644
--- a/commands/GuiControls.htm
+++ b/commands/GuiControls.htm
@@ -20,7 +20,7 @@
Gui, Add, GroupBox, w400 h300, Geographische Kriterien
Standardmäßig kann der Titel einer GroupBox nur einzeilig sein. Das kann durch die Angabe von Wrap
in den Optionen des Steuerelements überschrieben werden.
Um die Anzahl der Zeilen innerhalb des Steuerelements zu bestimmen (oder dessen Höhe und Breite), siehe Position und Größe von Steuerelementen anpassen.
-Beschreibung: Ein großes Steuerelement mit mehreren Seiten, von denen jede weitere Steuerelemente enthalten kann. Von nun an werden diese Seiten "Tabs" genannt.
-Tab2 vs. Tab: Seit v1.0.47.05 gibt es das Tab2-Steuerelement, das im originalen Tab-Steuerelement seltene Probleme beim Neuzeichnen behebt (z. B. beim Aktivieren eines GUI-Fensters durch Anklicken bestimmter Bereiche in Steuerelementen wie Scrollleisten). Das ursprüngliche Tab-Steuerelement wird aufgrund der Abwärtskompatibilität beibehalten, weil Tab2 das Tab-Steuerelement erst einfügen wird, wenn es Steuerelemente in Navigationsreihenfolge der TAB-Taste enthält. Neue Skripte sollten wenn möglich immer Tab2 verwenden. Beispiel:
-Gui, Add, Tab2,, Allgemein|Ansicht|Darstellung|Einstellungen+
Es gibt drei Arten des Tab-Steuerelements:
+Beispiel:
+Gui, Add, Tab3,, Allgemein|Ansicht|Darstellung|Einstellungen
Im oberen Beispiel enthält der letzte Parameter eine mit senkrechten Strichen getrennte Liste von Tabnamen. Wenn einer der Tabs zu Beginn vorab ausgewählt sein soll, müssen nach diesem Tab zwei senkrechte Striche erfolgen (z. B. Rot|Grün||Blau
). Alternativ kann man auch das Wort Choose in Optionen angeben, unmittelbar gefolgt von der Nummer des Elements, um es vorab auszuwählen. Zum Beispiel würde Choose5
den fünften Tab vorab auswählen (wie bei den anderen Optionen auch, kann das eine Variable sein, wie z. B. Choose%Var%
). Mit GuiControl kann der ausgewählte Tab geändert, Tabs hinzugefügt oder Tabs entfernt werden, nachdem das Steuerelement erstellt worden ist.
Nach dem Erstellen eines Tab-Steuerelements gehören Steuerelemente, die danach erfolgen, automatisch dem ersten Tab. Das kann jederzeit wie folgt geändert werden:
Gui, Tab ; Zukünftige Steuerelemente sind nicht Teil des Tab-Steuerelements. @@ -314,11 +321,37 @@GroupBox
Gui, Tab, Name,, Exact ; Das gleiche wie oben, aber mit exakter Übereinstimmung (mit Groß/Klein-Unterscheidung).
Es ist auch möglich, irgendeins der obigen Beispielen zu verwenden, um Steuerelemente einem Tab oder Tab-Steuerelement zuzuweisen, das noch nicht vorhanden ist (außer bei der Name-Methode). In diesem Fall aber werden die unten beschriebenen Optionen zur relativen Positionierung nicht unterstützt.
Positionierung: Bei jedem Tab oder Tab-Steuerelement, das sein erstes Untersteuerelement erhält, wird dieses Untersteuerelement eine spezielle Standardposition unter Berücksichtigung folgender Bedingungen haben: 1) Fehlt sowohl die X- als auch Y-Koordinate, wird das erste Untersteuerelement auf die obere linke Ecke des Tab-Steuerelements positioniert (mit einem Standard-Abstand). Die restlichen Untersteuerelemente werden jeweils unter dem vorherigen Steuerelement positioniert; 2) Sind die Positionierungsoptionen X+n und/oder Y+n angegeben, wird das Untersteuerelement relativ zur linken oberen Ecke des Innenbereichs vom Tab-Steuerelement positioniert. Zum Beispiel würde die Angabe von x+10 y+10
bewirken, dass das Steuerelement 10 Pixel nach rechts und 10 Pixel nach unten von der linken oberen Ecke positioniert wird.
Untersteuerelemente müssen nicht unbedingt innerhalb der Grenzen des Tab-Steuerelements vorkommen: Sie werden weiterhin immer dann versteckt und sichtbar gemacht, wenn deren Tab ausgewählt oder abgewählt wird. Dieses Verhalten ist besonders für den unten beschriebenen Buttons-Style geeignet.
Wenn man den Befehl Gui Submit verwendet, wird in die zugeordnete Ausgabevariable des Steuerelements (falls vorhanden) der Name des aktuell ausgewählten Tabs gespeichert. Hat das Steuerelement jedoch die AltSubmit-Eigenschaft, wird in die Ausgabevariable stattdessen die Positionsnummer des Tabs (der erste Tab ist 1, der zweite ist 2 und so weiter) gespeichert.
Ein g-Label wie gMeineSubroutine
kann in den Optionen des Steuerelements eingefügt werden. Diese Option lässt das Label MeineSubroutine immer dann starten, wenn der Benutzer auf einen anderen Tab wechselt. Hat das Tab-Steuerelement sowohl ein g-Label als auch eine Ausgabevariable, wird die Ausgabevariable beim Wechseln des Tabs auf den zuvor ausgewählten Tabnamen gesetzt (oder bei AltSubmit auf die Nummer).
Navigation mit der Tastatur: Der Benutzer kann mit STRG+BILD-AUF oder mit STRG+BILD-AB zwischen den Tabs wechseln. Befindet sich der Tastaturfokus auf einem Steuerelement, das nicht zum Tab-Steuerelement gehört, wird das erste Tab-Steuerelement des Fensters angesteuert. STRG+TAB und STRG+UMSCHALT+TAB können auch verwendet werden, aber mit der Ausnahme, dass sie nicht funktionieren, wenn das aktuell fokussierte Steuerelement ein mehrzeiliges Eingabefeld ist.
Jedes Fenster kann nicht mehr als 255 Tab-Steuerelemente enthalten. Jedes Tab-Steuerelement kann nicht mehr als 256 Tabs (Seiten) haben. Darüber hinaus ist es nicht möglich, dass ein Tab-Steuerelement weitere Tab-Steuerelemente enthalten kann.
+ +Übergeordnetes Fenster: Das übergeordnete Fenster eines Steuerelements hat sowohl Einfluss auf die Positionierung und Sichtbarkeit des Steuerelements als auch auf die Navigationsreihenfolge via TAB-Taste. Ein Untersteuerelement innerhalb eines vorhandenen Tab3-Steuerelements verwendet als übergeordnetes Fenster das sogenannte "Tab-Dialogfenster", welches den Anzeigebereich des Tab-Steuerelements ausfüllt. Alle anderen Steuerelemente, einschließlich der Untersteuerelemente von Tab oder Tab2, verwenden als übergeordnetes Fenster nur das GUI-Fenster selbst.
+Positionierung: Untersteuerelemente von Tab und Tab2 sind nicht unbedingt an den Grenzen des Tab-Steuerelements gebunden: Sie werden weiterhin immer dann versteckt und sichtbar gemacht, wenn deren Tab ausgewählt oder abgewählt wird. Dieses Verhalten ist besonders für den unten beschriebenen Buttons-Style geeignet.
+Wenn man ein Untersteuerelement einem Tab3-Steuerelement zuweist, bevor das Tab3-Steuerelement erstellt wird, dann verhält sich das Untersteuerelement so, als hätte man es in ein Tab- oder Tab2-Steuerelement eingefügt. Alle anderen Untersteuerelemente sind nur innerhalb des Anzeigebereichs des Tab-Steuerelements sichtbar.
+Beim Verschieben eines Tab3-Steuerelements werden auch seine Untersteuerelemente verschoben. Dieses Verhalten trifft nicht auf Tab- und Tab2-Steuerelemente zu.
+Wenn man im seltenen Fall ein Steuerelement via WinMove (oder gleichwertigem DllCall-Aufruf) verschiebt, müssen die Koordinaten relativ zum übergeordneten Fenster des Steuerelements sein, welches nicht unbedingt das GUI sein muss (siehe oben). GuiControl Move hingegen nimmt immer GUI-Koordinaten und ControlMove immer die Fensterkoordinaten, unabhängig vom übergeordneten Fenster des Steuerelements.
+Navigationsreihenfolge via TAB-Taste: Die Reihenfolge der hinzugefügten Steuerelemente bestimmt die Reihenfolge der Navigation via TAB-Taste. Bei Tab-Steuerelementen ist die Reihenfolge zusätzlich abhängig davon, welche Art von Tab-Steuerelement verwendet wird:
+Benachrichtigungen (Tab3): Gewöhnliche und benutzerdefinierte Steuerelemente senden Benachrichtigungen in der Regel an ihre übergeordneten Fenster. WM_COMMAND, WM_NOTIFY, WM_VSCROLL, WM_HSCROLL oder WM_CTLCOLOR-Benachrichtigungen, die an das Tab-Dialogfenster eines Tab3-Steuerelements gesendet werden, werden an das GUI-Fenster weitergeleitet und können via OnMessage abgefangen werden. Wenn das Tab-Steuerelement das aktuelle Windows-Design verwendet und wenn die Option +BackgroundTrans fehlt, wird WM_CTLCOLORSTATIC vollkommen vom Tab-Dialogfenster berücksichtigt und nicht weitergeleitet. Andere Benachrichtigungen (z. B. benutzerdefinierte Benachrichtigungen) werden nicht unterstützt.
+Bekannte Probleme mit Tab2:
+Bekannte Probleme mit Tab:
+Choose: Siehe oben.
-Background: Überschreibt die benutzerdefinierte Hintergrundfarbe des Fensters und verwendet die Standardfarbe des Tab-Steuerelements vom Betriebssystem. Verwende +Theme -Background
, um das Tab-Steuerelement an das aktuelle Desktop-Theme anzupassen. Allerdings werden dadurch die meisten Steuerelementarten im Tab-Steuerlement merkwürdig dargestellt, weil deren Hintergründe nicht mit dem Hintergrund des Tab-Steuerelements übereinstimmen. Bei einigen Steuerelementarten (wie Text) kann das Problem behoben werden, wenn BackgroundTrans in deren Optionen eingefügt wird.
Ist Startposition nicht vorhanden, gilt standardmäßig 1 (der Anfang von Heuhaufen). Ansonsten kann eine 2 angegeben werden, um beim zweiten Zeichen zu beginnen, eine 3, um beim dritten Zeichen zu beginnen, und so weiter.
-Überschreitet Startposition die Länge von Heuhaufen, wird eine 0 zurückgegeben. Wenn Startposition eine 0 oder negativ ist, erfolgt die Suche in umgekehrter Reihenfolge (von rechts nach links), beginnend beim Offset am Ende.
+Überschreitet Startposition die Länge von Heuhaufen, wird eine 0 zurückgegeben. [AHK_L 57+]: Wenn Startposition eine 0 oder negativ ist, erfolgt die Suche in umgekehrter Reihenfolge (von rechts nach links), beginnend beim Offset am Ende.
Egal welchen Wert man als Startposition verwendet - der Rückgabewert ist immer relativ zum ersten Heuhaufen-Zeichen. Zum Beispiel wäre die Position von "abc" in "123abc789" immer 4.
Fehlt Vorkommen, gilt standardmäßig die erste Übereinstimmung von Nadel in Heuhaufen. Schreibe eine 2 in Vorkommen, um die Position der zweiten Übereinstimmung zurückzugeben, eine 3 für die dritte Übereinstimmung und so weiter.
Name des Labels oder Hotkey-Labels, der angesprungen werden soll, um die Befehle unterhalb von Label auszuführen, bis ein Return oder Exit erreicht wurde. Label kann, wie Parameter und die meisten anderen Befehle auch, einen Variablenverweis wie %MeinLabel% enthalten, um den gespeicherten Namen in der Variable als Ziel zu verwenden.
-[v1.1.01+]: Fehlt das Label, wird stattdessen A_ThisLabel verwendet. Zum Beispiel könnte SetTimer,, Off
innerhalb einer Timer-Subroutine verwendet werden, um den Timer zu deaktivieren. Bekannte Einschränkung: SetTimer wird auch dann den Wert von A_ThisLabel verwenden, wenn der laufende Timer eine Funktion oder ein Objekt (nicht Label) aufgerufen hat, oder wenn keine Timer laufen.
[v1.1.01+]: Fehlt das Label, wird stattdessen A_ThisLabel verwendet. Zum Beispiel könnte SetTimer,, Off
innerhalb einer Timer-Subroutine verwendet werden, um den Timer zu deaktivieren. SetTimer,, 1000
wiederrum würde entweder die Periode des aktuellen Timers ändern oder einen neuen Timer mit dem Label der aktuell laufenden Subroutine erstellen. [v1.1.24+]: Wenn A_ThisLabel leer ist, aber der aktuelle Thread durch einen Timer gestartet wurde, wird dieser Timer verwendet. Das ist besonders für Timer nützlich, die Funktionen oder Funktionsobjekte starten müssen.
[v1.1.20+]: Wenn es kein gültiger Labelname ist, kann dieser Parameter der Name einer Funktion sein, oder ein einzelner Variablenverweis mit einem Funktionsobjekt. Zum Beispiel SetTimer %funkobj%, 1000
oder SetTimer %funkobj, 1000
. Andere Ausdrücke, die Objekte zurückgeben, werden zurzeit nicht unterstützt. Mehr dazu findest du im Beispiel weiter unten.
Hinweis: [v1.1.24+]: Die Übergabe einer leeren Variable oder eines Ausdrucks, der zu einem leeren Wert führt, wird als Fehler eingestuft. Dieser Parameter darf weder leer sein noch fehlen.
Periode: Erstellt oder aktualisiert einen Timer. Der absolute Wert von diesem Parameter ist die ungefähre Zeit in Millisekunden, die ablaufen muss, bevor der Timer ausgeführt wird. Der Timer wird dabei automatisch aktiviert und zurückgesetzt. Man kann den Timer so einstellen, dass er sich automatisch wiederholt oder nur einmal läuft:
SetTimer, Label, Off
angegeben.[v1.0.46.16+]: Wenn Periode negativ ist, wird der Timer nur einmal laufen. Zum Beispiel würde -100 den Timer nach 100 ms einmal ausführen und ihn dann deaktivieren, als hätte man SetTimer, Label, Off
angegeben.
[v1.1.24+]: Wenn Label ein via Skript erstelltes Objekt ist (also keine Funktion oder Label), wird der Timer automatisch gelöscht, nachdem die Timer-Funktion ihren Wert zurückgegeben hat, es sei denn, der Timer wurde wieder aktiviert. Dadurch kann das Objekt freigegeben werden, wenn es vom Skript nicht länger benötigt wird, aber das bedeutet auch, dass die Periode und Priorität des Timers verworfen werden.
Periode muss ein Integer sein. Verwendet man eine Variable oder einen Ausdruck, werden Nachkommastellen ignoriert. Ihr absoluter Wert darf nicht größer sein als 4294967295 ms (49,7 Tage).
Default: Wenn dieser Parameter leer ist und:
@@ -165,10 +167,11 @@
Hinweise zum oberen Beispiel:
+Tipps bezüglich des oberen Beispiels:
this.timer := this.Tick.Bind(this)
verwenden. Wenn this.timer
aufgerufen wird, wird es tatsächlich this.Tick.Call(this)
aufrufen (außer dass this.Tick
nicht neu berechnet wird). ObjBindMethod hingegen erzeugt ein Objekt, das this.Tick()
aufruft.this
direkt verwenden, anstelle von this.timer
. Dadurch kann man temporäre Variablen vermeiden. Allerdings kann ObjBindMethod auch nützlich sein, wenn das Objekt mehrere Methoden hat, die von verschiedenen Ereignisquellen wie Hotkeys, Menüpunkte, GUI-Steuerelemente aufgerufen werden sollen.timer
im obigen Beispiel).Zahlentyp | Einen der folgenden Typen direkt als Teil der Funktion angegeben: UInt, Int, Int64, Short, UShort, Char, UChar, Double oder Float. |
Rückgabe | Eine Zahl bei Erfolg, ansonsten eine leere Zeichenkette. |
Wenn eine Try-Anweisung aktiv ist und keine Bytes gelesen wurden, wird eine Ausnahme ausgelöst. Es wird keine Ausnahme ausgelöst, wenn mindestens ein Byte gelesen wurde, selbst wenn die Größe des angegebenen Zahlentyps größer ist als die Anzahl der gelesenen Bytes. Stattdessen werden die fehlenden Bytes als Null angesehen.
Schreibt eine Zahl in die Datei und rückt dabei den Dateizeiger vor.
@@ -69,7 +70,8 @@Wenn eine Try-Anweisung aktiv ist und Bytes ungleich Null ist, aber keine Bytes gelesen wurden, wird eine Ausnahme ausgelöst. Mit AtEOF kann man das verhindern, wenn nötig.
Schreibt unbearbeitete Binärdaten in die Datei.