Shell関数によるプログラムの実行結果を参照するには?


tisan  2003-02-19 18:44:26  No: 77143

vb質問030219

あるステップでShell関数によってプログラムを起動し、それよって生成されるファイルを次のステップで開いて参照する場合、ファイルが生成するまで待機するにはどうすればよいのでしょうか?

次のようなコードでは、ファイルを参照できません。
MyPath="c:\中略\myprogram.exe" 'myresult.txtを生成するプログラム
RetVal = 0
RetVal = Shell(MyPath, 1)
For j=0 to 100000 'このように待機させても効果がありません
Next
MyPath="c:\中略\myresult.txt"
If RetVal <> 0 Then
    Open MyPath For Input As #1
        Line Input #1, MyText
    Close #1
  MsgBox "MyText=" & MyText
Else
    MsgBox "MyTextが生成できませんでした"
End If
しかしながら、myrogram.exeの実行結果としてmyresult.txtは生成されていて、イミディエートウィンドウではRetValは0以外の値になります。


nanashi  2003-02-19 19:29:39  No: 77144

MyPath="c:\中略\myprogram.exe" 'myresult.txtを生成するプログラム
RetVal = 0
RetVal = Shell(MyPath, 1)

MyPath="c:\中略\myresult.txt"

Do Until (Len(Dir$(MyPath)) > 0)
Loop

If RetVal <> 0 Then
    Open MyPath For Input As #1
        Line Input #1, MyText
    Close #1
MsgBox "MyText=" & MyText
Else
    MsgBox "MyTextが生成できませんでした"
End If

これでどう?


nanashi  2003-02-19 19:31:29  No: 77145

あ、ごめん間違えた。
Do〜LoopをOpenの前に移動して。


魔界の仮面弁士  2003-02-20 05:28:32  No: 77146

Shell関数で無くても良いのであれば、かわりに
WSHShell.Runメソッドを使ってみては如何でしょう。

' RetVal = Shell(MyPath, vbNormalFocus)

RetVal = CreateObject("WSCript.Shell").Run(MyPath, vbNormalFocus, True)

Runメソッドの第3引数にTrueを指定しておけば、
起動したプログラムが終了するまで、
呼出側の処理を待機させることができます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加