【发布时间】:2011-11-17 07:16:25
【问题描述】:
在 Windows 中,对于每个控件(例如每个对话框、窗口、文本框和复选框等)都会给出一个控件 ID。
这个控件 ID 是如何创建的? Windows 中的两个应用程序可以具有相同的控件 ID 吗?有没有办法手动设置 Windows 控件 ID?
【问题讨论】:
-
这是真的吗?我认为控件可以选择是否使用 ID。一个窗口句柄就足以识别一个控件。
-
不是。它通常只为从对话框模板创建的对话框设置。稍后可以使用 SetWindowLongPtr、GWLP_ID 进行更改。
-
控件ID有多种类型。自动化 ID 是您要设置的。您是否为您的应用程序使用 WinForms、WPF 或 Win32?对于每个框架,“是否有任何方法可以手动设置 Windows 控件 ID”的答案会有所不同。并且自动化 ID 不必是全局唯一的 - 它们只需要在给定范围内唯一才能有用,因为您只需要沿着树的唯一路径来识别特定控件。有关 .Net GUI 应用程序,请参阅此内容:msdn.microsoft.com/en-us/library/aa349646.aspx
-
@Hans:根据 MSDN,SetWindowLongPtr(GWLP_ID) 仅对子窗口有效。顶层窗口、对话框或其他,根本没有控件 ID;窗口数据的那个槽(从历史上看,不确定 impl 是否仍然如此)用于 HMENU。 (从对话框模板创建的子窗口可以有一个控件 ID,但 AFAIK 它不是由对话框代码设置的;它完全取决于拥有的代码来使用 SetWindowLongPtr 设置它。)
标签: c# windows user-interface controls ui-automation