GetExitCodeProcess関数は、WindowsAPIの1つで、対象のアプリケーションが終了するまでプログラム実行を待機させる事が可能です。
API宣言
ExcelVBAでは、GetExitCodeProcess関数を使用する前にAPI宣言を行う必要があります。API宣言を行うことで、ExcelVBAがWindowsAPI関数を認識することができるようになります。API宣言は次のように行います。
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
解説
パラメータ | 内容 |
Lib | 使用する動的リンクライブラリ(DLL)の名前を指定します。ここでは "kernel32.dll"となります。 |
引数については以下の通りです。
引数 | 内容 |
hProcess | 対象のプロセスのハンドル(識別子)を指定します。 |
lpExitCode | プロセスの終了コードが格納される変数を指定します。 |
使い方
具体的な使い方を紹介します。
1.対象となるプロセスのハンドルと終了コードを取得する変数を用意します。
Dim processHandle As Long
Dim exitCode As Long
Dim exitCode As Long
2.プロセスの終了コードを取得するためにGetExitCodeProcess関数を呼び出します。
GetExitCodeProcess processHandle, exitCode
これで、exitCodeに対象のプロセスの終了コードが格納されます。
プログラミング例
以下に、プログラミング例を紹介します。
Sub WaitForNotepad()
Dim processHandle As Long
Dim exitCode As Long
' Notepadを起動
Shell "notepad.exe", vbNormalFocus
' Notepadのプロセスハンドルを取得する待機処理(省略)
' ...
Do
' プロセスの終了コードを取得
GetExitCodeProcess processHandle, exitCode
DoEvents ' 他のイベントを処理するために必要
' 終了コードがSTILL_ACTIVE(プロセスがまだ終了していない)なら待機
Loop While exitCode = &H103
End Sub
Dim processHandle As Long
Dim exitCode As Long
' Notepadを起動
Shell "notepad.exe", vbNormalFocus
' Notepadのプロセスハンドルを取得する待機処理(省略)
' ...
Do
' プロセスの終了コードを取得
GetExitCodeProcess processHandle, exitCode
DoEvents ' 他のイベントを処理するために必要
' 終了コードがSTILL_ACTIVE(プロセスがまだ終了していない)なら待機
Loop While exitCode = &H103
End Sub
この例では、Shell関数でNotepadを起動し、その後GetExitCodeProcess関数を用いてプロセスの終了を待機しています。
おわりに
GetExitCodeProcess関数を使用することで、外部アプリケーションの終了を待機するなど、プロセスの監視に役立つ機能を利用することができます。是非活用してください。