3

子プロセスを生成する win32 メイン アプリケーションがあります。

現時点では、CreateWindowEx を使用してメイン アプリケーションで HWND を作成し、続いて子プロセスを生成しています。子プロセスは、FindWindow を使用して HWND を検索します。子プロセスでこの HWND のウィンドウ メッセージ (WM_SIZE、WM_SETFOCUS など) を処理したいので、子プロセスで GWLP_WNDPROC 属性を設定しようとしましたが、妥当なアクセス拒否エラーが発生しました。

代わりに、子プロセスで直接 HWND を作成することを考えましたが、ウィンドウをクリックすると、メイン アプリケーションがフォーカスを失い、私のユース ケースでは受け入れられません。

子プロセスにメッセージを処理させながら、メインアプリケーションに集中するために何をすべきかについて誰か提案がありますか?

4

2 に答える 2

1

子プロセスでは、WS_NOACTIVATE を使用して ShowWindow を呼び出すことができます。CreateProcess 関数を呼び出すときに、STARTUPINFO を次のように指定できます。

si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOWNOACTIVATE;

子アプリケーションのフォーカスをメイン ウィンドウに明示的に戻すこともできます。

クロムと同様のデザインが必要だと思います。彼らの設計ドキュメントをよく見ると、次のようになります。

http://www.chromium.org/developers/design-documents/inter-process-communication

プロセス間に IPC を実装していることがわかりますが、メイン プロセスには単一のメッセージ処理機能がありません。

最後のヒントとして (質問とは関係ありませんが、windows の下でジョブを読んでください)、このメカニズムにより、子プロセスをより細かく制御できます。

于 2012-11-07T16:17:03.267 に答える
1

SetWindowsHookExWindows メッセージ フックの 1 つと共に使用します (たとえばWH_CALLWNDPROC)、他のウィンドウに送信されるメッセージをインターセプトし、問題のウィンドウの HWND でフィルター処理します。

于 2012-11-07T15:40:58.197 に答える