VBScriptの中でC言語で作成した別のexeファイルを実行
させたいのですが、やり方が分かりません。
中で起動させるプログラム(exe)には起動時に引数が必要です。
Cprogram.exe A B C
こんな感じです。
このプログラムの処理が終わってから次の処理に移りたいので
このプログラムの終了したことを感知する必要があるのです。
何卒宜しくお願いします。
Windows Scripting Host 上で実行しているのなら、
WshShellオブジェクトで実現可能です。
早速のフォロー有難うございます。
型が一致しません"WshShell"
というエラーが出ます。
VBScriptの実行方法は.vbsという拡張子のファイルを
ダブルクリックして行っています。
原因はコードをみないことにはわかりませんが・・・。
例えば、コマンドライン引数を取得してテキストボックスに表示する
VBのExe D:\Say\Command\Project1.exe があったとします。
このExeに文字列"ABCDE"をコマンドラインにわたすには、
メモ帳か何かで
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "D:\Say\Command\Project1.exe ABCDE",,True
Set WshShell = Nothing
MsgBox "おわったよん"
というスクリプトを書いて、WshShellTest.vbs とかいう名前で
保存して、保存したファイルをダブルクリックすれば実行されます。
開いたWindowを閉じると、"おわったよん"とダイアログに表示します。
・・・って、この回答、そのまま「Visual Basic 初心者掲示板」の
「コマンドライン引数を渡すには?」の回答に使えるんでないかい?
戻り値がほしいときは、Runメソッドでなく、Execメソッドを使います。
ただし、Execメソッドを使うにはWSHの最新版(Ver5.6)が必要です。
VBで標準出力させるのは面倒なので、
とりあえず、BorlandC++でサンプル作ってコンパイルしました。
//Cサンプル
#include <stdio.h>
int main(int argc , char *argv[])
{
int i ;
char j[10] ;
for (i = 1; i < argc; i++){
j[i - 1] = *argv[i] ;
}
j[i + 1] = 0 ;
printf("%s\n",j);
return 0 ;
}
コマンドライン引数をくっつけて、標準出力に吐くだけですね。
これをコンパイルして、D:\Say\CWORK\BCCWORK\cmdparam\cmdparam.exe に置きました。
これに、 1 2 3 という引数渡すスクリプトを書いてみます。
出力は 123 になるはずです。
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objExec = WshShell.Exec("D:\Say\CWORK\BCCWORK\cmdparam\cmdparam.exe 1 2 3")
Do While objExec.Status = 0
WScript.Sleep 100
Loop
MsgBox objExec.StdOut.Read(3)
Set objExec = Nothing
Set WshShell = Nothing
というスクリプトを書いて、WshShellTest2.vbs とかいう名前で
保存して、保存したファイルをダブルクリックすれば実行され、
"123"とダイアログに表示します。
出来ました!
バッチリです。
Sayさん本当に有難う御座いました。
感謝!感謝!
解決時にはちゃんとチェックしておきましょう。
どなたか知りませんが、「騙り」は禁止行為です。 ↑
ツイート | ![]() |