如何仅在指定程序组均未运行时执行计划任务?
如何仅在指定程序组均未运行时执行计划任务?
嘿,你这个需求完全可以搞定!不过直接靠Task Scheduler自带的自定义事件过滤器来实现可能有点绕,我给你两种实用方案,你按需选择:
方案一:脚本前置判断(推荐)
这种方法最灵活可靠,核心思路是先写个脚本检查所有目标Adobe程序是否都没在运行,只有符合条件时才启动TaskbarToggle.exe,然后让Task Scheduler触发这个脚本就行。
选项1:PowerShell脚本
把下面的代码保存成RunTaskbarToggle.ps1(记得替换成你实际的TaskbarToggle.exe路径):
# 定义需要检查的进程名(请对照任务管理器确认准确的.exe名称) $targetProcesses = @("photoshop.exe", "illustrator.exe", "audition.exe", "premierepro.exe", "indesign.exe", "incopy.exe") # 检查是否有任何目标进程在运行 $runningProcesses = Get-Process -Name $targetProcesses -ErrorAction SilentlyContinue if (-not $runningProcesses) { # 所有目标进程都未运行,执行目标程序 Start-Process "C:\Your\Path\To\TaskbarToggle.exe" }
然后在Task Scheduler里创建任务:
- 触发条件设置成你需要的(比如用户登录、系统启动,或者某个特定事件)
- 操作选择「启动程序」,程序/脚本填
powershell.exe,添加参数填:-ExecutionPolicy Bypass -File "C:\Your\Path\To\RunTaskbarToggle.ps1"
选项2:批处理脚本
如果更习惯用批处理,也可以用这个:
@echo off :: 定义需要检查的进程名 set "targetProcesses=photoshop.exe illustrator.exe audition.exe premierepro.exe indesign.exe incopy.exe" set "hasRunningProcess=0" :: 逐个检查进程 for %%p in (%targetProcesses%) do ( tasklist /fi "imagename eq %%p" | find /i "%%p" >nul if not errorlevel 1 ( set "hasRunningProcess=1" goto :finishCheck ) ) :finishCheck if %hasRunningProcess% equ 0 ( start "" "C:\Your\Path\To\TaskbarToggle.exe" )
创建Task Scheduler任务时,操作里直接选这个批处理文件就行,不需要额外参数。
方案二:自定义事件过滤器(不推荐)
理论上可以通过Windows事件日志的自定义过滤器来实现,但局限性很大:
- 你需要基于进程创建(EventID 4688)和进程终止(EventID 4689)的事件,写复杂的XPath查询来判断所有目标进程都已终止且没有新启动的实例
- 这种方法无法实时检查当前进程状态,只能依赖事件日志的记录,容易出现遗漏(比如某个程序在任务触发后才启动,过滤器没法感知)
- 写XPath的逻辑非常繁琐,不如脚本直观可靠
所以除非你特别执着于纯Task Scheduler配置,否则强烈推荐方案一。
注意事项
- 一定要对照任务管理器确认每个Adobe程序的准确进程名(比如Premiere Pro的进程名是
premierepro.exe,不是带空格的全称) - 如果脚本执行权限有问题,记得给Task Scheduler的任务设置合适的权限(比如勾选「以最高权限运行」)
备注:内容来源于stack exchange,提问作者Bucolic.Chair
相关产品推荐
相关产品推荐

