我建议这个任务使用批处理文件:
@echo off
start "" /max firefox.exe
if errorlevel 1 goto :EOF
set LoopCount=0
:WaitLoop
%SystemRoot%\System32\timeout.exe /T 5
%SystemRoot%\System32\tasklist.exe /FI "IMAGENAME eq firefox.exe" 2>nul | %SystemRoot%\System32\find.exe /I "firefox.exe" >nul
if not errorlevel 1 nircmd.exe sendkeypress F11 & goto :EOF
set /A LoopCount+=1
if not %LoopCount% == 6 goto WaitLoop
让我解释一下这里使用的几个命令行。
1。启动 Firefox
命令START 是cmd.exe 的内部命令,将第一个双引号字符串解释为控制台窗口的可选标题。因此命令行
start "C:\Program Files (x86)\Mozilla Firefox\firefox.exe"
结果只是打开一个新的控制台窗口,窗口标题为:
C:\Program Files (x86)\Mozilla Firefox\firefox.exe
因此,"" 被指定为第一个 START 参数以定义一个空标题。 Firefox 是一个 GUI 应用程序。所以没有打开控制台窗口,这意味着一个空的窗口标题就足够了。
/max 参数实际上并不是必需的,但目标是让 Firefox 在启动后进入全屏模式。那么为什么不开始它已经最大化呢?
Firefox 的 32 位版本默认安装在 32 位 Windows 上的目录 %ProgramFiles% 和 64 位 Windows 上的 %ProgramFiles(x86)% 目录中。但是可以在安装过程中将 Firefox 安装到任何其他文件夹中。但 Firefox 安装程序编码良好,并在 Windows 注册表中注册 firefox.exe 键:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
这是微软在 MSDN 文章 Application Registration 中所推荐的。
命令 START 还在 Windows 注册表中的此键下搜索指定为不带路径的参数的可执行文件,如Where is “START” searching for executables? 的回答中所述
这就是在 START 命令行上仅使用 firefox.exe 的原因,因为这会启动独立于安装位置的已安装 Firefox。
START 如果firefox.exe 无法启动并在这种情况下以大于 0 的返回码(我在一台计算机上的测试中为 9059)退出,则会显示一个适当的消息框。
在命令提示符窗口中运行if /? 的帮助输出解释了如何在不使用即时或延迟环境变量扩展的情况下评估先前命令或应用程序的退出代码,从而在 MS-DOS 的批处理文件中的任何位置工作(真的!)到当前最新的 Windows 10。
命令行if errorlevel 1 goto :EOF 表示IF start 无法启动firefox.exe 由退出代码指示大于或等于1 THEN 退出执行此批处理文件.有关退出批处理文件执行的详细信息,请参阅Where does GOTO :EOF return to? 上的答案
2。检查正在运行的 Firefox
命令TASKLIST为外部命令,即Windows系统目录下的控制台应用程序,输出正在运行的进程列表。此列表已由 TASKLIST 本身过滤,用于特定进程,如在批处理文件中使用/FI "IMAGENAME eq firefox.exe" 完成的那样。
但 TASKLIST 仅用于打印进程列表。它不是为检查特定进程是否正在运行并通过退出代码将结果返回给调用进程而设计的。 TASKLIST 总是以 0 退出。
但是在使用过滤器时会输出一条错误消息来处理STDERR,并且在与该过滤器匹配的进程列表中找不到进程。出于这个原因,2>nul 用于通过将其重定向到设备 NUL 来抑制此错误消息。阅读有关 Using Command Redirection Operators 的 Microsoft 文章,了解有关重定向的更多信息。
在检查运行 Firefox 时获得简单的 false/true 和 0/1 结果的简单方法是使用外部命令 FINDTASKLIST 的输出/strong> 如果确实找到了要查找的字符串,则以 0 退出;如果在这种情况下从 STDIN 读取的文本中找不到所搜索的字符串,则以 1 退出。 FIND 的输出没有意义,因此使用 >nul 重定向到设备 NUL 来抑制。
除了使用 TASKLIST 和 FIND 之外,还可以使用 QPROCESS:
%SystemRoot%\System32\qprocess.exe firefox.exe >nul 2>&1
如果在正在运行的进程列表中找不到
firefox.exe,
QPROCESS 会以退出代码1 退出。否则退出代码是 0 on firefox.exe is running。
3。评估 Firefox 进程检查结果
if not errorlevel 1 nircmd.exe sendkeypress F11 & goto :EOF
IF 命令检查 FIND 的退出代码是否不大于或等于 1,这意味着退出代码是否低于1。命令 FIND 永远不会以负值退出。因此,如果此条件为真,那么是时候执行nircmd.exe 将按键 F11 发送到前台应用程序,希望是 Firefox(此代码不能保证)并退出批处理文件。
否则批处理文件应该再次等待 5 秒,然后再次进行检查。如果用户在 5 秒等待超时之前立即关闭启动的 Firefox,这很容易导致无限运行的批处理文件。出于这个原因,它计算了等待循环已经执行的频率。在 6 次循环运行后,或 30 秒后,真的是时候不再等待 Firefox 并退出批处理文件了。
4。获取有关使用的命令的更多信息
要了解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并仔细阅读每个命令显示的所有帮助页面。
echo /?
find /?
if /?
qprocess /?
set /?
start /?
tasklist /?
timeout /?
除了上面已经引用的所有其他网页之外,还应阅读 Single line with multiple commands using Windows batch file 解释运算符 &。