# Control

对控件进行各种改变.

    Control, SubCommand , Value, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

## 参数

SubCommand, Value
  他们互相依赖, 其用法描述如下.
Control

  可以是 ClassNN(控件的类名和实例编号) 或控件的文本, 它们都可以通过 Window Spy 获取. 使用文本时, 匹配行为由 SetTitleMatchMode 决定. 如果此参数为空, 则使用目标窗口的顶层控件.

  要对控件的 HWND(窗口句柄) 进行操作, 请将 Control 参数留空同时在 WinTitle 参数中指定 `ahk_id %ControlHwnd%`(即使在 DetectHiddenWindows 设置关闭时, 这样也可以操作隐藏控件). 获取控件的 HWND 的一般方法是使用 ControlGet Hwnd, MouseGetPos 或 DllCall().

WinTitle
  窗口标题或识别目标窗口的其他条件. 请参阅 WinTitle.
WinText
  如果使用此参数, 那么它必须是目标窗口中单个文本元素的子字符串(和内置的 Window Spy 工具显示的一样). 当 DetectHiddenText 的设置为 ON 时, 那么会检测到隐藏文本元素.
ExcludeTitle
  标题中含有此参数值的窗口将被排除.
ExcludeText
  文本中含有此参数值的窗口将被排除.

## 子命令

对于 SubCommand, 指定以下命令之一：

- Check: 打开(选中) 单选框或复选框.
- Uncheck: 关闭单选框或复选框.
- Enable: 启用之前禁用的控件.
- Disable: 禁用或 "灰化" 控件.
- Show: 显示之前隐藏的控件.
- Hide: 隐藏控件.
- Style: 改变控件的样式.
- ExStyle: 改变控件的扩展样式.
- ShowDropDown: 显示 ComboBox 控件的下拉列表.
- HideDropDown: 隐藏 ComboBox 控件的下拉列表.
- TabLeft: 在 SysTabControl32 中向左移动一个或多个选项卡.
- TabRight: 在 SysTabControl32 中向右移动一个或多个选项卡.
- Add: 把 String 作为新条目添加到列表框(ListBox) 或组合框(ComboBox)(以及其他适合的类型) 的底部.
- Delete: 删除列表框或组合框中指定的条目.
- Choose: 设置列表框或组合框中的选择为指定的条目.
- ChooseString: 将列表框或组合框中的选择设置为其前导部分与指定的字符串匹配的第一个条目.
- EditPaste: 在编辑控件的插入符号处粘贴指定的字符串.

### Check

打开(选中) 单选框或复选框.

    Control, Check ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

为确保功能正确, 此子命令还将设置输入焦点到控件上.

### Uncheck

关闭(取消选中) 单选框或复选框.

    Control, Uncheck ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

为确保功能正确, 此子命令还将设置输入焦点到控件上.

### Enable

启用之前禁用的控件.

    Control, Enable ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

### Disable

禁用或 "灰化" 控件.

    Control, Disable ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

### Show

显示之前隐藏的控件.

    Control, Show ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

### Hide

隐藏控件.

    Control, Hide ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

如果您还想同时禁用控件的快捷键(加下划线的字母), 使用 Disable 子命令来禁用控件.

### Style

改变控件的样式.

    Control, Style, N , Control, WinTitle, WinText, ExcludeTitle, ExcludeText

如果 N 的首个字符为加号或减号, 那么会分别添加或移除 N 中的样式. 如果首个字符为脱字符(^), 那么 N 中的样式会被切换到相反的状态. 如果首个字符为数字, 则控件样式会被完全覆盖; 也就是说, 它变成了 N. 没有找到目标窗口/控件或无法应用此样式时, ErrorLevel 设为 1.

改变某些样式后需要使用 WinSet Redraw 重绘整个窗口. 此外, 样式表列出了一些样式编号. 例如:

    Control, Style, ^0x800000, Edit1, WinTitle  ; 切换 WS_BORDER 样式到相反状态.

### ExStyle

改变控件的扩展样式.

    Control, ExStyle, N , Control, WinTitle, WinText, ExcludeTitle, ExcludeText

详情请参阅上面的 Style 子命令.

### ShowDropDown

显示 ComboBox 控件的下拉列表.

    Control, ShowDropDown ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

### HideDropDown

隐藏 ComboBox 控件的下拉列表.

    Control, HideDropDown ,, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

### TabLeft

在 SysTabControl32 中向左移动一个或多个选项卡.

    Control, TabLeft , Count, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

如果 Count 省略或为空, 则假定为 1. 要通过编号直接选择选项卡, 请把下面示例中的数字 5 替换为比您想要选择的选项卡的编号小 1 的数字. 换句话说, 使用 0 选择首个选项卡, 1 选择第二个, 依此类推:

    SendMessage, 0x1330, 5,, SysTabControl321, WinTitle  ; 0x1330 为 TCM_SETCURFOCUS.
    Sleep 0  ; 此行和下一行只对于某些选项卡控件才需要.
    SendMessage, 0x130C, 5,, SysTabControl321, WinTitle  ; 0x130C 为 TCM_SETCURSEL.

### TabRight

在 SysTabControl32 中向右移动一个或多个选项卡.

    Control, TabRight , Count, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

详情请参阅上面的 TabLeft 子命令.

### Add

把 String 作为新条目添加到列表框(ListBox) 或组合框(ComboBox) (以及其他适合的类型) 的底部.

    Control, Add, String , Control, WinTitle, WinText, ExcludeTitle, ExcludeText

### Delete

删除列表框或组合框中的第 N 个条目.

    Control, Delete, N , Control, WinTitle, WinText, ExcludeTitle, ExcludeText

对于首个条目 N 为 1, 对第二个则为 2, 等等.

### Choose

设置列表框或组合框中的选择为第 N 个条目.

    Control, Choose, N , Control, WinTitle, WinText, ExcludeTitle, ExcludeText

对于首个条目 N 为 1, 对第二个则为 2, 等等. 要选择或取消选择 多选 列表框中的所有项目, 请参照此例:

    PostMessage, 0x0185, 1, -1, ListBox1, WinTitle  ; 选择所有项目. 0x0185 为 LB_SETSEL.

### ChooseString

将列表框或组合框中的选择(选项) 设置为开头部分与指定的 字符 匹配的第一个条目.

    Control, ChooseString, String , Control, WinTitle, WinText, ExcludeTitle, ExcludeText

搜索不区分大小写. 例如, 如果列表框/组合框包含条目 "UNIX Text", 那么指定单词 unix(小写) 也能选中它.

### EditPaste

在编辑控件(Edit control) 的光标处/插入位置粘贴 String.

    Control, EditPaste, String , Control, WinTitle, WinText, ExcludeTitle, ExcludeText

这不会影响剪贴板中的内容.

## 错误处理

[v1.1.04+]: 此命令失败时会抛出异常. 想了解更多信息, 请参阅运行时错误.

如果遇到问题则 ErrorLevel 被置为 1, 否则为 0.

## 备注

为了提高可靠性, 每次使用此命令后都会自动进行延迟(不包括 Style 和 ExStyle 子命令). 这个延迟可以通过设置 SetControlDelay 来调整.

要获取鼠标当前悬停的控件的 ClassNN 或 HWND, 请使用 MouseGetPos.

窗口标题和文本是区分大小写的. 只有在打开 DetectHiddenWindows 设置时, 才能检测到隐藏窗口.

## 相关

SetControlDelay, ControlGet, GuiControl, ControlGetText, ControlSetText, ControlMove, ControlGetPos, ControlClick, ControlFocus, ControlSend, WinSet

## 示例

隐藏第一个 ComboBox 的下拉列表.

    Control, HideDropDown,, ComboBox1, Some Window Title

dftg