# Control

对控件作出多种改变.

Control, Cmd [, Value, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]

#### 参数

Cmd, Value | 见下表.
Control | 可以是 ClassNN (控件的类名和实例号) 或控件的名称/文本, 他们都可以通过 Window Spy 来确定.当使用名称/文本时, 匹配模式由 SetTitleMatchMode 决定.如果此参数为空, 将使用目标窗口的顶层控件. 要对一个控件的 HWND (窗口句柄) 进行操作, 请将 Control 参数留空同时在 WinTitle 参数中指定 ahk_id %ControlHwnd% (即使 DetectHiddenWindows 为 OFF, 这样也适用于隐藏的控件) .获取控件的 HWND 的典型方法是使用 ControlGet Hwnd, MouseGetPos, 或 DllCall 命令.
WinTitle | 目标窗口的标题或标题中的部分文字 (匹配模式由 SetTitleMatchMode 决定).如果此参数和后面三个参数都忽略, 默认目标是 上一次匹配窗口.如果此参数是字母 A, 同时省略后面三个参数, 则以当前的活动窗口为目标.要用窗口的类名进行匹配, 请指定 ahk_class ExactClassName (Window Spy 中可以显示类名).要用窗口的 进程标识符 (PID) 进行匹配, 请指定 ahk_pid %PID变量%.要使用 窗口组 进行匹配, 请指定 ahk_group GroupName.要使用窗口的 唯一 ID 进行匹配, 请指定 ahk_id %VarContainingID%.要减小检测范围, 请指定 多重条件.例如: My File.txt ahk_class Notepad
WinText | 如果使用这个参数, 则它应该是目标窗口中某个文本元素的子字符串 (在 Window Spy 中会显示窗口中的文本元素).隐藏文本只有当 DetectHiddenText 设置为 ON 的时候才能检测到.
ExcludeTitle | 标题中包含该参数指定的文字的窗口将被排除.
ExcludeText | 文本元素中包含该参数指定的文字的窗口将被排除.

#### Cmd, Value

Cmd 和 Value 参数相互依赖, 其用法描述如下.

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

Uncheck: 关闭单选框或复选框.

Enable: 启用之前禁用的控件.

Disable: 禁用或灰化控件.

Show: 显示之前隐藏的控件.

Hide: 隐藏控件. 另外, 如果你还想同时禁用控件的快捷键 (加下划线的字母), 请通过 "Control Disable" 命令禁用控件.

Style,N 或 ExStyle,N: 分别改变控件的样式或扩展样式. 如果 N 中的首个字符是加号或减号, 则会增加或移除 N 中指定的样式(可同时指定多个样式, 下同). 如果首个字符是脱字符 (^), 则会切换 N 中指定的样式.如果首个字符是数字, 则控件原来的样式被完全覆盖; 也就是说变成 N 中指定的样式. 如果没有匹配的目标窗口/控件或者不能应用指定样式的时候 (这种情况多出现在 Windows 9x 系统上) ErrorLevel 被设置为 1.

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

    Control, Style, ^0x800000, Edit1, WinTitle  ; Set the WS_BORDER style to its opposite state.

ShowDropDown: 拉下组合框使得它的选项可见.

HideDropDown: 功能与上述命令相反.

TabLeft [, Count] 和 TabRight [, Count]: 在 SysTabControl32 控件中向左或向右移动一个或多个标签页. 如果 Count 省略或为空, 则假定为 1. 想要直接用数字选择标签页, 用比你希望选择的标签页编号小 1 的数字替换下面的数字 5. 换句话说, 0 选择首个标签页, 1 选择第二个, 依此类推:

    SendMessage, 0x1330, 5,, SysTabControl321, WinTitle  ; 0x1330 is TCM_SETCURFOCUS.
    Sleep 0  ; This line and the next are necessary only for certain tab controls.
    SendMessage, 0x130C, 5,, SysTabControl321, WinTitle  ; 0x130C is TCM_SETCURSEL.

Add, String: 将 String 作为一个新的条目添加到列表框和组合框 (和其他可能的类型) 的底部.

Delete, N: 删除列表框或组合框中的第 N 个条目. 对首个条目 N 为 1, 对第二个为 2, 依此类推.

Choose, N: 设置列表框或组合框中的选区为第 N 个条目. 对首个条目 N 为 1, 对第二个为 2, 依此类推. 要选择或取消选择 多选 列表框中的所有项目, 请参照此例:

    PostMessage, 0x185, 1, -1, ListBox1, WinTitle  ; Select all listbox items. 0x185 is LB_SETSEL.

ChooseString, String: 设置列表框或组合框中的选区为开始部分匹配 String 的首个条目. 搜索不区分大小写.例如, 如果列表框/组合框包含条目 "UNIX Text", 指定单词 unix (小写) 足以选中它.

EditPaste, String: 在编辑控件的光标处/插入位置粘贴 String (此功能不会影响 clipboard 的内容).

#### ErrorLevel

如果出现错误, ErrorLevel 被设置为 1, 否则为 0.

#### 备注

为了提高可靠性, 在每次使用此命令后都自动地有一个延迟. (Style 和 ExStyle 除外). 这个延迟可以通过 SetControlDelay 改变.

要获取当前鼠标所指向控件的名称, 请使用 MouseGetPos.

窗口中的标题和文字是大小写敏感的.要检测隐藏窗口, 必须打开 DetectHiddenWindows.

#### 相关

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

#### 示例

    Control, HideDropDown, , ComboBox1, Some Window Title