起動したプログラムが終了したのかを知るには

解決


初心者  2003-08-20 11:15:35  No: 79088  IP: [192.*.*.*]

VB6.0においてshell関数を使用して、
プログラムを起動しているのですが、
起動側のプログラムは起動したプログラムが、
終了するまで終了をしない様に、
したいのですが、shell関数では、
その様な状態を取得するのは、
可能でしょうか?
アドバイスをよろしくお願いします。

編集 削除
魔界の仮面弁士  2003-08-20 11:44:53  No: 79089  IP: [192.*.*.*]

Shell関数ですと、APIで判定しなければいけませんので、かわりに
WshShellオブジェクトのRunメソッドを利用されては如何でしょう。

  MsgBox strCommandLine & "を起動します。"
  ret = CreateObject("WScript.Shell").Run(strCommandLine, vbNormalFocus, True)
  MsgBox "終了しました。リターンコードは" & CStr(ret) & "です。"

編集 削除
Take1  2003-08-20 12:29:26  No: 79090  IP: [192.*.*.*]

さすがです魔界の仮面弁士さん。
余談ですがいつも勉強させていただいてます。
ありがとうございます。
ちなみにShellを使うとこんなにややこしい事になります。

'プロセスのハンドルを取得
Private Declare Function OpenProcess Lib "kernel32" _
    (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
     ByVal dwProcessId As Long) As Long

Private Const PROCESS_QUERY_INFORMATION = &H400&

'プロセスの終了を取得
Private Declare Function GetExitCodeProcess Lib "kernel32" _
    (ByVal hProcess As Long, lpExitCode As Long) As Long

Private Const STILL_ACTIVE = &H103&

'ハンドルの開放
Private Declare Function CloseHandle Lib "kernel32" _
    (ByVal hObject As Long) As Long


Private Sub Command1_Click()
  Dim mhWnd As Long
  Dim proID As Long
  Dim mEnd As Long
     mhWnd = Shell(Text1.Text, vbNormalFocu)
     proID = OpenProcess(PROCESS_QUERY_INFORMATION, 1, mhWnd)

      Do
        GetExitCodeProcess proID, mEnd
        DoEvents
      Loop While mEnd = STILL_ACTIVE

      CloseHandle proID
      
      Unload Me
End Sub

編集 削除
初心者  2003-08-20 14:25:00  No: 79091  IP: [192.*.*.*]

魔界の仮面弁士さん、Take1さん有難うございました。

2つとも確認してみましたがどちらも上手く動作しました。
いろんな方法があるんですね。
今後ともよろしくお願いします。

編集 削除