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

解決


清原  2006-08-09 05:07:18  No: 62690

WindowsXP Visual C++.Net 2003  SDK

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

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

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


シャノン  2006-08-09 21:02:16  No: 62691

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

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


清原  2006-08-10 05:12:16  No: 62692

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

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

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


επιστημη  2006-08-10 06:55:37  No: 62693

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

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


清原  2006-08-10 22:54:26  No: 62694

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加