这是我在Windows 10任务计划程序中遇到的一个问题。
我创建了一个基本任务,其操作是启动一个批处理文件,如下所示:
start "BitComet" "C:\Program Files\BitComet\BitComet.exe"
start "Bandicam" "C:\Program Files (x86)\Bandicam\bdcam.exe" /record
当我在 Windows 资源管理器中双击运行批处理文件时,两个 GUI 应用程序按预期在前台运行。
如果我通过 1) 右键单击任务,2) 左键单击弹出菜单中的“运行”菜单项在任务计划程序中运行它,则这两个应用程序将在后台运行,我可以在任务管理器的“进程”选项卡的“后台进程”列表中观察到它们。
我想在前台而不是后台运行这两个 GUI 应用程序,因为我需要录制屏幕。我已经检查了任务属性对话框中我知道的所有选项,但没有找到在前台运行批处理文件(依次运行其中的两个应用程序)的方法。我使用批处理文件是因为这是我能想到的唯一在单个计划任务中同时运行两个应用程序的方法。
您能告诉我如何让两个 GUI 应用程序由计划任务触发在前台运行吗?谢谢。
答案1
当安排运行 GUI 任务时,安全性和隐私很重要。如果屏幕当前由另一个用户 B 使用,并且由于 GUI 窗口可能包含 A 的私人信息,因此只能由用户 A 运行安排的任务,如果任务在前台运行,则安全性和隐私会受到侵犯。因此,即使任务是 GUI 应用程序,也必须在后台运行而不显示任何窗口。
因此,解决方案非常简单:使 A=B。也就是说,在任务属性对话框的常规选项卡的安全选项中选择“仅在用户登录时运行”。我之前选择了“无论用户是否登录都运行”,因为我担心正确的用户登录的时间不够,因此任务可能无法启动。在“无论...都运行”选项下,任务计划程序会阻止窗口显示,以防屏幕当前被其他用户使用。我不得不说,用户界面中的措辞非常具有误导性。无论如何,通过从“无论...都运行”切换到“仅在...时运行”,两个 GUI 应用程序通过任务计划的批处理文件按预期在前台运行。
答案2
这些是规则https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setforegroundwindow。
系统限制哪些进程可以设置前台窗口。仅当下列条件之一为真时,进程才可以设置前台窗口:
•该进程是前台进程。
•该进程由前台进程启动。
•该进程收到了最后一个输入事件。
•没有前台进程。
•该进程正在调试。
•前台进程不是现代应用程序或开始屏幕。
•前景未被锁定(参见LockSetForegroundWindow)。
•前台锁超时已过期(请参阅 SystemParametersInfo 中的 SPI_GETFOREGROUNDLOCKTIMEOUT)。
•没有活动菜单。
笔记:任务计划程序永远不是前台进程。
热键是系统键,因此始终有效。以下面的例子为例,使用 sendkeys 将 Ctrl+N 发送到任何应用程序都会激活记事本。这是绕过设置活动窗口限制的一种方法。看HotkeyToWindow.exe 为窗口分配热键。按下后将激活该窗口。在https://winsourcecode.blogspot.com/2021/03/hotkeytowindowexe-assigns-hotkey-to.html。
参见 vbscript sendkeys
。
答案3
只有一个应用程序可以获得焦点。
尝试这个:
启动程序字段:C:\WINDOWS\System32\cmd.exe
参数字段:/c start "BitComet" "C:\Program Files\BitComet\BitComet.exe"
这基本上会打开cmd.exe
并向其传递参数。/c
参数将运行这些参数然后关闭,同时start
将焦点放在它启动的任何内容上。
答案4
任务计划程序任务可以有多个操作。创建多个操作,每个要启动的应用程序一个操作。