vbscript可以隐藏启动它的控制台吗?

时间:2015-03-04 11:34:08

标签: windows vbscript

我从命令行启动了一个像这样的vbscript:

  

cscript.exe myscript.vbs

我可以在myscript.vbs中添加一些内容来隐藏启动它的控制台吗?

2 个答案:

答案 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/