WindowsXP Visual C++.Net 2003 SDK
実行しているプロセスのフールパスを取得したいんですが
CreateToolhelp32Snapshot , Process32First , Process32Next
などの関数を使用して、プロセスの名前が取得できますが、フールパスが
取得できません。
Process32Nextなどの関数で取得したプロセスのIDを使ってOpenProcess,GetModuleFileName を使用して、フールパスを取得しようとしたら、OpenProcessから返したHANDLEがNULLで失敗しました。
どうしたら プロセスのフールパスを取得できますか? よろしくお願いいたします。
フルパスのことですよね。
Process32First/Next で取得したプロセス ID と、TH32CS_SNAPMODULE を引数に、もう一度 CreateToolhelp32Snapshot を呼びます。
これで得たスナップショットハンドルを使って Module32First を使えば、MODULEENTRY32 構造体の szExePath メンバにフルパスが取得できます。
ご指導、ありがとうございます m(_ _)m。
シャノンの言うとおりで、うまくいけました。
ですけど、複数のプロセスのフルパスを取得するには、
プロセスごとに プロセスのID を 引数に CreateToolhelp32Snapshotを呼び出さなければならないようで、
ちょっと効率が下がる と思いますけれど、外の方法がありますか?
たとえば、新しいハンドルの作成じゃなく、ProcessIDを渡すと、簡単にフルパスを取得できるようなやつ...
(変な質問を提出して,すみません~~~)
> プロセスごとに プロセスのID を 引数に CreateToolhelp32Snapshotを呼び出さなければならないようで、ちょっと効率が下がる と思いますけれど、
"ちょっと"ならいいんじゃありません?
そうですね、みんなのご指導、大変ありがとうございます。
いい勉強になりました。m(_ _)m
ツイート | ![]() |