8

我正在用 C++ 开发一个应用程序,它使用 UIAutomation 来接收与用户交互相关的重要事件的通知。我通过调用 AddAutomationEventHandler 尝试了一个事件处理程序来侦听窗口打开的事件,但是我在退出之前停止通知和清理时遇到了问题。如果用户已启动某些应用程序,例如 Firefox,则对 RemoveAutomationEventHandler 的调用会挂起。(在这种情况下,调用 RemoveAllEventHandlers 也会挂起。)请注意,所有添加或删除事件处理程序的调用都是在同一个非 UI 线程的上下文中完成的。

注意:我在 Windows 7 和 Windows 8 上看到了这种行为。

关于为什么会发生这种情况或如何解决它的任何想法?是什么让结构改变事件与所有其他事件不同?

4

1 回答 1

3

窗口打开/关闭事件通过内核 WinEvent 处理程序实现;结构更改事件涉及客户端应用程序。您的非 ui 线程是否泵送消息?UI 自动化需要泵送消息以使跨进程通信正常工作。

于 2013-08-06T19:41:34.503 回答