8

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

注: Windows 7 と Windows 8 でこの動作が見られます。

なぜこれが起こっているのか、それを修正する方法についてのアイデアはありますか? 構造変更イベントが他のすべてのイベントと異なる理由は何ですか?

4

1 に答える 1

3

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

于 2013-08-06T19:41:34.503 に答える