スレッド ID とプロセス ID は違う。GetWindowThreadProcessId API
ウインドウハンドルからプロセス ID を取得する GetWindowThreadProcessId API って、
DWORD dwId = GetWindowThreadProcessId(hwnd, NULL);
で dwId に"プロセス ID" が返って来るもんだとばっかり思ってましたが。
返ってきた dwId ではどうやっても OpenProcess できません。
???
DWORD dwPid = 0;
DWORD dwId = GetWindowThreadProcessId(hwnd, &dwPid);
第二引数をちゃんと渡して取得出来た dwPid でもって OpenProcess するとちゃんとオープン出来ました。^^/
んー、SDK には戻り値は「スレッド ID」で、DWORD のポインタを渡して取得するのは、「プロセス ID」とありますが・・・???
よくよく調べて見ると・・・。
「スレッド ID」と「プロセス ID」は全く別物なんですね!
うぅ、どうせシングルスレッドしか使ってないんだから、プロセスもスレッドも同じと思い込んでました・・・。
っていうか、言い訳すると。
ググったら、そういうソースコードをいくつも見かけたんですけどぉ。
MSDN の Windows Mobile フォーラム(英語)にだって、同じ書き方が紹介されていて・・・。
と、思って見直そうとしたら、いくらググってもそれらしいのが見つからない・・・。orz
んー、python の win32process.GetWindowThreadProcessId と Windows Mobile フォーラムで正しく(^^;) GetWindowThreadProcessId している例が私の頭の中で勝手にミックスされた???
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-