C# 打开(任何)窗口关闭事件保存窗口标题
在C#中,我当前希望添加一个事件,该事件将在任何窗口关闭时触发(而不仅仅是WPF或forms窗口)。我已经迈出了这一步,效果非常好。当另一个程序启动时,将添加C# 打开(任何)窗口关闭事件保存窗口标题,c#,.net,windows,events,window,C#,.net,Windows,Events,Window,在C#中,我当前希望添加一个事件,该事件将在任何窗口关闭时触发(而不仅仅是WPF或forms窗口)。我已经迈出了这一步,效果非常好。当另一个程序启动时,将添加SubscribeWindowClose事件 我看了一下微软的文档,了解了这个问题。 文档中有一个关于缓存AutomationElement的描述,我没有完全理解。 我只想将关闭的窗口标题与列表中的窗口标题进行比较。 谁能帮我解决这个问题,或者给我一个更好的方法来解决我的“问题”? 提前谢谢! 代码: @NetMage的评论是朝着正确方向
SubscribeWindowClose
事件
我看了一下微软的文档,了解了这个问题。文档中有一个关于缓存AutomationElement的描述,我没有完全理解。
我只想将关闭的窗口标题与列表中的窗口标题进行比较。
谁能帮我解决这个问题,或者给我一个更好的方法来解决我的“问题”?
提前谢谢!
代码:
@NetMage的评论是朝着正确方向迈出的一步。
最终得到了的修改版本。
条件被修改为
ControlType.TitleBar
,效果非常好 有一条注释链接到如何将缓存与自动化结合使用,以便您可以检索刚刚关闭的窗口的名称。谢谢@NetMage。这是正确的方向!我最后用了,因为它更合适。非常感谢!:)
private void SubscribeWindowClose(AutomationElement window) {
Automation.AddAutomationEventHandler(WindowPattern.WindowClosedEvent,
window, TreeScope.Element, OnWindowClose);
}
private void OnWindowClose(object src, AutomationEventArgs e) {
try {
var element = src as AutomationElement;
Debug.WriteLine(element);
if (e.EventId == WindowPattern.WindowClosedEvent) {
// if window title is in List, run method
return;
}
} catch (ElementNotAvailableException) {
return;
}
}