【问题标题】:AHK find pid of explorer.exe?AHK 找到 explorer.exe 的 pid?
【发布时间】:2020-02-05 16:54:34
【问题描述】:

这与this question有关。

如果当前应用程序 not 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

【问题讨论】:

    标签: windows autohotkey pid explorer


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢,这适用于除 GTA V 之外的所有应用程序。我尝试使用 #IfWinActive, ahk_exe GTA5.exe Pause:: Run, taskkill /f /im GTA5.exe,但没有成功。有什么办法可以使这部分工作吗?
    • 可能在这样的进程下找不到 GTA 的活动窗口。
    • 我知道它是,当我在 CMD 中运行 taskkill /f /im GTA5.exe 时,它​​会退出它。另外,我在网上找到了说GTA V的AHK脚本需要以管理员身份运行,所以我想我会尝试让脚本在启动时以管理员身份运行,然后看看它是否可以退出GTA
    • GTA5.exe 被杀死时游戏退出并不意味着活动窗口来自该进程。像这样的大型游戏往往有多个进程和其他“奇怪”的东西。也许可以使用ProcessName 子命令进行检查。但是试试那个管理员的东西,也可能是这样。
    猜你喜欢
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2012-05-12
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多