按进程名称在 window 上 WinActivate?

WinActivate on window by process name?

简单地说,我希望 Ctrl+Alt+T 激活 Windows 终端 window。以前我用过这个:

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

但这不再有效,因为 Windows 终端在我使用 Posh Git 时改变了它的标题 Git。

所以我需要在进程名称为“WindowsTerminal.exe”的任何 window 上激活 window。

我已经试过了,但出于某种原因它无法识别正确的 window:

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

解决方案:

^!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 可能有更短的方法,但我不能再为这种粗俗的语法烦恼了。

您使用进程/exe 名称调用 WinExist 的语法不正确

而不是:

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