我想知道当桌面上出现/出现新窗口时是否有任何事件被触发.我愿意使用COM,WMI,WinApis,UIAutomation或任何其他方法,但选择的语言是C#.
实际要求:一个进程有一个主窗口和许多其他窗口.其中一个窗口的类名称是X,(我使用pinvoke获取此信息).现在,只要进程中有通知,此窗口就会弹出一些时间.我不想显示这个窗口.我没有对该进程的代码访问权限,因此我可以禁用该窗口.那么有什么方法可以让我得到一个事件或任何其他机制来跟踪桌面,并且任何时候一个带有类名X的窗口来/它将隐藏它.
请问我是否对这个问题不清楚.谢谢
编辑:西蒙的回答非常好.我试过了,并且能够获得所有窗口的通知,除了通知/吐司窗口,例如lync的im toast通知或outlook新邮件通知.我尝试使用自动化元素和Windows模式的不同元素,但仍然无法获得那些...任何想法我怎么能得到那些...你可以阅读西蒙的答案中的评论更多的背景/细节.再次感谢西蒙介绍了UIAUtomation的强大功能 ......爱它!
正如达米恩在评论中所说,你可以在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); } }