実行してるプロセスのフールパスを取得するには

解決


清原  2006-08-08 20:07:18  No: 62690  IP: 192.*.*.*

WindowsXP Visual C++.Net 2003  SDK

実行しているプロセスのフールパスを取得したいんですが
CreateToolhelp32Snapshot , Process32First , Process32Next
などの関数を使用して、プロセスの名前が取得できますが、フールパスが
取得できません。

Process32Nextなどの関数で取得したプロセスのIDを使ってOpenProcess,GetModuleFileName  を使用して、フールパスを取得しようとしたら、OpenProcessから返したHANDLEがNULLで失敗しました。

どうしたら  プロセスのフールパスを取得できますか?  よろしくお願いいたします。

編集 削除
シャノン  2006-08-09 12:02:16  No: 62691  IP: 192.*.*.*

フルパスのことですよね。

Process32First/Next で取得したプロセス ID と、TH32CS_SNAPMODULE を引数に、もう一度 CreateToolhelp32Snapshot を呼びます。
これで得たスナップショットハンドルを使って Module32First を使えば、MODULEENTRY32 構造体の szExePath メンバにフルパスが取得できます。

編集 削除
清原  2006-08-09 20:12:16  No: 62692  IP: 192.*.*.*

ご指導、ありがとうございます  m(_ _)m。
シャノンの言うとおりで、うまくいけました。

ですけど、複数のプロセスのフルパスを取得するには、
プロセスごとに  プロセスのID  を  引数に  CreateToolhelp32Snapshotを呼び出さなければならないようで、
ちょっと効率が下がる  と思いますけれど、外の方法がありますか?

たとえば、新しいハンドルの作成じゃなく、ProcessIDを渡すと、簡単にフルパスを取得できるようなやつ...
(変な質問を提出して,すみません~~~)

編集 削除
επιστημη  2006-08-09 21:55:37  No: 62693  IP: 192.*.*.*

> プロセスごとに  プロセスのID  を  引数に  CreateToolhelp32Snapshotを呼び出さなければならないようで、ちょっと効率が下がる  と思いますけれど、

"ちょっと"ならいいんじゃありません?

編集 削除
清原  2006-08-10 13:54:26  No: 62694  IP: 192.*.*.*

そうですね、みんなのご指導、大変ありがとうございます。
いい勉強になりました。m(_ _)m

編集 削除