#If [AHK_L 4+]

Erstellt kontextabhängige Hotkeys und Hotstrings. Diese führen je nach Ergebnis eines Ausdrucks eine andere (oder gar keine) Aktion aus.

#If Ausdruck

Parameter

Ausdruck

Wenn weggelassen, sind danach definierte Hotkeys/Hotstrings nicht kontextabhängig. Andernfalls geben Sie einen beliebigen gültigen Ausdruck an.

Grundlegende Bedienung

Es kann ein beliebiger gültiger Ausdruck verwendet werden, um den Kontext zu definieren, bei dem ein Hotkey/Hotstring aktiv sein soll. Zum Beispiel:

#If WinActive("ahk_class Notepad") or WinActive(MeinFensterTitel)
#Space::MsgBox Sie haben WIN+LEERTASTE in Notepad oder %MeinFensterTitel% gedrückt
:X:bzw::MsgBox Sie haben bzw in Notepad oder %MeinFensterTitel% geschrieben

Die #If-Direktive ist wie die #IfWin-Direktive positionsabhängig, d.h. sie beeinflusst nur Hotkeys/Hotstrings, die sich im Skript physisch darunter befinden. Außerdem schließen sich #If und #IfWin gegenseitig aus, d.h. nur das aktuellste #If oder #IfWin ist wirksam.

#If ist für Hotkeys/Hotstrings gedacht, die mit der Zweifach-Doppelpunkt-Syntax definiert werden, wie z.B. #Space:: oder ::bzw::. Für Hotkeys/Hotstrings, die mit dem Hotkey-Befehl oder der Hotstring-Funktion erstellt werden, ist Hotkey If die richtige Wahl. Wenn Hotkey If jedoch nie im Skript verwendet wird, wird die unterste im Skript angegebene #If-Direktive (falls vorhanden) für den Hotkey-Befehl oder die Hotstring-Funktion wirksam.

Um die Kontextabhängigkeit auszuschalten, geben Sie #If oder eine beliebige #IfWin-Direktive ohne Parameter an. Zum Beispiel:

#If

#If kann wie alle anderen Direktiven nicht bedingt ausgeführt werden.

Allgemeine Bemerkungen

Sobald die Tastatur-, Maus- oder Controllertastenkombination des Hotkeys gedrückt oder die Abkürzung des Hotstrings eingegeben wurde, wird der #If-Ausdruck ausgewertet, um zu prüfen, ob der Hotkey/Hotstring aktiviert werden soll.

Hinweis: Ein Skript sollte nicht davon ausgehen, dass der Ausdruck nur beim Drücken der Hotkey-Taste ausgewertet wird (siehe unten).

Der Ausdruck kann auch ausgewertet werden, wenn das Programm wissen muss, ob der Hotkey aktiv ist. Zum Beispiel könnte der #If-Ausdruck einer benutzerdefinierten Kombination wie a & b:: auch ausgewertet werden, wenn die Präfixtaste (a in diesem Fall) gedrückt wird, um zu prüfen, ob sie als benutzerdefinierte Modifikatortaste fungieren soll.

Hinweis: Die Nutzung von #If in einem nicht reagierenden Skript kann eine Eingabeverzögerung verursachen oder Hotkeys/Hotstrings stören (siehe unten).

Für die #If-Direktive gibt es noch einige weitere Vorbehalte:

[AHK_L 53+]: A_ThisHotkey und A_TimeSinceThisHotkey werden auf Basis des Hotkeys oder nicht-automatisch-ersetzenden Hotstrings gesetzt, den der aktuelle #If-Ausdruck gerade auswertet.

[v1.0.95.00+]: A_PriorHotkey und A_TimeSincePriorHotkey enthalten temporär die vorherigen Werte der entsprechenden "This"-Variablen.

Die meisten Verhaltensmerkmale der #IfWin-Direktiven gelten auch für #If.

Mit #IfTimeout kann das Zeitlimit geändert werden.

Beispiele

Ermöglicht das Einstellen der Lautstärke durch Drehen des Mausrads über der Taskleiste.

#If MausIstÜber("ahk_class Shell_TrayWnd")
WheelUp::Send {Volume_Up}
WheelDown::Send {Volume_Down}

MausIstÜber(FensterTitel) {
    MouseGetPos,,, Fenster
    return WinExist(FensterTitel . " ahk_id " . Fenster)
}

Einfache wortlöschende Tastaturkurzbefehle für alle Eingabefelder.

#If AktivesSteuerelementIstKlasse("Edit")
^BS::Send ^+{Left}{Del}
^Del::Send ^+{Right}{Del}

AktivesSteuerelementIstKlasse(Klasse) {
    ControlGetFocus, FokussiertesStrlmnt, A
    ControlGet, FokussiertesStrlmntHwnd, Hwnd,, %FokussiertesStrlmnt%, A
    WinGetClass, FokussiertesStrlmntKlasse, ahk_id %FokussiertesStrlmntHwnd%
    return (FokussiertesStrlmntKlasse=Klasse)
}

Kontextunabhängiger Hotkey.

#If
Esc::ExitApp

Dynamische Hotkeys. Dieses Beispiel muss mit Beispiel #1 kombiniert werden, bevor es ausgeführt wird.

NumpadAdd::
Hotkey, If, MausIstÜber("ahk_class Shell_TrayWnd")
if (zweimalhoch := !zweimalhoch)
    Hotkey, WheelUp, ZweimalHoch
else
    Hotkey, WheelUp, WheelUp
return

ZweimalHoch:
Send {Volume_Up 2}
return