HotIf / HotIfWin...

Spezifiziert die Kriterien für danach erstellte oder modifizierte Hotkey-Varianten und Hotstring-Varianten.

HotIf

HotIf "Ausdruck"
HotIf Rückruf

Parameter

"Ausdruck"

Typ: Zeichenkette

Wenn weggelassen, werden leere Kriterien gesetzt (schaltet die Kontextabhängigkeit aus). Andernfalls werden die Kriterien auf einen existierenden #HotIf-Ausdruck gesetzt. Der Ausdruck wird normalerweise als Zeichenkette (in Anführungszeichen) geschrieben, kann aber auch eine Variable oder ein Ausdruck sein, die/der den #HotIf-Ausdruck in Textform enthält bzw. zurückgibt.

Hinweis: Die HotIf-Funktion verwendet die Zeichenkette, die Sie ihr übergeben haben, nicht den ursprünglichen Quellcode. Escapesequenzen werden beim Laden des Skripts aufgelöst, daher werden nur die resultierenden Zeichen berücksichtigt, z.B. stimmen sowohl HotIf 'x = "`t"' als auch HotIf 'x = "' A_Tab '"' mit #HotIf x = "`t" überein.

Siehe #HotIf-Beispiel #5.

Rückruf

Typ: Funktionsobjekt

Wenn weggelassen, werden leere Kriterien gesetzt (schaltet die Kontextabhängigkeit aus). Andernfalls werden die Kriterien auf ein bestimmtes Funktionsobjekt gesetzt. Danach erstellte Hotkeys und Hotstrings werden nur ausgeführt, wenn die Rückruffunktion eine Zahl ungleich 0 zurückgibt. Dies ähnelt HotIf "Ausdruck", außer dass jeder Hotkey oder Hotstring mehrere Hotkey-Varianten bzw. Hotstring-Varianten haben kann (eine pro Objekt).

Die Rückruffunktion akzeptiert einen Parameter und kann wie folgt definiert werden:

MeinRückruf(HotkeyName) { ...

Es spielt keine Rolle, welchen Namen Sie dem Parameter geben, allerdings wird ihm als Wert der Hotkey-Name oder Hotstring-Name zugewiesen.

Der Parameter der Rückruffunktion kann weggelassen werden, wenn die entsprechende Information nicht benötigt wird, aber dann muss ein Sternchen angegeben werden, z.B. MeinRückruf(*).

Einmal an die HotIf-Funktion übergeben, wird das Objekt niemals gelöscht (allerdings wird der beanspruchte Speicher wieder freigegeben, wenn der Prozess beendet wird).

Siehe Beispiel #2 unten oder Hotkey-Beispiel #6.

HotIfWin...

HotIfWinActive FensterTitel, FensterText
HotIfWinExist FensterTitel, FensterText
HotIfWinNotActive FensterTitel, FensterText
HotIfWinNotExist FensterTitel, FensterText

Parameter

FensterTitel, FensterText

Typ: Zeichenkette

Wenn beide weggelassen werden, werden leere Kriterien gesetzt (schaltet die Kontextabhängigkeit aus). Andernfalls geben Sie für FensterTitel einen Fenstertitel oder andere Kriterien zur Identifizierung des Zielfensters und/oder für FensterText eine Teilzeichenkette aus einem Textelement des Zielfensters an (Textelemente können mit dem internen Tool "Window Spy" in Erfahrung gebracht werden). Je nachdem, welche Funktion aufgerufen wird, sind die betroffenen Hotkeys und Hotstrings nur wirksam, während das Zielfenster aktiv ist, existiert, nicht aktiv ist oder nicht existiert.

Da die Parameter vor dem Funktionsaufruf ausgewertet werden, wird jede Variablenreferenz zu diesem Zeitpunkt dauerhaft wirksam. Mit anderen Worten, spätere Änderungen am Inhalt der Variable werden von existierenden Hotkeys oder Hotstrings nicht erkannt.

Abgesehen davon, dass FensterTitel und FensterText Zeichenketten sein müssen, sind diese Parameter äquivalent zu denen von WinActive oder WinExist und werden gemäß den Standardeinstellungen von SetTitleMatchMode und DetectHiddenWindows (die im Auto-Execute-Thread festgelegt wurden) ausgewertet.

Siehe Beispiel #1 unten.

Fehlerbehandlung

Es wird eine Ausnahme ausgelöst, wenn der Parameter von HotIf ungültig ist, z.B. wenn er nicht mit einem existierenden Ausdruck übereinstimmt oder keine gültige Rückruffunktion ist.

Allgemeine Bemerkungen

Die HotIf- und HotIfWin-Funktionen erlauben das Erstellen oder Ändern von kontextabhängigen Hotkeys und Hotstrings, während das Skript läuft (die #HotIf-Direktive ist hingegen positionsabhängig und wird bereits vor Beginn der Skriptausführung wirksam). Zum Beispiel:

HotIfWinActive "ahk_class Notepad"
Hotkey "^!e", MeineFunkFürNotepad  ; Erstellt einen Hotkey, der nur in Notepad funktioniert.

Die Verwendung von HotIf oder eine der HotIfWin-Funktionen macht alle danach erstellten Hotkeys und Hotstrings im aktuellen Thread kontextabhängig und hat Einfluss darauf, welche Hotkey-Varianten die Hotkey-Funktion modifiziert und welche Hotstring-Varianten die Hotstring-Funktion modifiziert. Nur der jüngste Aufruf einer HotIf- oder HotIfWin-Funktion im aktuellen Thread ist wirksam.

Um die Kontextabhängigkeit auszuschalten (so dass danach erstellte Hotkeys und Hotstrings für alle Fenster wirksam sind), rufen Sie HotIf oder eine der HotIf-Funktionen ohne Parameter auf. Zum Beispiel: HotIf oder HotIfWinActive.

Bevor HotIf oder eine der HotIf-Funktionen in einem Hotkey- oder Hotstring-Thread verwendet wird, verwendet eine Hotkey- oder Hotstring-Funktion standardmäßig denselben Kontext wie der Hotkey oder Hotstring, der den Thread gestartet hat. Mit anderen Worten, Hotkey A_ThisHotkey, "Off" schaltet den aktuellen Hotkey aus, selbst wenn er kontextabhängig ist. Alle anderen Threads erstellen oder modifizieren standardmäßig globale Hotkeys und Hotstrings, es sei denn, dieses Standardverhalten wurde mit HotIf oder mit einer der HotIf-Funktionen während der Startphase des Skripts überschrieben.

Wenn ein Maus- oder Tastatur-Hotkey mit HotIf, mit einer der HotIf-Funktionen oder mit der #HotIf-Direktive deaktiviert wurde, wird er seine ursprüngliche Funktion ausführen, d.h. der Hotkey wird an das aktive Fenster weitergereicht, als gäbe es ihn nicht. Controller-Hotkeys werden allerdings immer weitergereicht, egal ob sie deaktiviert sind oder nicht.

Hotkeys, Hotstrings, Hotkey-Funktion, Hotstring-Funktion, #HotIf, Threads

Beispiele

Ähnlich wie das #HotIf-Beispiel #1 erstellt dieses Beispiel zwei Hotkeys und einen Hotstring, die nur funktionieren, wenn Notepad aktiv ist, und einen Hotkey, der für alle Fenster außer Notepad funktioniert. Der Hauptunterschied ist, dass dieses Beispiel kontextabhängige Hotkeys und Hotstrings während der Skriptausführung erstellt, während das #HotIf-Beispiel diese beim Laden des Skripts erstellt.

HotIfWinActive "ahk_class Notepad"
Hotkey "^!a", MsgBoxAnzeigen
Hotkey "#c", MsgBoxAnzeigen
Hotstring "::bzw", "Dieser Ersatztext erscheint nur in Notepad."
HotIfWinActive
Hotkey "#c", (*) => MsgBox("Sie haben WIN+C in einem anderen Fenster als Notepad gedrückt.")

MsgBoxAnzeigen(HotkeyName)
{
    MsgBox "Sie haben " HotkeyName " gedrückt, während Notepad aktiv ist."
}

Ähnlich wie das obige Beispiel, aber mit einer Rückruffunktion.

HotIf MeinRückruf
Hotkey "^!a", MsgBoxAnzeigen
Hotkey "#c", MsgBoxAnzeigen
Hotstring "::bzw", "Dieser Ersatztext erscheint nur in Notepad."
HotIf
Hotkey "#c", (*) => MsgBox("Sie haben WIN+C in einem anderen Fenster als Notepad gedrückt.")

MeinRückruf(*)
{
    if WinActive("ahk_class Notepad")
        return true
    else
        return false
}

MsgBoxAnzeigen(HotkeyName)
{
    MsgBox "Sie haben " HotkeyName " gedrückt, während Notepad aktiv ist."
}