2

我正在做一个项目,我需要获取正在关闭的窗口的名称。我为此使用 C# 自动化事件

我已经粘贴在我正在使用的代码下面:

Automation.AddAutomationEventHandler(WindowPattern.WindowClosedEvent,
AutomationElement.RootElement, TreeScope.Subtree, (sender, eve) =>
{
    AutomationElement winElemnt = sender as AutomationElement;
    if (winElemnt != null)
    {
        Console.WriteLine("Window closed : " + winElemnt.Current.Name);
    }
 });

关闭任何窗口时都会触发上述代码,但执行时出现以下错误:

  1. 变量sender的值为null
  2. 无法获取自动化元素的Current.Name(我大部分时间都收到此错误)

在调试时,我发现第二个错误是由于在完成事件处理程序执行之前关闭窗口所致

请让我知道如何修复这些错误并获取触发关闭的窗口的名称。

提前致谢

4

2 回答 2

1

我相信您需要使用缓存才能在窗口关闭时检索属性,因为自动化元素将消失。

WindowPattern 的注释说明了以下内容

客户端应用程序可能需要从缓存对象中侦听 WindowClosedEvent,因为窗口在关闭后立即从 UI 自动化控件视图结构中删除。

于 2018-03-18T15:46:25.220 回答
0

这就是它在文件中所说的:

当您的应用程序接收到窗口关闭事件时,事件处理程序的 sender 参数不能用于获取有关已关闭窗口的信息,因为相应的 UI 自动化元素不再有效。

恐怕你必须找到另一种方法来获取窗口名称。

于 2018-03-13T13:59:02.580 回答