微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#中的本地窗口层次结构和类名

我正在创build一个函数来查找给定窗口层次结构的特定窗口,如下所示:

protected bool MapWindowHierarchy (ATS.Library.Window window) { bool result = false; List<Process> processes = null; processes = GetProcesses().ToList(); processes.ForEach ( process => { if (process.MainWindowHandle == window.Handle) { // Populate window properties. // Get child windows with filled properties. } } ); return (result); } protected bool MapWindowHierarchy (List<ATS.Library.Window> windows) { return (windows.All(window => this.MapWindowHierarchy(window))); } public sealed class Window { public IntPtr Handle { get; set; } public string Class { get; set; } public Rectangle Bounds { get; set; } public Win32Api.User32.ShowWindowCommands WindowState { get; set; } public string Caption { get; set; } public int Style { get; set; } public List<ATS.Library.Window> Windows { get; set; } public void PopulateFromHandle(IntPtr hWnd) { // Populate above properties using Win32 API. } }

这只是粗略的代码,但目标是使用[Window]类创build层次结构,并查看使用[EnumChildWindows]的实际层次结构是否匹配。 这显然工作正常,但我碰到这个问题 ,Hans Passant的评论"Every unique window in a desktop session must have a unique Windows class name" ,我不知道如何解释它(参见下图相同的类名)。 也许他所提到的只适用于托pipe代码(WinForms,WPF等)。

此外,我不知道如何检索窗口的类名和文本,因为我有像Spy ++那样的句柄(hWnd)(见下图)。 注意如何在树视图中检索文本,而不是[Find Window]对话框。

如何使用Windows应用程序在第三方网站上填写和提交Web表单?

OutOfMemoryException / ERROR_COMMITMENT_LIMIT与系统中的大量可用内存

创build可通过在背景区域中的任意位置拖动来移动的非矩形窗体

Windows使用哪种开源的面向文档的数据库系统最为成熟?

处理多个表单之间的数据

题:

我应该担心韩的评论,因为我只是针对本地应用程序?

如何获得给定窗口句柄的类名?

如何获得窗口的文本给定一个窗口的句柄(如在图像中)?

在Linux下,C#程序在单声道下不起作用。

包含无法从Windows中看到的文件

使用DLL .NET内部方法

为什么winform面板仅在鼠标hover或鼠标点击时更新?

CoCreateInstance在.NET中精确匹配?

不知道为什么你要担心。 但是,在屏幕截图中突出显示的这些“按钮”控件并不是唯一的窗口。 当你点击它们时,它们看起来都一样,行为也完全一样。 唯一的区别是他们的文本“属性”是不同的。 所以他们是完全一样的窗口“班级”。 由于winapi是C api,而C语言不支持类或属性,因此在双引号中使用“property”和“class”。

一个窗口类为一个窗口预先选择了一堆属性,你可以在你调用RegisterClassEx()之前在WNDCLASSEX结构中看到它们。 然后你创建窗口,在CreateWindowEx()winapi调用中传递类名称。 该方案旨在使创建类似的窗口变得容易,就像在C#中使用类来创建类似的对象一样。 但是仍然可以拥有自己的Text属性。 和他们自己的Click事件处理程序。

您从GetClassName()winapi函数的句柄中获得窗口类的名称

您使用GetwindowText()winapi函数从句柄中获取文本“属性”。 GetwindowTextLength()告诉你需要传递给GetwindowText()的字符串缓冲区有多大。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐