#If [AHK_L 4+]

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 Tastatur-, Maus- oder Joystick-Tastenkombination eines Hotkeys gedrückt wird, wird der #If-Ausdruck ausgewertet, um zu überprüfen, ob der Hotkey aktiviert werden darf.

Hinweis: Ein Skript sollte nicht davon ausgehen, dass der Ausdruck nur ausgewertet wird, wenn die Taste gedrückt wird (siehe unten).

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.

Hinweis: Das Verwenden von #If in einem Skript, das nicht reagiert, kann Eingabeverzögerungen verursachen oder Hotkeys unbrauchbar machen (siehe unten).

Der #If-Direktive sind noch einige weitere Einschränkungen auferlegt:

[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