将新窗口添加到桌面时是否触发任何事件

 紫褚1314 发布于 2023-01-07 15:57

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

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

请问我是否对这个问题不清楚.谢谢

编辑:西蒙的回答非常好.我试过了,并且能够获得所有窗口的通知,除了通知/吐司窗口,例如lync的im toast通知或outlook新邮件通知.我尝试使用自动化元素和Windows模式的不同元素,但仍然无法获得那些...任何想法我怎么能得到那些...你可以阅读西蒙的答案中的评论更多的背景/细节.再次感谢西蒙介绍了UIAUtomation的强大功能 ......爱它!

1 个回答
  • 正如达米恩在评论中所说,你可以在C#示例控制台应用中使用UI自动化:

    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);
        }
    }
    

    2023-01-07 15:59 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有