8

Этот вопрос об использовании AutoHotKey относится к редактору Windows LaTeX, который называется TeXnicCenter.

Итак, я пытался написать свой первый скрипт AutoHotKey (AHK) и хотел, чтобы ярлыки были доступны только при активном окне TeXniceCenter. AHK предоставляет ключевое слово IfWinActive для этих сценариев, однако я столкнулся с некоторыми трудностями при использовании этого ключевого слова.

Вот черновик файла, который я написал:

SetTitleMatchMode, 2
SetTitleMatchMode, Slow

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

#IfWinActive, .* TeXnicCenter *. линия, так что шаблон "TeXnicCenter" находится где-то в названии окна, не работает.

Были и другие варианты, от которых я отказался

  • Я использую TeXnicCenter в основном с проектами, поэтому имя окна отображается как «имя проекта - TeXnicCenter», поэтому его невозможно использовать в качестве аргумента IfWinActive . Обратите внимание, что имя окна TeXnicCenter, если вы работаете с автономными документами.

  • Еще одна опция, предоставляемая AHK, заключается в том, что вы используете нечто, называемое ahk_class процесса, которое обычно интуитивно понятно (и его можно получить из удобного связанного инструмента AHK, называемого Window Spy) - например, в случае Chrome это Chrome_WidgetWin_1 .

Однако для TeXnicCenter он показывает странную подпись - например, для одного из моих проектов это Afx:000000013F370000:8:0000000000010005:0000000000000000:0000000012B80087 , и не только это, он не является постоянным в окнах TeXnicCenter , так как он обычно для других процессов.

Я в растерянности - есть ли у кого-нибудь опыт настройки AHK с TeXnicCenter и использования ключевого слова IfWinActive ? У меня есть ощущение, что это может быть лучше направлено на разработчиков TeXnicCenter, но здесь есть надежда.

1 ответ1

9

Вы использовали SetTitleMatchMode чтобы установить для режима сопоставления заголовков значение 2 что означает, что заголовок окна может содержать WinTitle в любом месте внутри него, чтобы соответствовать. Итак, он пытается найти .* TeXnicCenter *. в строке заголовка. Вы должны удалить .* И *. (если строка заголовка фактически не содержит те, которых, насколько я знаю, это не так). Вы можете установить режим соответствия заголовков на RegEx если вы предпочитаете использовать синтаксис регулярных выражений (и даже тогда *. Неверен, так и должно быть).*)

Что касается класса, у меня была та же проблема с GraphEdit, которая для главного окна имеет класс окна, такой как Afx:1000000:b:10011:6:1070780 с тем же шаблоном, но разными номерами для каждого экземпляра. Я решил это, используя режим регулярных выражений (SetTitleMatchMode, RegEx) и шаблон, такой как ^Afx:.+:.:.+:.:.+$ - вы можете указать точное количество цифр между двоеточиями, но вряд ли вам это понадобится .

(В конечном итоге я упростил весь процесс с помощью групп.)

Итак, в вашем случае вы бы использовали один из следующих:

SetTitleMatchMode, 2
SetTitleMatchMode, Slow

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



SetTitleMatchMode, regex
SetTitleMatchMode, Slow

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

Вот моя рекомендация:

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

#IfWinExist, ahk_group TXC
  !t::
    Send \texttt{{}{}}
  return
#IfWinExist

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .