C# 如何计算通用hWnd代表什么?

C# 如何计算通用hWnd代表什么?,c#,windows,winapi,ui-automation,C#,Windows,Winapi,Ui Automation,根据MSDN,winAPI函数,如WindowFromPoint不会返回所有顶级窗口(至少跳过隐藏和禁用的窗口),然后我们需要使用更灵活的函数,如ChildWindowFromPoint 然而,最后一个函数不仅可以返回窗口,还可以得到任何子控件句柄 所以我的问题是,我应该如何区分我拥有句柄的对象的实际类型,它是窗口、按钮、复选框等等 当我试图“定义”什么是Window\Form以手动检查它时(比如它是否有标题栏),不同对象之间的边界非常模糊 获取类名当然不是一个选项,因为它们通常是任意的 最后,

根据MSDN,
winAPI
函数,如
WindowFromPoint
不会返回所有顶级窗口(至少跳过隐藏和禁用的窗口),然后我们需要使用更灵活的函数,如
ChildWindowFromPoint

然而,最后一个函数不仅可以返回窗口,还可以得到任何子控件句柄

所以我的问题是,我应该如何区分我拥有句柄的对象的实际类型,它是窗口、按钮、复选框等等

当我试图“定义”什么是Window\Form以手动检查它时(比如它是否有标题栏),不同对象之间的边界非常模糊

获取类名当然不是一个选项,因为它们通常是任意的

最后,我发现.Net Framework中的Microsoft Automation UI是如何区分对象的,有什么线索吗?。似乎一个人需要实现一个复杂的机制,它将比较许多参数来验证它到底是什么,但是AUI怎么能如此确定它发现了什么呢

所以我的问题是,我应该如何区分我拥有句柄的对象的实际类型,它是窗口、按钮、复选框等等

您可以调用窗口句柄来检索窗口类的文本表示。虽然这可能有助于识别标准控件类,但对自定义窗口类(通过调用引入的类)几乎没有帮助

窗口类是static1,特定窗口类的任何窗口稍后都可以更改类模板中指定的某些设置。要检索最新的窗口信息,可以使用

我发现.NETFramework中的MicrosoftAutomationUI是如何区分对象的,有什么线索吗

UI自动化根本不依赖于窗口句柄。它通过检查和操作通过COM接口实现的可访问树来工作。本机窗口句柄和可访问对象之间没有严格的关系(这就是为什么它也适用于无窗口控件,例如大多数浏览器使用的控件)

我怎么这么肯定它找到了什么

因为它不会猜测UI自动化接口返回什么。这些都是由控件作者实现的,因此可以假定它是可信的信息


1那差不多是对的。您仍然可以通过调用来修改已注册的类

所以我的问题是,我应该如何区分我拥有句柄的对象的实际类型,它是窗口、按钮、复选框等等

您可以调用窗口句柄来检索窗口类的文本表示。虽然这可能有助于识别标准控件类,但对自定义窗口类(通过调用引入的类)几乎没有帮助

窗口类是static1,特定窗口类的任何窗口稍后都可以更改类模板中指定的某些设置。要检索最新的窗口信息,可以使用

我发现.NETFramework中的MicrosoftAutomationUI是如何区分对象的,有什么线索吗

UI自动化根本不依赖于窗口句柄。它通过检查和操作通过COM接口实现的可访问树来工作。本机窗口句柄和可访问对象之间没有严格的关系(这就是为什么它也适用于无窗口控件,例如大多数浏览器使用的控件)

我怎么这么肯定它找到了什么

因为它不会猜测UI自动化接口返回什么。这些都是由控件作者实现的,因此可以假定它是可信的信息


1那差不多是对的。您仍然可以通过调用来修改已注册的类。

RealGetWindowClass()可能是更好的选项。RealGetWindowClass()可能是更好的选项。