アプリ版:「スタンプのみでお礼する」機能のリリースについて

CreateProcessは起動したプロセスのIDをくれますが、ShellExecuteでは分からないものでしょうか。
ShellExecuteExならプロセスのハンドルを受け取ることはできますが、IDは分かりません。

ハンドルから元のIDを割り出す関数でもないですかね。

A 回答 (3件)

こんにちは。

itohhといいます。

一発でプロセスハンドルからプロセスIDを取得することはムリだと思います。

代案ですが。
1.プロセスの列挙するAPIを使用してプロセスIDを取得する。
  WinNT系ならEnumProcess関数、Win9x系ならProcess32First関数
  以下のページを参考にしてください。
  URL:http://www.microsoft.com/japan/support/kb/articl …
2.取得したプロセスIDからプロセスハンドルを取得する。
  OpenProcess関数
3.対象のプロセスハンドルと取得したプロセスハンドルを比較する。
4.同一のプロセスハンドルが見つかるまで2と3を繰り返す。

こんな案では如何ですか?

参考URL:http://www.microsoft.com/japan/support/kb/articl …
    • good
    • 0
この回答へのお礼

あれ?
ハンドルって同じプロセスに対していくらでも開けるから、新にOpenProcessしたら一生見つからないような・・・。

お礼日時:2002/03/15 02:12

なるほど、容易ではないですね。


CreateToolhelp32Snapshotで現在実行中のプロセスのプロセスIDと実行ファイルのフルパス名を
列挙できます。
つまり、EXE名からプロセスIDが分かります。
しかし、同じEXEを複数起動した場合はプロセスIDが複数あるので区別できない。
ShellExecuteを実行する前後のCreateToolhelp32Snapshotを比較する...
うーんイマイチな案でした。

参考URL:http://www.vbvbvb.com/jp/gtips/1101/gCreateToolh …
    • good
    • 0
この回答へのお礼

じつはやりたいことは、プロセスとスレッドの優先度を指定した、実行プログラムなのです。

そこで、プロセスの優先度は、CreateProcessでもShellExecuteExでもハンドルが得られればいいのですが、スレッドはCreateToolhelp32Snapshot+Thread32First/Nextで得られた結果のうち、ParentProcessIdが親のものと一致したスレッドだけ取り出して優先度を指定しているのです。
このスレッド列挙関数はあるプロセスの所有するスレッドだけを挙げてくれるのではないところが問題です。

なかなかの案ですが、確実性に欠けますね。
どうもありがとうございました。
また、何か浮かんだらよろしくおねがいします。

お礼日時:2002/03/14 23:19

GetWindowThreadProcessId



参考URL:http://www.vbvbvb.com/jp/gtips/0751/gGetWindowTh …
    • good
    • 0
この回答へのお礼

ウィンドウのないアプリケーションを想定していないし、そもそも、ウィンドウハンドルを得る手段もありません。

お礼日時:2002/03/14 18:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています