VBレスキュー(花ちゃん)
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ各掲示板

リンク元へ戻ります。 アプリケーション(自・他)関係のメニュー
1.VB上から他の実行可能プログラム(EXE)を起動する
2.指定のウィンドウを常に手前に表示する(フォームを最前面に表示)
3.関連付けられたアプリケーションでファイルを開く
4.他のアプリのウィンドウを操作(最小化・元のサイズ・終了他)する
5.他のEXEのハンドルを取得しVBから終了する
6.Shell関数で起動したプログラムの終了を待つ
7.アクティブウィンドウのキャプションタイトルを取得する
8.アクティブウィンドウにキーストロークを渡す
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.


6.Shell関数で起動したプログラムの終了を待つ
1.Shell関数で起動したプログラムの終了を待つ(Win32API 関数を使った方法)
2.Shell関数で起動したプログラムの終了を待つ(WshShell オブジェクトを使った方法)
3. 
4. 
5. 
6. 

 下記プログラムコードに関する補足・注意事項 
動作確認:Windows Vista・Windows 7 (32bit) / VB6.0(SP6)
Option :[Option Explicit]
参照設定:MyWaitDll
使用 API:
OpenProcess GetExitCodeProcess CloseHandle
その他 :このサンプルは、 Win32 APIを使用しておりますので、ある程度Win32 API が理解できる方がお使い下さい。
    :
このページのトップへ移動します。 1.Shell関数で起動したプログラムの終了を待つ(074)   2002.05.16

Option Explicit 

'既存のプロセスオブジェクトのハンドルを取得(P665)
Private Declare Function OpenProcess Lib "kernel32" _
  (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
  ByVal dwProcessId As Long) As Long
'指定のプロセスの終了コードを取得(P660)
Private Declare Function GetExitCodeProcess Lib "kernel32" _
  (ByVal hProcess As Long, lpExitCode As Long) As Long
'開かれているオブジェクトのハンドルを解放する(P1252)
Private Declare Function CloseHandle Lib "kernel32" _
  (ByVal hObject As Long) As Long
Private Const PROCESS_QUERY_INFORMATION = &H400&
Private Const STILL_ACTIVE = &H103&

Private Sub ShellEnd(ProcessID As Long)
  Dim hProcess As Long
  Dim EndCode As Long
  Dim EndRet  As Long
  'ハンドルを取得する
   hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 1, ProcessID)
  '終わるまで待つ
  Do
    EndRet = GetExitCodeProcess(hProcess, EndCode)
    Wait 50     '指定時間待つ、待機関数 を参照
    ' DoEvents    'CPU 使用率がUPします。
  Loop While (EndCode = STILL_ACTIVE)
  'ハンドルを閉じる
   EndRet = CloseHandle(hProcess)
End Sub

Private Sub Command1_Click()
'メモ帳を起動し、終了したら電卓を起動する
  Dim Ret1 As Long
  Dim Ret2 As Long
  Ret1 = Shell("C:\windows\system32\notepad.exe", 1)
  'Ret1 = Shell("C:\WINDOWS\notepad.exe", 1)
  ShellEnd (Ret1)    '終了するまで待機
  MsgBox ("メモ帳が終了しました。")

  Ret2 = Shell("C:\windows\system32\CALC.EXE", 1)
  'Ret2 = Shell("C:\WINDOWS\CALC.EXE", 1)
  ShellEnd (Ret2)
  MsgBox ("電卓が終了しました。")
End Sub

このページのトップへ移動します。 2.Shell関数で起動したプログラムの終了を待つ(WshShell オブジェクトを使った方法)

Private Sub Command2_Click()
'WshShell オブジェクトを使った方法(こちらの方が簡単)
  Dim objWshShell As Object
  Dim Ret     As Long
  Set objWshShell = CreateObject("WScript.Shell")
  Ret = objWshShell.Run("C:\windows\system32\notepad.exe", 1, True)
  MsgBox ("メモ帳が終了しました。")
  Ret = objWshShell.Run("C:\windows\system32\CALC.EXE", 1, True)
  Set objWshShell = Nothing
  MsgBox ("電卓が終了しました。")
End Sub

WshShell オブジェクトが使える環境ならこちらの方が簡単ですのでこちらのサンプルをご利用下さい。

このページのトップへ移動します。 3.


このページのトップへ移動します。 4.


このページのトップへ移動します。 5.


このページのトップへ移動します。 6.


このページのトップへ移動します。 検索キーワード及びサンプルコードの別名(機能名)
外部アプリが終了するまで待機 プログラムが終了したかどうかを判断する VBから起動したプログラムが終了したかどうか確認する 起動したアプリケーションの終了を取得する




このページのトップへ移動します。