如何让AutoHotkey脚本检测指定AHK脚本是否正在运行?
修正AHK脚本的运行状态检测问题
原脚本存在两个核心问题:
- 用
WinExist("1UH_Yourself.ahk")检测不可靠——未编译的AHK脚本运行时,进程是ahk.exe,窗口标题默认是脚本路径,但如果目标脚本修改了窗口标题、启用了#NoTrayIcon或者隐藏了窗口,这个检测会失效。 - 代码存在语法错误:
Menu, Curar_Menu, Color, 800000 Process, Close, 1UH_Yourself.ahk把两个命令写在同一行,会导致脚本执行出错。
下面提供两种可靠的修改方案:
方案一:通过进程命令行精准检测(推荐,适用于未编译脚本)
利用AHK未编译脚本的进程命令行包含完整脚本路径的特性,精准判断目标脚本是否在运行:
SetTitleMatchMode, 2 DetectHiddenWindows, On UH_Yourself: ; 定义目标脚本的完整路径 targetScript := "C:\Users\fabri\OneDrive\Desktop\Macros\Macros\1Cura\1UH_Yourself.ahk" isRunning := false ; 遍历所有ahk.exe进程,检查命令行是否包含目标脚本路径 Process, Exist, ahk.exe loop { pid := ErrorLevel if pid = 0 break Process, CmdLine, %pid% if InStr(CmdLine, targetScript) { isRunning := true break } Process, Exist } if (isRunning) { ; 脚本在运行,关闭进程并修改菜单颜色 Menu, Curar_Menu, Color, 800000 Process, Close, %pid% } else { ; 脚本未运行,启动脚本并修改菜单颜色 Run, %targetScript% Menu, Curar_Menu, Color, 008000 } Return
方案二:给目标脚本添加专属标识(简单易实现)
在1UH_Yourself.ahk的开头添加一行代码,创建一个唯一的隐藏窗口:
; 在目标脚本1UH_Yourself.ahk中添加 Gui +LastFound +AlwaysOnTop -Caption +ToolWindow, UH_Yourself_Unique_Window WinHide
然后主脚本修改检测逻辑:
SetTitleMatchMode, 2 DetectHiddenWindows, On UH_Yourself: if WinExist("UH_Yourself_Unique_Window") { Menu, Curar_Menu, Color, 800000 ; 通过窗口获取PID并关闭进程 WinGet, pid, PID, UH_Yourself_Unique_Window Process, Close, %pid% } else { Run, C:\Users\fabri\OneDrive\Desktop\Macros\Macros\1Cura\1UH_Yourself.ahk Menu, Curar_Menu, Color, 008000 } Return
补充说明
- 如果目标脚本是编译后的EXE文件,直接用
Process, Exist, 1UH_Yourself.exe检测即可,无需复杂逻辑。 - 原脚本中重复执行
Process, Close, 1UH_Yourself.ahk是没必要的,执行一次即可。
内容的提问来源于stack exchange,提问作者Fabricio Moura Ramalho
相关产品推荐
相关产品推荐

