#If [AHK_L 4+]

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

#If Ausdruck

Parameter

Ausdruck

Wenn weggelassen, sind danach erstellte Hotkeys und 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 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.

Die #If-Direktive ist wie die #IfWin-Direktive positionsabhängig, d.h. sie beeinflusst nur Hotkeys und 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.

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 eines Hotkeys gedrückt wird, wird der #If-Ausdruck ausgewertet, um zu prüfen, ob der Hotkey aktiviert werden soll.

Hinweis: Ein Skript sollte nicht davon ausgehen, dass der Ausdruck nur beim Drücken der 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 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 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