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

解決


初心者  2003-08-20 20:15:35  No: 79088

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


魔界の仮面弁士  2003-08-20 20:44:53  No: 79089

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

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


Take1  2003-08-20 21:29:26  No: 79090

さすがです魔界の仮面弁士さん。
余談ですがいつも勉強させていただいてます。
ありがとうございます。
ちなみに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 23:25:00  No: 79091

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

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


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

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






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