我从命令行启动了一个像这样的vbscript:
cscript.exe myscript.vbs
我可以在myscript.vbs中添加一些内容来隐藏启动它的控制台吗?
答案 0 :(得分:0)
一般情况下,您可以使用sendkeys并发送序列 ALT + Space +来最小化Vbscript中的程序。无论哪个键都是用本地语言最小化的快捷键。 (您可以在GUI中通过按 ALT + Space 并在最小化选项中查找带下划线的字符来检查此内容)
在德语和英语中,这将是
wso.SendKeys "% n"
然而,这种方法对于cmd来说是错误的,并且自Windows XP以来无效。因此,我发现最好的解决方法是使用powershell.exe调用可怕的黑客攻击。
问题在于您的程序是否立即窃取了托管cmd.exe的焦点。如果没有,你可以插入
Set wso = CreateObject("WScript.Shell")
wso.SendKeys "powershell -windowstyle minimized -command """"{ENTER}"
如果你以某种方式失去对cmd的关注,你必须重新获得它。你可以通过使用:
来做到这一点Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
' WQL uses \ as escpae char so we need to escape it with an additional \
wmiScriptName = Replace(wscript.ScriptFullName, "\", "\\")
Set colProcesses = objWMIService.ExecQuery("Select * from Win32_Process Where CommandLine like '%" & wmiScriptName & "%'")
For Each objProcess in colProcesses
wso.AppActivate objProcess.ProcessId
wso.SendKeys "powershell -windowstyle minimized -command """"{ENTER}"
Next
这将最小化所有运行脚本的cmd,因此不应多次启动.WQL查询也不完美,因此如果您在记事本中编辑脚本,例如它也会检测到这一点并发送密钥那...如果这是一个用例,你认为你必须更准确地使用你的WQL查询(包括processname cscript.exe或其他东西)
这是一个非常黑客,但我想不出任何其他方式只在vbscript中这样做(遗憾的是一个外部调用是必要的,但没有代码执行和powershell.exe应该存在于任何地方)。如果您可以在powershell中执行整个脚本,例如可能有更好的方法。
答案 1 :(得分:0)
这是批处理文件吗?
如果是,如果那是唯一的一行,你可以把
EXIT
在您的代码之后,一旦vbscript打开,它将关闭控制台。
至于隐藏控制台,您可以从vbs运行批处理,如下所示:http://www.howtogeek.com/131597/can-i-run-a-windows-batch-file-without-a-visible-command-prompt/