AHK 找到 explorer.exe 的 pid?

AHK find pid of explorer.exe?

这与有关。

如果当前应用程序 不是 explorer.exe,我如何在运行的 AutoHotKey 中创建一个 if 语句。这是为了防止脚本退出 explorer.exe,它最初是这样做的(如果我在资源管理器上)。

当前脚本(根本不退出任何东西):

Pause::
WinGet,win_pid,PID,ProcessName,A
if (ProcessName != "explorer.exe") {
Run,taskkill /f /pid %win_pid%,,,
return
} else {
return
}

原始脚本(成功退出最后一个应用程序,包括资源管理器[如果那是最后一个应用程序]):

Pause::
WinGet,win_pid,PID,A
Run,taskkill /f /pid %win_pid%,,,
return

首先是你脚本中的错误:
您正在使用 WinGet with the sub-command PID.
它采用以下参数:
WinGet, OutputVar, PID [, WinTitle, WinText, ExcludeTitle, ExcludeText]
如您所见,您传递的最后两个参数没有意义。您正在尝试将 window 与标题 "ProcessName" 匹配,并且它还必须包含文本 "A".
如果您想获取进程名称,您可以使用预期的 WinGet sub-command ,如下所示:

WinGet, output, ProcessName, A ;A, as a WinTitle, means the currently active window
MsgBox, % output

然而,没有必要这样去做。有更简单的方法。
我现在将展示并解释最佳方法,即使用 #directives 创建上下文相关的热键。
具体来说,#IfWinNotActive 是您要使用的。
在 WinTitle 参数中,我们可以使用 ahk_exe 通过其进程名称直接引用资源管理器 window。

#IfWinNotActive, ahk_exe explorer.exe
Pause::
    WinGet, win_pid, PID, A
    Run, taskkill /f /pid %win_pid%
return
#IfWinNotActive

现在我们有一个热键,只有当活动 window 不是资源管理器时才会触发。