gpt4 book ai didi

c# - 桌面添加新窗口时是否有触发事件

转载 作者:可可西里 更新时间:2023-11-01 09:42:10 24 4
gpt4 key购买 nike

我想知道当桌面上出现/出现新窗口时是否触发了任何事件。我愿意使用 COM、WMI、WinApis、UIAutomation 或任何其他方法,但选择的语言是 C#。

实际需求:一个进程有 1 个主窗口和许多其他窗口。例如,其中一个窗口的类名是 X(我使用 pinvoke 获得了此信息)。现在,只要进程中有通知,这个窗口就会弹出几次。我不想显示此窗口。我没有对该进程的代码访问权限,因此我可以禁用该窗口。那么有什么方法可以让我获得一个事件或任何其他机制来跟踪桌面,并且每当类名 X 的窗口出现/即将出现时它就会隐藏它。

如果我对这个问题不清楚,请告诉我。谢谢

编辑:Simon 的回答非常好。我试过了,并且能够获得除通知/toast 窗口之外的所有窗口的通知,例如 lync 的 im toast 通知或 outlook 新邮件通知。我尝试了 Automation Element 和 Windows Pattern 的不同元素,但仍然无法获得这些...我如何获得这些的任何想法...您可以阅读 Simon 的回答中的评论以获取更多上下文/详细信息。再次感谢 Simon 介绍了 UIAUtomation 的强大功能...喜欢它!

最佳答案

正如 Damien 在他的评论中所说,您可以使用 UI 自动化,就像在 C# 示例控制台应用程序中这样:

class Program
{
static void Main(string[] args)
{
Automation.AddAutomationEventHandler(WindowPattern.WindowOpenedEvent, AutomationElement.RootElement, TreeScope.Subtree, (sender, e) =>
{
AutomationElement src = sender as AutomationElement;
if (src != null)
{
Console.WriteLine("Class : " + src.Current.ClassName);
Console.WriteLine("Title : " + src.Current.Name);
Console.WriteLine("Handle: " + src.Current.NativeWindowHandle);
}
});

Console.WriteLine("Press any key to quit...");
Console.ReadKey(true);
}
}

关于c# - 桌面添加新窗口时是否有触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24424344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com