我正在使用C ++开发一个应用程序,它使用UIAutomation接收与用户交互相关的重要事件的通知。我通过调用AddAutomationEventHandler来侦听窗口打开的事件,尝试了通过处理程序,但是我在退出之前停止通知和清理时遇到了问题。如果用户已启动某些应用程序(如Firefox),则调用RemoveAutomationEventHandlerhangs。 (在这种情况下,调用RemoveAllEventHandlers也会挂起。)请注意,所有添加或删除事件处理程序的调用都是在同一个非UI线程的上下文中完成的。
注意:我在Windows 7和Windows 8上看到此行为。
有关为何发生这种情况或如何解决问题的任何想法?是什么让结构改变事件与其他事件不同?
答案 0 :(得分:3)
窗口打开/关闭事件通过内核WinEvent处理程序实现;结构更改事件涉及客户端应用程序。你的非ui螺纹泵消息吗? UI自动化需要抽取消息以使跨进程通信正常工作。