• ベストアンサー

別プログラムの終了監視

VisualBasic6.0で別プログラムの終了を監視することはできませんか? 具体的に言うと、ACCESS2000で作ったアプリケーションからVB6.0で作ったEXEを起動させてそのEXEから起動元のACCESSアプリケーションの終了を監視するというものです。 いろいろやってはいるのですがうまくいきません。 誰か教えてください!

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

↓こんな感じかな。汚いけど解読してね。 Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Const STANDARD_RIGHTS_REQUIRED = &HF0000 Const SYNCHRONIZE = &H100000 Const STILL_ALIVE = &H103& ************** Private Sub 監視します(ByVal MyID As Long) Dim lFlag As Long Dim ret As Long, ret1 As Long Dim l As Long Dim lCheckID as long lCheckID = lGet_ID("監視したいフォームキャプション") If lCheckID= 0 Then 'そんなフォームないよ。だからおわり。   Exit Sub End if lFlag = STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or &HFFF ret = OpenProcess(lFlag, False, lCheckID) Do ret1 = GetExitCodeProcess(ret, l) If Not (l = STILL_ALIVE) Then 'フォームがなくなったよ!! Exit Do End If DoEvents     'フォームがあるからずーーとループして監視 Loop End Sub '*************************** Private Function lGet_ID(MyCaption As String) As Long Dim st As String Dim ret As Long, ret1 As Long Dim lProcessId As Long ret = FindWindow(st, MyCaption) If ret Then GetWindowThreadProcessId ret, lProcessId ret1 = PostMessage(ret, WM_CLOSE, 0, 0) 'プロセスID取得!! lGet_ID = lProcessId Exit Function End If   'プロセスID取得できません!!  lGet_ID = 0 End Function

kinaneko
質問者

お礼

ありがとうございました。おかげでうまく動きました!

その他の回答 (2)

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.3
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

検索キー:終了 待機

参考URL:
http://www.vbvbvb.com/jp/gtips/

関連するQ&A