3

リモート呼び出しを使用して、ターゲット アドレス空間に .NET SpyLib を挿入しています。を介してそのリモートプロセスを作成したウィンドウのスレッドにメッセージを送信する必要がありますGetWindowThreadProcessId

私は Windows 7 で作業しています。残念ながら、ほとんどの場合 0 が返されます。適切なスレッド ID を提供する場合があります (Windows の再起動後)。

でこの奇妙な動作が発生するのはなぜGetWindowThreadProcessIdですか?

4

1 に答える 1

4

GetWindowThreadProcessIdの MSDN ドキュメントには、コミュニティ コンテンツ セクションがあり、DDeBen は、あなたが質問する 2 年前に既にあなたの質問に回答しています。:)

ハンドル hWnd が有効でない場合、GetWindowThreadProcessId は 0 を返し、lpdwProcessId が指す変数は変更されません。GetLastError() は 87 (ERROR_INVALID_PARAMETER) を返します。

GetLastError()将来、よくわからない障害状態がある場合に Win32 API で使用する必要がある関数であることがよくあることを覚えておくと役立つかもしれません。通常、MSDN からリンクが提供されますが、リンクが提供されていない場合でも、チェックアウトするのに問題はありません。ただし、管理されたコードでは特別な処理GetLastError()が必要であることに注意してください。そうしないと、混乱を招くだけの偽の結果が得られることに注意してください。

于 2011-04-29T04:59:03.203 に答える