1

アクティブなプロセスが終了するのを待つ方法を理解するために、次のコードを使用しています。
私のコードでは、メモ帳が開いたときに MessageBox が表示されます。

フォームが応答しなくなることなく、メモ帳が閉じられるまで待つにはどうすればよいですか?

Public Class Form1
    Private Const WAIT_INFINITE = -1&
    Private Const SYNCHRONIZE = &H100000

    Private Declare Function OpenProcess Lib "kernel32" _
  (ByVal dwDesiredAccess As Long,
   ByVal bInheritHandle As Long,
   ByVal dwProcessId As Long) As Long

    Private Declare Function WaitForSingleObject Lib "kernel32" _
  (ByVal hHandle As Long,
   ByVal dwMilliseconds As Long) As Long

    Private Declare Function CloseHandle Lib "kernel32" _
  (ByVal hObject As Long) As Long

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim hProcess As Long
        Dim taskId As Long
        Dim cmdline As String

        cmdline = "notepad.exe"
        taskId = Shell(cmdline, vbNormalFocus)

        hProcess = OpenProcess(SYNCHRONIZE, True, taskId)
        Call WaitForSingleObject(hProcess, WAIT_INFINITE)
        CloseHandle(hProcess)

        MsgBox ("The shelled app has ended.")
    End Sub
End Class
4

2 に答える 2