●概要●
宣言文 Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess
As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long)
As Long
設定項目 内容
dwDesiredAccess アクセス方法を示すフラグとなる定数を組み合わせて指定[省略不可]
bInheritHandle 「1」を指定してカレントプロセスを継承[省略不可]
dwProcessId プロセスIDを指定[省略不可]
宣言文 Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long)
As Long
設定項目 内容
hObject オブジェクトハンドルを指定[省略不可]
OpenProcess関数では、引数で指定したプロセスIDを元にプロセスオブジェクトのハンドルを返します。失敗時には「0」を返します。プロセスIDにはShell関数の戻り値をそのまま利用できます。
CloseHandle関数は、引数で指定したオブジェクトハンドルを解放します。成功時には「0」以外を、失敗時には「0」を返します。
次のコードは、起動した電卓のプロセスオブジェクトのハンドルをメッセージダイアログで表示するサンプルです。
●サンプル●
Private Declare Function OpenProcess _
Lib "kernel32" _
(ByVal dwDesiredAccess As Long _
, ByVal bInheritHandle As Long _
, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle _
Lib "kernel32" _
(ByVal hObject As Long) As Long
Private Const PROCESS_QUERY_INFORMATION As Long = &H400
'起動したアプリケーションのプロセスオブジェクトのハンドルを取得、解放する
Sub Sample()
Dim myId As Long
Dim myProcess As Long
'電卓を起動してタスクIDを取得
myId = CLng(Shell("calc", vbNormalFocus))
'プロセスオブジェクトのハンドルを取得して表示
myProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 1, myId)
MsgBox myProcess
'オブジェクトハンドルの解放
CloseHandle myProcess
End Sub
●補足1●
実行すると、電卓が自動起動され、電卓のプロセスオブジェクトのハンドルがメッセージダイアログに表示されます。
●補足2●
CloseHandle関数で戻り値を必要としない場合には、Subプロシージャとして宣言してもかまいません。
Declare Sub CloseHandle Lib "kernel32" (ByVal hObject As Long)