WScript.ShellのExec()でコンソールアプリを非表示で実行する。
WScript.ShellのExec()でコンソールアプリを実行すると、
コンソールウィンドウが表示されます。それを非表示にする方法です。
コンソールウィンドウがない環境、つまり、WScript.exeからExec()で
コンソールアプリを起動すると、コンソールウィンドウが生成されます。
コンソールウィンドウがある環境、つまり、CScript.exeからExec()で
コンソールアプリを起動すると、コンソールウィンドウは生成されません。
これを利用すれば、Exec()でコンソールアプリを非表示で実行できます。
つまり、WScript.exeからRun()で、CScript.exeを非表示で起動し、
その中からExec()でコンソールアプリを起動すればよいのです。
基本的にはRun()するスクリプトとExec()するスクリプトの二つが必要ですが、
WSFでひとつのファイルにしたり、再帰呼び出しで一本化することもできます。
以下のWSFは、そういうサンプルです。
<package>
<job>
<script language=vbscript>
Dim Args
Dim Arg
Args=Array("CScript.exe //job:exec","""" & WScript.ScriptFullName & """")
For Each Arg In WScript.Arguments
ReDim Preserve Args(UBound(Args)+1)
Args(UBound(Args))="""" & Arg & """"
Next
WScript.Quit CreateObject("WScript.Shell").Run(Join(Args),0,True)
</script>
</job>
<job id=exec>
<script language=vbscript>
Dim wShell
Dim oExec
Dim Args
Dim Arg
Args=Array("fc.exe")
For Each Arg In WScript.Arguments
If InStr(Arg," ") Then Arg="""" & Arg & """"
ReDim Preserve Args(UBound(Args)+1)
Args(UBound(Args))=Arg
Next
Set wShell=CreateObject("WScript.Shell")
Set oExec=wShell.Exec(Join(Args))
MsgBox oExec.StdErr.ReadAll() & vbLf & oExec.StdOut.ReadAll(),,Join(Args)
</script>
</job>
</package>
fc.exeの代わりにfc.wsfで試してみてください。
« バッチファイルなどをショートカットで非表示実行する。 | トップページ | バッチファイルで作るtail -fコマンド »