1

私はクロームのようなアプリケーションを開発しています。親と子のアプリケーションと言う2つのアプリケーションがあります。子アプリケーションにはメニューが含まれています。子アプリケーションのインスタンスを親アプリケーションのタブにアタッチしているとき。子アプリケーションのメニューは、マウスクリックでは表示されません。

プロセスの添付に使用されるコードスニペットは

Process P = Process.GetProcessesByName("Child");
P.WaitForInputIdle();
IntPtr handle = P.MainWindowHandle;
SetParent(handle, this.tabPage1.Handle);
MoveWindow(handle, rec.X, rec.Y, rec.Width, rec.Height, true);

子アプリケーションに変更を加えることはできません。

4

2 に答える 2

0

MSDN によると:

"WaitForInputIdle() を使用して、メッセージ ループがアイドル状態に戻るまで、アプリケーションの処理を強制的に待機させます。ユーザー インターフェイスを持つプロセスが実行されている場合、Windows メッセージがプロセスに送信されるたびに、そのメッセージ ループが実行されます。オペレーティング システム. その後, プロセスはメッセージ ループに戻ります. プロセスがメッセージ ループ内でメッセージを待機しているとき, プロセスはアイドル状態にあると言われます. この状態は, アプリケーションが待機する必要がある場合などに役立ちます.アプリケーションがそのウィンドウと通信する前に、メイン ウィンドウの作成を完了するための開始プロセス。

プロセスにメッセージ ループがない場合、WaitForInputIdle() は InvalidOperationException をスローします。

WaitForInputIdle() オーバーロードは、メッセージ ループでプロセスがアイドル状態になるまで無期限に待機するように Process コンポーネントに指示します。この命令により、アプリケーションが応答を停止する可能性があります。たとえば、コード フラグメント while(true) のように、常にメッセージ ループをすぐに終了するようにプロセスが記述されているとします。

したがって、コメントを検討する必要があると思いますP.WaitForInputIdle();

于 2012-11-07T06:53:25.313 に答える