dポイントプレゼントキャンペーン実施中!

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

A 回答 (3件)

↓こんな感じかな。

汚いけど解読してね。

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/02/26 09:53
    • good
    • 0

検索キー:終了 待機



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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!