# GuiControlGet

获取 GUI 窗体中控件的各种类型的信息.

GuiControlGet, OutputVar [, Sub-command, ControlID, Param4]

#### 参数

OutputVar | 用于保存结果的变量名称.如果命令无法完成 (请参看下面的 ErrorLevel), 此变量被置空.
Sub-command | 见下表.
ControlID | 如果省略或为空, 则假定此变量和输出变量的名称相同. 例如, GuiControlGet, MyEdit 等同于 GuiControlGet, MyEdit,, MyEdit. 如果目标控件有一个关联变量, 请将变量名指定为 ControlID (此方法优先于后面描述的方法). 由于这个原因, 最好给每个之后需要由 GuiControl 或 GuiControlGet 命令访问的控件指定一个变量, 即使此控件是非输入型控件 (例如 GroupBox 或 Text). 否则, ControlID 可以为 ClassNN (控件的类名和实例号) 或控件的名称/文本, 它们都可以使用 Window Spy 来确定. 当使用名称/文本时, 匹配模式由 SetTitleMatchMode 决定.注: 一个图片控件的文件名 (在控件创建时指定的) 也可以作为其 ControlID.
Param4 | 除非在下面的子命令列表中有特别注明, 否则此参数被忽略.

#### ErrorLevel

如果指定的窗口/控件不存在或其他一些错误导致命令无法工作, ErrorLevel 被设置为 1.否则, 它被设置为 0.

#### Sub-commands

(Blank): 把 Sub-command 留空来获取控件的内容. 除了下面的控件类型, 其他都是无须解释的:

Picture: 获取控件创建时最初指定的图片文件名. 即使指定一个新的图片文件名, 此名称也不会改变.

Edit: 获取编辑控件的内容, 但在文本中任何换行的地方将表示为简单的换行符 (`n) 而不是非 GUI 命令像 ControlGetText 和 ControlSetText 所使用的传统的 CR+LF (`r`n).

Hotkey: 如果控件中没有热键则获取的值为空. 否则它获取的是按键修饰符和键名. 例如: ^!C, ^Home, +^NumpadHome.

Checkbox/Radio: 如果控件被选中则返回 1, 未选中则返回 0, 而如果它含有灰色的复选标记则返回 -1.要获取控件的文本/标题而不是选择状态, 请在参数 Param4 中指定单词 Text.注: 不同于 Gui Submit 命令, 单选框按钮总是个别的获取, 不论它们是否在一个单选框的组中.

UpDown/Slider/Progress: 获取控件的当前位置.

Tab/DropDownList/ComboBox/ListBox: 获取当前选择的项目/标签的文本 (如果控件有 AltSubmit 属性时则获取它的位置). 对于组合框, 如果没有选择项目, 则获取控件编辑区域的文本.对于 多选列表框, 输出的内容中使用窗口的 当前分隔符.

ListView 和 TreeView: 当 Sub-command 为空时不支持这两种控件. 作为替代, 请使用内置的 ListView 函数 和 TreeView 函数.

StatusBar: 仅获取第一部分的文本.

注: 要明确的获取获取任何控件的文本/标题而不是其内容, 请在参数 Param4 中指定单词 Text.

GuiControlGet, OutputVar, Pos: 获取控件的位置和大小. 位置是相对于 GUI 窗口的客户区, 这是不包括标题栏, 菜单栏和边框的区域. 控件的信息保存在名称以 OutputVar 开始的四个变量中. 例如:

    GuiControlGet, MyEdit, Pos
    MsgBox The X coordinate is %MyEditX%. The Y coordinate is %MyEditY%. The width is %MyEditW%. The height is %MyEditH%.

在 函数 中, 要创建一组全局变量而不是局部变量, 请在使用此命令前 声明 OutputVar 为全局变量 (相反在 assume-global 函数中同样如此).

GuiControlGet, OutputVar, Focus: 获取当前拥有键盘焦点的控件的控件标识符 (ClassNN). 因为指定的 GUI 窗口为 活动 时其中的一个控件才拥有焦点, 所以如果其不活动则设置 OutputVar 为空. 用法示例: GuiControlGet, focused_control, focus

GuiControlGet, OutputVar, FocusV [v1.0.43.06+]: 与 Focus (上面的) 相同, 除了它获取的是焦点控件 关联变量 的名称. 如果目标控件没有关联变量, 则获取控件的文本/标题中开始的 63 个字符 (这常用来避免给每个按钮一个变量名).

GuiControlGet, OutputVar, Enabled: 如果控件是启用的则返回 1, 禁用的则返回 0.

GuiControlGet, OutputVar, Visible: 如果控件是可见的则返回 1, 隐藏的则返回 0.

GuiControlGet, OutputVar, Hwnd [v1.0.46.16+]: 获取控件的窗口句柄 (HWND). 控件的 HWND 通常使用于 PostMessage, SendMessage, 和 DllCall 命令中.注: HwndOutputVar 通常是获取 HWND 的一种较简洁的方式.

#### 备注

要根据窗口编号而不是对默认的窗口进行操作 (见下文), 在子命令前加上数字和一个冒号, 例如:
GuiControlGet, MyEdit, 2:
GuiControlGet, MyEdit, 2:Pos
GuiControlGet, Outputvar, 2:Focus

一个 GUI 线程 被定义为一个 GUI 操作结果启动的任意线程. GUI 操作包括在 GUI 窗口的菜单栏选择一个项目, 或触发 GUI 窗口中某个 g-label (例如按下一个按钮).

一个 GUI 线程的默认窗口编号是启动此线程的窗口编号. 非 GUI 线程使用 1 作为默认窗口编号.

#### 相关

Gui, GuiControl, ControlGet

#### 示例

    GuiControlGet, MyEdit
    GuiControlGet, CtrlContents,, MyEdit  ; Same as the above except uses a non-default output variable.
    GuiControlGet, MyCheckbox1 ; Retrieves 1 if it is checked, 0 if it is unchecked.
    GuiControlGet, MyCheckbox1,,, Text  ; Retrieves the caption/text of the checkbox.
    GuiControlGet, Pic, Pos, Static4  ; The position/size will be stored in PicX, PicY, PicW, and PicH