#If [AHK_L]

Erstellt kontextabhängige Hotkeys und Hotstrings. Solche Hotkeys führen je nach Ergebnis des Ausdrucks unterschiedliche (oder gar keine) Aktionen durch.

#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(MeinFenstertitel)
#Space::MsgBox Sie haben WIN+LEERTASTE im Texteditor oder %MeinFenstertitel% 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 die Tastenkombination eines Hotkeys gedrückt wird, wird der #If-Ausdruck ausgewertet, um zu überprüfen, ob der Hotkey aktiviert werden darf. Das Betriebssystem reagiert eventuell nicht auf Tastatur- oder Mauseingaben, bis die Auswertung des Ausdrucks abgeschlossen oder die Zeit abgelaufen ist. Das Senden von Tastatureingaben oder Mausklicks während der Auswertung des Ausdrucks (z. B. mit einer Funktion, die sie selbst aufruft) kann zu Komplikationen führen und sollte vermieden werden.

Der Ausdruck wird eventuell auch ausgewertet, wenn das Programm feststellen muss, ob der Hotkey aktiv ist. Der #If-Ausdruck einer benutzerdefinierten Kombination wie a & b:: beispielsweise wird eventuell ausgewertet, wenn die Präfixtaste (a in diesem Fall) gedrückt wird, um festzustellen, ob sie als benutzerdefinierte Modifikatortaste fungieren soll.

Aus diesen Gründen sollte der Ausdruck kurz gehalten werden, damit er schnell und ohne Nebeneffekte ausgewertet wird.

[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 vorübergehend die vorherigen Werte der entsprechenden "This"-Variablen.

Siehe auch

Die meisten Verhaltensmuster der #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