« WScript.ShellのExec()で、コンソールアプリを非表示で実行するラッパー | トップページ | コンソールアプリを非表示で実行するラッパーをVB.NETで作る。 »

2008年8月24日 (日)

WScript.ShellのExec()で、コンソールアプリを非表示で実行するラッパー(その2)

このラッパーをWScript.ShellのExec()で使うには、

Set oExec=wShell.Exec("コンソールアプリ [引数...]")

の代わりに、

Set oExec=wShell.Exec("WScript.exe ""フルパス\HideExec.VBS"" コンソールアプリ [引数...]")
(もし入力があれば、oExec.Writeなど)
oExec.StdIn.Close

とします。

使用例(1)

Set wShell=CreateObject("WScript.Shell")
Set oExec=wShell.Exec("WScript.exe HideExec.VBS more")
oExec.StdIn.WriteLine "aaa"
oExec.StdIn.WriteLine "bbb"
oExec.StdIn.Close
MsgBox oExec.StdOut.ReadAll,,"StdOut"
MsgBox oExec.StdErr.ReadAll,,"StdErr"

入力は最初にまとめて与えます。ラッパーの都合で、会話的にはできません。

使用例(2)

Set wShell=CreateObject("WScript.Shell")
Set oExec=wShell.Exec("WScript.exe HideExec.VBS fc")
oExec.StdIn.Close
MsgBox oExec.StdOut.ReadAll,,"StdOut"
MsgBox oExec.StdErr.ReadAll,,"StdErr"

ラッパーの都合で、入力がなくても、最初にoExec.StdIn.Closeしないと駄目です。

また、スクリプトホストの設定に関係なく、WScript.exeを指定しないと駄目です。
関連付けの起動では、標準入出力がinheritされないからです。

« WScript.ShellのExec()で、コンソールアプリを非表示で実行するラッパー | トップページ | コンソールアプリを非表示で実行するラッパーをVB.NETで作る。 »