2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« 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で作る。 »