Мое понимание того, как работает 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 в одном экземпляре, например, вместо разбросанных по панели задач.
Я вижу, вы уже знаете великолепный язык Autohotkey;). Я бы использовал:
Если у вас есть дополнительные вопросы, вы обязательно должны задать их на форуме autohotkey.
источник
Это может быть не так сложно, как некоторые, но вот что я использую для запуска большинства своих программ. Переключатель позволяет свернуть окно, если оно уже активно.
источник
Так я решил эту проблему для себя. https://superuser.com/a/1405409/997992 Я забыл упомянуть в исходном посте, что я использую добавление Windows на называемом фактическом диспетчере Windows, поэтому у меня есть дополнительная проверка с WinExist для любого фактического windowsmanager ИЛИ explorer.exe.
Надеюсь это поможет.
источник