[trick-with-Wiki] トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

プロセスIDとプロセスハンドルとウィンドウハンドルの件

ウィンドウハンドルからプロセスID
GetWindowThreadProcessId() で可能。 プロセスIDはユニークなので、逆検索も可能。
プロセスIDからウィンドウハンドル
EnumWindows()で全ウィンドウを列挙し、上述のGetWindowThreadProcessId()で逆検索。
プロセスIDからプロセスハンドル
OpenProcess()で可能。ただし、逆は一意ではないので逆検索は出来ない。
プロセスハンドルからプロセスID
にっちもさっちも。
CreateProcess()
プロセスIDが取得でき、無問題。
ShellWindowEx()
プロセスハンドルしか取得できない。よってプロセスIDは取得できない。ただし、起動したプロセスは親子関係になるので、それを利用する。
親子関係からウィンドウハンドル
CreateToolhelp32Snapshot()により、起動中の全プロセスの情報を取得できる。th32ParentProcessIDとGetCurrentProcessId()を比較することにより、自分が起動したプロセスのプロセスIDのリストを取得できる。それをさらにEnumWindows()回して逆探知することで、ようやくウィンドウハンドルを取得可能。

OSは知ってるはずなのになぜこんなに苦労しなければならないのか。

  • ShellExecuteEx ≒ AssocQueryString()+CreateProcess() - kuboon (07/04/20 16:59)
お名前: コメント: