2012-11-26 35 views
8

私はUIAutomationを使用して、ユーザーのやりとりに関連する重要なイベントの通知を受け取るC++のアプリケーションを開発しています。 AddAutomationEventHandlerを呼び出して、開いているウィンドウのイベントを待ち受けるようにしようとしましたが、通知を停止して終了する前に問題を抱えています。ユーザーがFirefoxなどの特定のアプリケーションを起動した場合は、RemoveAutomationEventHandlerhangsを呼び出します。イベントハンドラを追加または削除するすべての呼び出しは、同じ非UIスレッドのコンテキストで行われることに注意してください(この場合、RemoveAllEventHandlerの呼び出しもハングします)。IUIAutomation :: RemoveAllEventHandlersがハングする

注:私はこれが起こっまたはどのようにそれを修正している理由上の任意のアイデアのWindows 7とWindows 8

にこの動作を見ていますか?構造変更されたイベントが他のイベントと異なるのは何ですか?

答えて

3

ウィンドウのオープン/クローズイベントは、カーネルWinEventハンドラを介して実装されます。構造変更イベントはクライアントアプリケーションに関連します。あなたの非Uiスレッドポンプメッセージはありますか? UIオートメーションは、プロセス間通信が機能するようにメッセージを送信する必要があります。

+1

メッセージを送信する必要性をもう少し明確にすることはできますか? Windowsのメッセージについて話していますか? UiAutomationの呼び出しとイベントが基本的にプロセス間で行われるわけではありません。 –

+1

@o_weisman特に、シングルスレッドアパートメント(STA)スレッドは、着信COMコールをスレッドにディスパッチするためにウィンドウメッセージをポンピングする必要があります。スレッドをMTAに入れた場合(または管理コードを使用している場合は、多かれ少なかれ同じことです)、着信するCOM呼び出しをMTA内の待機スレッドにディスパッチできます。そして、はい、ほとんどのUIオートメーションの呼び出しとイベントは、基本的にプロセス間にあります。 –

+1

こんにちはエリック、応答のために感謝します。 OPとは異なり、私はUI Automationの管理されたC#ライブラリを使用して開発していますが、今でもRemoveAllEventHandlersで同様のハングを経験しています。さらに特有のことですが、テストされたアプリケーションでのWinformsウィンドウのオープンとUI Automation WindowOpenedハンドラの呼び出しの間に非常に長い遅延(分)があります。これまでにそのような行動に出くわしたことはありませんか? –

関連する問題