AHK 经常需要启动外部程序:打开软件、运行命令行工具、启动浏览器、调用批处理、等待某个工具执行完再继续。这里最核心的命令是 RunRunWaitProcessRunAs

先给结论

  • 只负责打开程序:用 Run
  • 必须等程序结束再继续:用 RunWait
  • 需要获取或关闭进程:用 Process
  • 需要指定管理员或其他账号:再看 RunAs
  • 路径里有空格:记得加引号,工作目录单独写。

打开一个程序

最简单的场景就是启动外部程序。路径中有空格时,外层命令参数要处理好引号。

#Requires AutoHotkey v1.1
Run, notepad.exe

如果是具体路径,推荐先放到变量里,后续排错更容易。

exe := "C:\Windows\System32\notepad.exe"
Run, %exe%

等待程序执行完:RunWait

如果你调用的是转换工具、命令行程序、打包工具,后续代码依赖它执行完成,就不要用 Run,应该用 RunWait

tool := A_ScriptDir "\tools\convert.exe"
input := A_ScriptDir "\in.txt"
output := A_ScriptDir "\out.txt"

RunWait, "%tool%" "%input%" "%output%", %A_ScriptDir%
MsgBox, 转换完成

拿到进程 PID

Run 可以把新进程的 PID 输出到变量里。后续你可以用 PID 来等待窗口、判断进程是否还在。

Run, notepad.exe,,, pid
WinWait, ahk_pid %pid%,, 5

if ErrorLevel
    MsgBox, 记事本窗口没有出现
else
    MsgBox, % "PID:" pid

Process 用来查和管进程

如果你的目标不是窗口,而是进程本身,Process 更直接。例如判断某个程序是否运行。

Process, Exist, notepad.exe
if ErrorLevel
    MsgBox, 记事本正在运行,PID:%ErrorLevel%
else
    MsgBox, 记事本没有运行

不要把 Run 当成万能自动化

Run 只负责启动,不负责后续操作。启动以后要点按钮、输入文本、等窗口出现,就要回到窗口控制、控件控制、剪贴板、浏览器自动化这些路线。

 

站内延伸

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。