#If [AHK_L]

Erstellt kontextabhängige Hotkeys und Hotstrings. Solche Hotkeys können je nach Ergebnis des Ausdrucks unterschiedliche (oder gar keine) Aktionen ausführen.

#If [, Ausdruck]

Parameter

Ausdruck

Beliebiger gültiger Ausdruck.

Grundlagen zur 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(Fenstertitel)
#Space::MsgBox Sie haben WIN+LEERTASTE im Editor oder %Fenstertitel% gedrückt.

Die #If-Direktive ist wie die #IfWin-Direktive von der Position abhängig: sie beeinflusst nur Hotkeys und Hotstrings, die sich im Skript physisch darunter befinden. Zudem schließen sich #If und #IfWin gegenseitig aus; das heißt, dass nur das aktuellste #If oder #IfWin wirksam sein wird.

Um die Kontextabhängigkeit zu deaktivieren, gibt man #If oder eine beliebige #IfWin-Direktive an und lässt alle Parameter weg. Zum Beispiel:

#If

Allgemeine Bemerkungen

Sobald ein Hotkey gedrückt wird, wird der #If-Ausdruck ausgewertet, um zu überprüfen, ob der Hotkey aktiviert werden soll. Möglicherweise kann das Betriebssystem erst wieder auf Tastatur- oder Mauseingaben reagieren, wenn die Ausdrucksauswertung das Ende erreicht oder das Zeitlimit überschritten hat. Sendet man Tastatureingaben oder Mausklicks während der Auswertung des Ausdrucks (z. B. von einer per Direktive aufgerufene Funktion), kann es zu Problemen kommen, die unbedingt verhindert werden sollten.

Der Ausdruck könnte auch ausgewertet werden, wann immer das Programm in Erfahrung bringen muss, ob der Hotkey aktiv ist. Zum Beispiel könnte der #If-Ausdruck für eine benutzerdefinierte Kombination wie a & b:: ausgewertet werden, wenn die Präfix-Taste (in diesem Fall a) gedrückt wird, um festzustellen, ob sie als benutzerdefinierte Modifikatortaste agieren soll.

Aus diesen Gründen sollte der Ausdruck kurz gehalten werden, so dass er schnell und ohne Nebeneffekte durchgeführt werden kann.

[AHK_L 53+]: Das Setzen von A_ThisHotkey und A_TimeSinceThisHotkey basiert auf den Hotkey, den der aktuelle #If-Ausdruck ausgewertet hat.

[v1.0.95.00+]: A_PriorHotkey und A_TimeSincePriorHotkey enthalten die vorherigen Werte von den "This"-Variablen.

Siehe auch

Die meisten Verhaltenseigenschaften von #IfWin-Direktiven gelten auch für #If.

Mit #IfTimeout kann der Standardwert des Zeitlimits überschrieben werden.

Beispiele

; Beispiel 1: Anpassen der Lautstärke durch Drehen des Mausrades innerhalb 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)
}

; Beispiel #2: Einfaches wort-löschendes Tastenkürzel für alle Eingabefelder.
#If AktivesSteuerelementIstKlasse("Edit")
^BS::Send ^+{Left}{Del}
^Del::Send ^+{Right}{Del}

AktivesSteuerelementIstKlasse(Klasse) {
    ControlGetFocus, FokusSteuerelement, A
    ControlGet, FokusSteuerelementHwnd, Hwnd,, %FokusSteuerelement%, A
    WinGetClass, FokusSteuerelementKlasse, ahk_id %FokusSteuerelementHwnd%
    return (FokusSteuerelementKlasse=Klasse)
}

; Beispiel #3: Kontextunabhängiger Hotkey.
#If
Esc::ExitApp

; Beispiel #4: Dynamische Hotkeys. Benötigt Beispiel #1.
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