変な発想法 - Mobile編

Android, iPhone, iPad の裏技、Tips 大好き!

スレッド 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」は全く別物なんですね!
うぅ、どうせシングルスレッドしか使ってないんだから、プロセスもスレッドも同じと思い込んでました・・・。


っていうか、言い訳すると。
ググったら、そういうソースコードをいくつも見かけたんですけどぉ。
MSDNWindows Mobile フォーラム(英語)にだって、同じ書き方が紹介されていて・・・。


と、思って見直そうとしたら、いくらググってもそれらしいのが見つからない・・・。orz
んー、python の win32process.GetWindowThreadProcessId と Windows Mobile フォーラムで正しく(^^;) GetWindowThreadProcessId している例が私の頭の中で勝手にミックスされた???

                                                                                          • -

Windows Mobileプログラミング徹底理解