WScript.Shell AppActivate并非每次都起作用

时间:2018-09-18 08:05:00

标签: batch-file vbscript wsh

我有一些脚本可以帮助您在CMD中运行程序。启动序列的第一个脚本在启动时运行。在此过程中,我正在运行一个VBScript,试图将其重点放在CMD上并使其全屏显示。但是,有时它可以工作,有时却不起作用,我什么也没做,只是一遍又一遍地重启计算机。它并不总是专注于cmd窗口,因此问题应该出在AppActivate方法上。

这是启动时运行的第一个脚本的代码:

@echo off
TITLE masterBat
START "Master" /B /W myApp.bat
shutdown.exe /s /t 00

这是myApp.bat的代码:

@echo off
cscript fullscreen.vbs
cd <path>
CMD /C <command>
exit

这是fullscreen.vbs的代码:

Set ws = WScript.CreateObject("WScript.Shell")
ws.AppActivate "masterBat - myApp.bat"
ws.SendKeys "{F11}"
Set ws = Nothing

当我尝试使其全屏显示时,AppActivate调用中的标题就是cmd上的标题。我还尝试在脚本中添加一些WScript.Sleep调用,但这似乎无济于事。

1 个答案:

答案 0 :(得分:1)

Wscript.sleep将使情况变得更糟。你不想睡觉。

有规则。您的程序必须遵守以下规则之一才能设置前景窗口。

来自https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setforegroundwindow

  

系统限制可以设置前景窗口的进程。仅当满足以下条件之一时,进程才能设置前景窗口:

     

•该过程是前台过程。

     

•该进程由前台进程启动。

     

•该进程收到了最后一个输入事件。

     

•没有前台进程。

     

•该进程正在调试中。

     

•前台过程不是现代应用程序或启动程序   屏幕。

     

•前景未锁定(请参见LockSetForegroundWindow)。

     

•前景锁定超时已到期(请参阅   SystemParametersInfo中的SPI_GETFOREGROUNDLOCKTIMEOUT。)

     

•没有菜单处于活动状态。

     

当用户使用时,应用程序无法将窗口强制到前台   正在使用另一个窗口。而是,Windows闪烁任务栏   窗口中的按钮以通知用户。

这意味着如果脚本没有用户界面(因为它不能是前台窗口),那么从脚本开始设置另一个窗口起,您有两秒钟的时间(FOREGROUNDLOCKTIMEOUT)。一个消息框是您要做的第一件事(直到发生其他事情)。另外Wscript的消息框超时-WshShell.Popup

这是为了防止用户感到无聊并且现在正在使用另一个程序时启动缓慢的程序,从而失去了焦点。

预防性评论通常,人们会想与我争论。向微软投诉不是我。而且你不能与规则争论。您可以遵守它们。