Erstellt kontextabhängige Hotkeys und Hotstrings. Solche Hotkeys führen je nach Typ des aktiven oder vorhandenen Fensters unterschiedliche (oder gar keine) Aktionen durch.
#IfWinActive FensterTitel, FensterText #IfWinExist FensterTitel, FensterText #IfWinNotActive FensterTitel, FensterText #IfWinNotExist FensterTitel, FensterText #If Ausdruck
Der Titel oder andere Möglichkeiten zum Identifizieren des Zielfensters. Weitere Informationen finden Sie unter FensterTitel-Parameter.
Das Übereinstimmungsverhalten des Titels wird durch SetTitleMatchMode bestimmt, das im automatischen Ausführungsbereich angegeben ist.
Diese Direktive unterstützt wie die meisten anderen Direktiven keine Variablen. Obwohl ahk_pid und ahk_id genutzt werden können, um ein Fenster via Prozess oder Fenster-ID anzusteuern, nutzt man sie bei #IfWin meistens indirekt, indem man sie in Verbindung mit GroupAdd oder Hotkey IfWin setzt.
Eine Zeichenkette, die in einem der Textelemente des Zielfensters enthalten ist (eventuell vorhandene Textelemente können mit dem internen Tool Window Spy aufgedeckt werden). Versteckte Textelemente werden nur erkannt, wenn DetectHiddenText im automatischen Ausführungsbereich (ganz oben im Skript) eingeschaltet ist.
Obwohl diese Parameter nicht unterstützt werden, können sie indirekt genutzt werden, indem man ahk_group MeineGruppe
für FensterTitel angibt (wobei MeineGruppe eine via GroupAdd erstellte Fenstergruppe ist, die IgnoriereTitel/Text unterstützt).
Die #IfWin-Direktiven können genutzt werden, um auf einfache Weise kontextabhängige Hotkeys und Hotstrings zu erstellen. Zum Beispiel:
#IfWinActive ahk_class Notepad #space::MsgBox Sie haben WIN+LEERTASTE im Texteditor gedrückt.
Die #IfWin-Direktiven sind von der Position abhängig: sie beeinflussen nur Hotkeys und Hotstrings, die sich im Skript physisch darunter befinden. Zudem schließen sie sich gegenseitig aus; das heißt, dass nur die aktuellste Direktive wirksam sein wird.
Um die Kontextabhängigkeit zu deaktivieren, geben Sie eine beliebige #IfWin-Direktive an und lassen Sie all ihre Parameter weg. Zum Beispiel:
#IfWinActive
Wenn #IfWin ausgeschaltet ist (oder nie in einem Skript verwendet wird), sind Hotkeys und Hotstrings für alle Fenster wirksam (sofern sie nicht via Suspend oder dem Hotkey-Befehl deaktiviert wurden).
Wenn ein Maus- oder Tastatur-Hotkey per #IfWin deaktiviert wurde, wird er seine ursprüngliche Funktion ausführen; das heißt, dass die Tasten an das aktive Fenster gesendet werden, als gäbe es diesen Hotkey nicht. Es gibt eine Ausnahme: Joystick-Hotkeys: Obwohl #IfWin bei diesen Hotkeys funktioniert, kann die Direktive nicht verhindern, dass andere Programme den Tastendruck eines Joysticks wahrnehmen.
#IfWin kann auch genutzt werden, um das Verhalten einer gewöhnlichen Taste wie Enter oder Leer zu ändern. Das ist nützlich, wenn ein bestimmtes Fenster diese Taste ignoriert oder eine Aktion ausführt, die unerwünscht ist. Zum Beispiel:
#IfWinActive Erinnerung ahk_class #32770 ; Das Erinnerungsfenster von Outlook. Enter::Send !o ; Mit einem "Enter"-Tastendruck die markierte Erinnerung öffnen, anstatt sie in den Snooze-Modus zu versetzen. #IfWinActive
#IfWin kann wie alle anderen Direktiven nicht bedingt ausgeführt werden.
Sie können einen bestimmten Hotkey oder Hotstring mehrmals im Skript definieren, indem Sie jeder Definition ein anderes IfWin-Kriterium zuweisen. Auch bekannt als Hotkey-Varianten. Zum Beispiel:
#IfWinActive ahk_class Notepad ^!c::MsgBox Sie haben STRG+ALT+C im Texteditor gedrückt. #IfWinActive ahk_class WordPadClass ^!c::MsgBox Sie haben STRG+ALT+C in WordPad gedrückt. #IfWinActive ^!c::MsgBox Sie haben STRG+ALT+C in einem beliebigen Fenster gedrückt (außer Texteditor/WordPad).
Sollte der Fall eintreten, dass mehrere Varianten ausgelöst werden können, hat die erste gefundene Variante im Skript die höchste Priorität. Die Ausnahme hiervon ist die globale Variante (die Variante ohne #IfWin-Kriterium): Sie hat immer die niedrigste Priorität; das heißt, dass sie nur ausgelöst wird, wenn keine andere Variante infrage kommt (diese Ausnahme gilt nicht für Hotstrings).
Beim Erstellen von Hotkey-Duplikaten spielt die Reihenfolge der Modifikatorzeichen (z. B. ^!+#) keine Rolle. Zum Beispiel wäre ^!c
das gleiche wie !^c
. Die Schreibweise der Tasten muss jedoch konsistent sein. Esc beispielsweise ist in diesem Zusammenhang nicht das gleiche wie Escape (die Groß- und Kleinschreibung hingegen ist egal). Außerdem werden Hotkeys mit einem Platzhalter-Präfix (*) und Hotkeys ohne Platzhalter getrennt behandelt; zum Beispiel hätten *F1
und F1
jeweils ihre eigenen Varianten.
Um dieselbe Hotkey-Subroutine von mehr als einer Variante ausführen zu lassen, ist es am einfachsten, sie übereinander zu stapeln und jeweils eine andere #IfWin-Direktive darüber zu setzen. Zum Beispiel:
#IfWinActive ahk_class Notepad #z:: #IfWinActive ahk_class WordPadClass #z:: MsgBox Sie haben WIN+Z entweder im Texteditor oder in WordPad gedrückt. return
Alternativ kann auch eine Fenstergruppe via #IfWinActive ahk_group MeineGruppe
genutzt werden.
Um Hotkey-Varianten dynamisch zu erstellen (während das Skript läuft), siehe "Hotkey IfWin".
Wenn nötig, stellt #IfWin außerdem die ursprüngliche Funktion der Präfixtasten wieder her (eine Präfixtaste ist beispielsweise A bei einem Hotkey wie "a & b"). Dies geschieht immer dann, wenn für ein bestimmtes Präfix keine aktivierten Hotkeys verfügbar sind.
Gosub oder Goto, das einen Hotkey- oder Hotstring-Label als Ziel hat, springt zur ersten gefundenen Variante im Skript.
Die Tastatur- oder Maustaste eines via #IfWin deaktivierten Hotkeys sind im Tastenverlauf innerhalb der Spalte "Type" mit einem Rautezeichen (#) gekennzeichnet. Solche Informationen können helfen, ein Skript zu debuggen (Fehler zu finden und zu beseitigen).
Variablenreferenzen wie %Var% werden zurzeit nicht unterstützt. Da das in einer zukünftigen Version geändert werden könnte, sollten Prozentzeichen mit einem Escapezeichen versehen werden (`%), um eine ungewollte Variablenreferenz zu verhindern. Kommas sollten ebenfalls mit einem Escapezeichen versehen werden (`,), um zukünftige Probleme zu vermeiden, falls weitere Parameter hinzugefügt werden. Um diese Einschränkung zu umgehen, können Sie GroupAdd und ahk_group verwenden.
Ein Label, das vom Hotkey-Befehl einen Hotkey zugewiesen bekommen hat, wird nicht direkt von #IfWin beeinflusst. Nur die #IfWin-Direktive ganz unten im Skript (falls vorhanden) wird für alle via Hotkey-Befehl erstellte Hotkeys wirksam (sofern das nicht mit "Hotkey IfWin" geändert wurde).
Alt-Tab-Hotkeys werden nicht von #IfWin beeinflusst: sie gelten für alle Fenster.
Das Zuletzt Gefundene Fenster wird von #IfWinActive/Exist gesetzt (aber nicht von IfWinNotActive/NotExist). Zum Beispiel:
#IfWinExist ahk_class Notepad #n::WinActivate ; Aktiviert das gefundene Fenster von #IfWin.
Die Escapesequenzen `s und `t können genutzt werden, wenn Leer-/Tabulatorzeichen am Anfang und Ende eines #IfWin-Parameters notwendig sind.
Aus Leistungsgründen überwacht #IfWin das angegebene Fenster nicht kontinuierlich, ob es aktiviert oder vorhanden ist. Nur wenn der Benutzer ein Hotkey oder Hotstring auslöst, sucht die Direktive ein geeignetes Fenster. Wenn die Direktive kein geeignetes Fenster findet, werden Tastendrücke oder Mausklicks des Benutzers unverändert an das aktive Fenster weitergereicht.
Fenstertitel und -texte sind Groß-/Kleinschreibung-sensitiv. Versteckte Fenster werden nur erkannt, wenn DetectHiddenWindows im automatischen Ausführungsbereich (ganz oben im Skript) eingeschaltet ist.
#If Ausdruck, Hotkey-Befehl, Hotkeys, Hotstrings, Suspend, WinActive(), WinExist(), SetTitleMatchMode, DetectHiddenWindows
Erstellt zwei Hotkeys und einen Hotstring, die nur funktionieren, wenn der Texteditor aktiv ist, und einen Hotkey, der für ein beliebiges Fenster außer dem Texteditor funktioniert.
#IfWinActive ahk_class Notepad ^!a::MsgBox Sie haben STRG+ALT+A gedrückt`, während der Texteditor aktiv ist. ; Dieser Hotkey wird nicht funktionieren, wenn er in einem anderen Fenster gedrückt wird. #c::MsgBox Sie haben WIN+C gedrückt`, während der Texteditor aktiv ist. ::bzw::Dieser Ersatztext für "bzw" wird nur im Texteditor erscheinen. #IfWinActive #c::MsgBox Sie haben WIN+C in einem Fenster gedrückt`, das nicht der Texteditor ist.