« unixコマンド擬似バッチファイル(nl,wc-l,tail,reverse,head) | トップページ | unix tee擬似バッチファイル »

2006年9月13日 (水)

VB6アプリやEXCEL VBAなどのWindowsアプリから標準入出力を使用する方法

VB6アプリやEXCEL VBAなどのWindowsアプリから、(Win32APIを使わないと)、
標準入出力が使えない、と思ってませんか?

VB6やVBAには、Scripting.FileSystemObjectが装備されていて、
そのGetStandardStreamメソッドを使えば、VB6アプリ、EXCEL VBA、WSH(WScript.exe)、
HTA(mshta.exe)、HTML(IE)など、Windowsアプリからも標準入出力が使えます。

仕様は以下にあります。
http://msdn.microsoft.com/library/en-us/script56/html/6ae9a1dc-35ae-4e06-94b2-1578ba153fce.asp?frame=true

Function GetStandardStream(StandardStreamType As StandardStreamTypes, [Unicode As Boolean]) As TextStream
    Retrieve the standard input, output or error stream

StandardStreamType
0 標準入力
1 標準出力
2 標準エラー

Unicode
False シフトJIS
True Unicode (バイナリで読み書きしたいときに、これで代用したりします。)

アプリを起動するときの注意は、
標準入出力がコンソールだと、Windowsアプリの起動時に、OSが閉じてしまうので、
この条件を避けること。

標準入出力がパイプやファイルにリダイレクションされていれば、閉じられません。

Windowsアプリに関連付けされているファイルを、関連付けで起動しても駄目です。
アプリから起動すること。

つまり、例えば、Excelファイルを起動するときは、

Excel.exe hoge.xls <stdin >stdout 2>stderr

more|Excel.exe hoge.xls 2>&1 |more

などのようにします。

次は、これを利用したunix tee擬似を紹介します。

« unixコマンド擬似バッチファイル(nl,wc-l,tail,reverse,head) | トップページ | unix tee擬似バッチファイル »