アプリケーションで使用する外部プロセスを取得する必要がありPROCESS_INFORMATION
ます。プロセス ハンドルとプロセス ID はありますが、それを取得する方法がわかりませんPROCESS_INFORMATION
。
Windowsで実行されているC++(11)、Visual Studio 2012を使用しています。どんな助けでも大歓迎です。
PROCESS_INFORMATION
によって満たされCreateProcess()
ます。その船は出航しました。プロセスはすでに開始されています。
あなたが本当にやりたいことに集中しましょう。プロセスが終了したかどうかを確認するには、まず を使用OpenProcess()
してプロセスへのハンドルを取得します。すでに持っている PID が必要です。その後WaitForSingleObject()
、それが終了したかどうかを教えてくれます。INFINITE
プロセスが終了するまでブロックする 2 番目の引数を渡します。0
ポーリングする場合はパスします。最後に、CloseHandle()
クリーンアップに使用します。
PROCESS_INFORMMATION
4つの情報を提供します。
HANDLE hProcess
HANDLE hThread
DWORD dwProcessID
DWORD dwThreadID
プロセスハンドルとプロセスIDの2つの値がすでにあると言います。つまり、スレッドハンドルとスレッドIDだけが残ります。これらは、プロセス用に作成された最初のスレッドに属します。CreateToolhelp32Snapshot()
、、を使用して、指定されたプロセスIDに属するスレッドIDを検索する実行中のスレッドを列挙し、を使用Thread32First()
して、指定されたスレッドIDのスレッドハンドルを取得できます。トリッキーな部分は、どのスレッドIDが最初のスレッドであるかを識別することです。その情報は、の外部ではすぐには利用できません。Thread32Next()
OpenThread()
CreateProcess()
CreateToolhelp32Snapshot 関数はプロセス ID と親プロセス ID の両方を返すため、必要な情報を取得できます。その使用例はここにあります。