Verwenden des Schlüsselworts IfWinActive in AutoHotKey

8

Diese Frage zur Verwendung von AutoHotKey bezieht sich speziell auf einen Windows LaTeX-Editor namens TeXnicCenter .

Also habe ich versucht, mein erstes AutoHotKey (AHK) -Skript zu schreiben, und wollte, dass die Verknüpfungen nur verfügbar sind, wenn das TeXniceCenter-Fenster aktiv ist. AHK stellt das IfWinActiveSchlüsselwort zur Verfügung, um mit diesen Szenarien umzugehen. Ich hatte jedoch einige Schwierigkeiten bei der Verwendung dieses Schlüsselworts.

Hier ist ein Entwurf einer Datei, die ich geschrieben habe:

SetTitleMatchMode, 2
SetTitleMatchMode, Slow

#IfWinActive, .* TeXnicCenter *.
!t::
Send \texttt{{}{}}
return

Die #IfWinActive, .* TeXnicCenter *.Zeile, so dass das Muster "TeXnicCenter" irgendwo im Fensternamen gefunden wird, funktioniert nicht.

Es gab einige andere Optionen, die ich verworfen habe

  • Ich verwende TeXnicCenter hauptsächlich für Projekte, sodass der Fenstername als " Projektname - TeXnicCenter" angezeigt wird. Daher ist es nicht möglich, dies als Argument für zu verwenden IfWinActive. Beachten Sie, dass der Fenstername TeXnicCenter lautet, wenn Sie an eigenständigen Dokumenten arbeiten.

  • Eine weitere von AHK bereitgestellte Option besteht darin, dass Sie etwas verwenden, das ahk_classals "Prozess" bezeichnet wird. Dies ist normalerweise intuitiv (und kann über das handliche, mitgelieferte AHK-Tool "Window Spy" abgerufen werden). Dies ist beispielsweise bei Chrome der Fall Chrome_WidgetWin_1.

Für TeXnicCenter zeigt es jedoch die bizarre Signatur - zum Beispiel für eines meiner Projekte ist es Afx:000000013F370000:8:0000000000010005:0000000000000000:0000000012B80087nicht nur das, es ist nicht über TeXnicCenter-Fenster hinweg konstant , wie es normalerweise für andere Prozesse der Fall ist.

Ich bin ratlos - hat jemand Erfahrung mit der Einrichtung von AHK mit TeXnicCenter und der Verwendung des IfWinActiveSchlüsselworts? Ich habe das Gefühl, dass dies besser an die Entwickler von TeXnicCenter gerichtet sein könnte, aber hier ist die Hoffnung.

tchakravarty
quelle

Antworten:

9

Sie SetTitleMatchModehaben den Titelanpassungsmodus festgelegt. Dies2 bedeutet , dass der Titel eines Fensters WinTitle an einer beliebigen Stelle enthalten kann, um eine Übereinstimmung zu erzielen. Es wird also versucht, .* TeXnicCenter *.in der Titelleiste zu finden. Sie sollten das .*und entfernen *.(es sei denn, die Titelleiste enthält tatsächlich diese - was meines Wissens nicht der Fall ist ). Sie können RegExden Titelanpassungsmodus auf einstellen, wenn Sie lieber die Regex-Syntax verwenden möchten (und selbst dann *.sollte dies falsch sein .*).

Was die Klasse betrifft, hatte ich das gleiche Problem mit GraphEdit, das für das Hauptfenster eine Fensterklasse wie Afx:1000000:b:10011:6:1070780mit dem gleichen Muster, aber unterschiedlichen Nummern für jede Instanz hat. Ich habe es gelöst, indem ich den Regex-Modus ( SetTitleMatchMode, RegEx) und ein Muster wie das folgende verwendet habe: Sie ^Afx:.+:.:.+:.:.+$können die genaue Anzahl der Stellen zwischen den Doppelpunkten angeben, aber es ist unwahrscheinlich, dass Sie dies benötigen .

(Schließlich habe ich den gesamten Prozess durch die Verwendung von Gruppen vereinfacht .)

In Ihrem Fall würden Sie also eine der folgenden Methoden verwenden:

SetTitleMatchMode, 2
SetTitleMatchMode, Slow

#IfWinActive, TeXnicCenter
!t::
Send \texttt{{}{}}
return



SetTitleMatchMode, regex
SetTitleMatchMode, Slow

#IfWinActive, .* TeXnicCenter *.
!t::
Send \texttt{{}{}}
return

Hier ist meine Empfehlung:

SetTitleMatchMode, regex
SetTitleMatchMode, Slow
GroupAdd, TXC, ^.*TeXnicCenter.*$ ahk_class ^Afx:.+:.:.+:.+:.*$

#IfWinExist, ahk_group TXC
  !t::
    Send \texttt{{}{}}
  return
#IfWinExist
Synetech
quelle
Vielen Dank. Ich denke, dass Ihre Vorschläge funktionieren werden, und ich werde sie ausprobieren und zurückkommen. Ich wollte jedoch nur darauf hinweisen, dass ich TeXnicCenter 2 (Alpha) verwende. In meinem Fall enthält der Fenstertitel also "TeXnicCenter". Ich kann das Bild, mit dem Sie verlinkt haben, nicht sehen. Es wird als 503-Fehler angezeigt.
Tchakravarty
Ja, funktioniert wie ein Zauber. Vielen Dank. Ich habe das geändert IfWinExist, IfWinActiveda ich das brauchte.
Tchakravarty
> In meinem Fall enthält der Fenstertitel "TeXnicCenter". Ja, er enthält TeXnicCenterin der Titelleiste, aber nicht .*oder .*. > Ich kann das von Ihnen verknüpfte Bild nicht sehen. Es wird als 503-Fehler angezeigt. Ich habe keinen Link zu einem Bild erstellt, sondern einen Link zu Google Bilder. Ich denke, GI muss von Ihrem Netzwerk blockiert werden. > Ich habe IfWinExist in IfWinActive geändert, da ich das brauchte. Sicher; aber sie sind ein bisschen anders, so lange Sie den Unterschied kennen, sollte es Ihnen gut gehen. ☺
Synetech