Erstellt kontextabhängige Hotkeys und Hotstrings. Diese führen je nach Ergebnis eines Ausdrucks eine andere (oder gar keine) Aktion aus.
#If Ausdruck
Wenn weggelassen, sind danach definierte Hotkeys/Hotstrings nicht kontextabhängig. Andernfalls geben Sie einen beliebigen gültigen Ausdruck an.
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.
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.
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)
}
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