WinActivate в окне по имени процесса?

#autohotkey

#autohotkey

Вопрос:

Проще говоря, я хочу, чтобы Ctrl Alt T активировали окно терминала Windows. Ранее я использовал это:

 ^!T::
    if WinExist("Windows PowerShell")
        WinActivate
    else
        Run, wt
Return
 

Но это больше не сокращает его, потому что терминал Windows меняет свой заголовок, когда я использую Posh Git.

Итак, мне нужно активировать окно в любом окне с именем процесса «WindowsTerminal.exe «.

Я пробовал это, но по какой-то причине он не распознает правильное окно:

 ^!T::
    if WinExist(ahk_exe "WindowsTerminal.exe")
        WinActivate
    else
        Run, wt
Return
 

введите описание изображения здесь

Ответ №1:

Ваш синтаксис для вызова WinExist с именем процесса / exe неверен

Вместо:

 if WinExist(ahk_exe "WindowsTerminal.exe")
 

Вам также необходимо включить ahk_exe его часть в кавычки.

Так вот как это:

 if WinExist("ahk_exe WindowsTerminal.exe")
 

Окончательный код:

 ^!T::
    if WinExist("ahk_exe WindowsTerminal.exe")
        WinActivate
    else
        Run, wt
Return
 

Комментарии:

1. Идеальный ответ. Я не знал о autohotkey.com/docs/misc/WinTitle.htm#LastFoundWindow

Ответ №2:

Решение:

 ^!T::
    _WindowId = -1
    WinGet _Windows, List
    Loop %_Windows%
    {
        _Id := _Windows%A_Index%
        WinGet, _PName , ProcessName, ahk_id %_Id%
        if (_PName == "WindowsTerminal.exe")
        {
            _WindowId = %_Id%
            break
        }
    }
    if (_WindowId != -1)
    {
        WinActivate, ahk_id %_WindowId%
    } else
    {
        Run, wt
    }
Return
 

Вероятно, есть более короткий способ сделать это с помощью AHK, но меня больше не беспокоит этот грубый синтаксис.

Комментарии:

1. Да, есть более короткий способ использовать winexist вместо зацикливания с помощью winget см. Принятый ответ