一些函数具有 ControlID 参数, 用于确定要操作的窗口中的哪个控件. 此参数可以是控件的文本内容, 也可以是本页面中描述的任何其他标识符.
以下标识符是按照降序优先级排列的. 在极少数出现歧义的情况下, 此细节非常重要. 例如, 如果一个窗口有两个编辑控件, 第一个的文本为 "Edit2" 第二个的类名 ClassNN 为 "Edit2", 而使用了 ControlHide "Edit2", 那么第二个控件将会被隐藏, 因为 ClassNN 具有更高的优先级.
控件的 HWND(窗口句柄的缩写) 在该控件存在期间唯一标识该控件. 直接传递 HWND, 或者以具有 Hwnd 属性的对象形式传递, 如 GuiControl 对象. 即使在 DetectHiddenWindows 关闭时, 这同样适用于隐藏控件. 后续的窗口参数将被忽略. 当传递对象时, 如果该对象没有 Hwnd 属性, 则会抛出 PropertyError, 如果它返回的不是纯整数, 则会抛出 TypeError.
可以通过 ControlGetHwnd, GuiControl.Hwnd, WinGetControlsHwnd, MouseGetPos 和 DllCall 函数来获取控件的 HWND.
当通过 PostMessage, SendMessage, 或者使用 DllCall调用原生 API 来直接向控件发送消息时, 使用 HWND 尤为有用. 此外, 当控件是动态创建或重新排列时, 使用 HWND 也很有帮助, 因为 HWND 在控件的整个生命周期内保持不变.
类型: 字符串
控件的 ClassNN 是由其窗口类的名称后跟在包含它的顶层窗口中的序号. 该序号反映了该控件在同类控件中的位置, 即按照其创建的先后顺序排列. 例如, Edit1 是一个窗口中的第一个编辑控件, 而 Button12 则是第十二个按钮.
有些类名包含不属于控件序号的数字. 例如, SysListView321 示的是该窗口中的第一个 ListView 控件, 而非第 321 个. 若要获取不含序号的类名, 则需将控件的 HWND 传递给 WinGetClass 函数.
可以通过 Window Spy 来确定控件的 ClassNN, 也可通过 ControlGetClassNN, WinGetControls 和 MouseGetPos 来获取.
序号并非持久标识符. 如果应用程序重新创建控件, 改变其排列顺序, 或者使用动态或虚拟化用户界面元素, 该序号可能会发生变化. 一些现代框架(如 WPF 或 Electron) 可能根本不提供传统的 Win32 类名, 或者可能会为多个不相关的控件重复使用通用类名.
在控件没有固定文本且控件顺序稳定的情况下, 使用 ClassNN 通常会比较方便. 但若无法保证稳定性时, 则应考虑使用 HWND 或其他标识符.
类型: 字符串
控件的文本可以作为标识符使用, 例如 OK 用于 OK(确认) 按钮. 匹配行为由 SetTitleMatchMode 函数决定. 当文本唯一和稳定时, 可以使用文本; 许多控件会动态更新其内容或者根本不展示有意义的文本.
可以通过 Window Spy 来确定控件的文本内容, 也可以通过 ControlGetText, GuiControl.Text 和 GuiControl.Value 来获取文本内容.
ControlClick, ControlSend, PostMessage 和 SendMessage 函数均可作用于控件或顶层窗口. 若省略 ControlID 参数, 则该函数将使用指定的窗口(由 WinTitle 参数指定), 而非其任一控件.
以下函数具有 ControlID 参数: ControlAddItem, ControlChooseIndex, ControlChooseString, ControlClick, ControlDeleteItem, ControlFindItem, ControlFocus, ControlGetChecked, ControlGetChoice, ControlGetClassNN, ControlGetEnabled, ControlGetHwnd, ControlGetIndex, ControlGetItems, ControlGetPos, ControlGetStyle, ControlGetText, ControlGetVisible, ControlHide, ControlHideDropDown, ControlMove, ControlSend, ControlSetChecked, ControlSetEnabled, ControlSetStyle, ControlSetText, ControlShow, ControlShowDropDown, EditGetCurrentCol, EditGetCurrentLine, EditGetLine, EditGetLineCount, EditGetSelectedText, EditPaste, ListViewGetContent, PostMessage, SendMessage. 这些函数中的大多数在其对应的页面上都有示例, 这些示例展示了控件标识符的使用方法.
当应用程序重新创建控件, 改变其顺序, 使用动态或虚拟化界面, 或者依赖那些未公开稳定 Win32 类名或文本的框架时, ClassNN 和控件文本可能会发生变化. 当标识符不可靠时, 应优先使用 HWND 进行生命周期稳定的寻址, 或者结合多个条件. 一般建议如下: 当控件文本是唯一且稳定的时, 使用控件文本; 当控件顺序一致且需要可读性时, 使用 ClassNN; 当需要最大稳定性时, 使用 HWND. 除非您控制目标应用程序, 否则在不同应用程序版本之间避免硬编码标识符.