Мое понимание того, как работает Window Activation, довольно просто. Восстанавливает последнее использованное окно этого типа. Такое поведение по умолчанию делает кодирование того, что вы хотите, очень простым. На самом деле, я делаю что-то почти идентичное тому, что вы делаете, с двумя простыми блоками кода.
+#w::
SetTitleMatchMode, 2 ; approximate match
IfWinExist, - Microsoft Word
{
WinActivate, - Micrsoft Word
}
IfWinNotExist, - Microsoft Word
{
Run FullFilePathToMicrosoftWord
}
return
Я создал немного интересного взаимодействия для работы с несколькими мониторами. Обратите внимание, что в Windows 7, удерживая клавишу shift + windows и используя стрелки для перемещения влево и вправо, активное окно будет перемещаться между мониторами со скоростью света. Поэтому я попробовал что-то немного умное и сопоставленное слово для shift + window + w. Восстанавливает слово, если оно уже открыто, или запускает новый экземпляр, если нет. Прелесть подхода в том, что я никогда не отпускаю клавиши shift + windows. Делая это, я могу как активировать / начать слово, так и перемещать его в нужное положение с помощью клавиш со стрелками влево и вправо (при этом вверх будет максимально увеличиваться, а вниз - минимизироваться). Карта + # r, чтобы восстановить активное окно, и вы полностью контролируете все окна, которые вы обычно используете легко без мыши. Все, что вы должны помнить, это первая буква приложения, которое вы пытаетесь активировать.
В ответ на ваш вопрос о том, как сделать скрипт более общим:
1) рассмотреть возможность использования
; Allows you to search for an approximate window title match
SetTitleMatchMode, 2
; For example, you could do the following to activate any existing window with
; "- Microsoft Word" as part of the title
WinWait, - Microsoft Word,
IfWinNotActive, - Microsoft Word, , WinActivate, - Microsoft Word,
WinWaitActive, - Microsoft Word,
; some other code here once you have the window active
Или другая возможность:
;Active the window by finding its ahk_class
WinWait, ahk_class OpusApp,
IfWinNotActive, ahk_class OpusApp, , WinActivate, ahk_class OpusApp,
WinWaitActive, ahk_class OpusApp,
Примечание. Приведенный выше код был всего лишь адаптацией универсального вывода autoscriptwriter'а. Это несколько избыточно, но эффективно. Чтобы найти что-то вроде окна ahk_class, рассмотрите возможность использования шпиона AutoIt3.
Если вам нужно узнать заголовок окна, вы можете получить активный заголовок, как показано в файле справки примера ahk
WinGetActiveTitle, Title
MsgBox, The active window is "%Title%".
Другой трюк, который вы можете использовать, - установить активный заголовок с помощью WinSetTitle.
Изменить: Учитывая, что у вас есть несколько экземпляров Excel / Word / PowerPoint, также рассмотреть возможность решения этой проблемы с бесплатной версией Officetabs. Это позволит вам хранить все открытые файлы Excel в одном экземпляре, например, вместо разбросанных по панели задач.