7

珍しいデザインの特別なプロジェクトに取り組んでいます。

私のアプリケーション/プロセスでは、いくつかの作業を行うサブプロセスを作成します。私のプロセスでは、サブプロセスからフィードバックを取得する必要があります。アプリケーション/プロセスの Windows ハンドルをこのサブプロセスに渡したいので、このサブプロセスからメッセージを投稿します。

ウィンドウハンドルをサブプロセスに渡すにはどうすればよいですか? 私のサブプロセスは、ウィンドウ UI のないコマンド ライン アプリケーションであり、次のようなメイン関数があります。

int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPTSTR lpCmdLine, int nCmdShow)

ウィンドウ ハンドルをメイン関数に渡す必要がありますか? どのように?

ありがとう

4

2 に答える 2

14

ウィンドウ ハンドル (HWND) はシステムに対してグローバルであるため、ハンドルを 10 進数として文字列バッファーに出力し、CreateProcess でサブプロセスを生成するときにコマンド ラインで文字列として渡し、_wtoi() を呼び出すことができます。または同様に、文字列を再びハンドルに変換します。

于 2012-08-16T08:48:36.890 に答える
2
  1. 名前付きミューテックス (グローバル) を作成して、両方のプロセスがそれにアクセスして取得できるようにします。
  2. 2 番目のプロセスを生成します。ミューテックスが解放されるまで待機する必要があります。
  3. その後、任意のプロセス間通信メソッドを使用してウィンドウ ハンドルを渡すことができます。最も簡単なのはShared Memoryかもしれません。複製されたハンドルを共有メモリに書き込むだけです。
  4. ミューテックスを解放して、2 番目のプロセスがそれを取得できるようにします。
  5. 共有メモリからハンドルを読み取ります。これで安心して使えます。

全体のミューテックス操作は、共有メモリに何かが書き込まれる前に、2 番目のプロセスが共有メモリから読み取らないようにするためだけのものです。

(コメントについては@JonathanPotterに感謝します)

于 2012-08-16T07:31:29.737 に答える