microsoft-ui-automation - IUIAutomation::RemoveAllEventHandlers 挂起

标签 microsoft-ui-automation

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

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

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

最佳答案

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

关于microsoft-ui-automation - IUIAutomation::RemoveAllEventHandlers 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13574052/

相关文章:

c# - MS UI 自动化 - AddAutomationHandler 未触发

powershell - 如何使用PowerShell中的非托管UI自动化API

c++ - C语言的Windows UIAutomatin

c# - Windows UIAutomation 获取文件类型

PowerShell 为 UIAutomation 打开远程 GUI session

c# - 模态对话框导致 UI 自动化挂起

c# - 为什么在 UI 自动化客户端中捕获的异常会出现在正在自动化的 UI 中?

c# - Microsoft Automation UI 鼠标单击给定位置

c# - 使用 System.Windows.Automation 读出 Edge 浏览器标题和 URL