# ControlClick

向指定控件发送一个鼠标点击或鼠标滚轮事件。

ControlClick [, Control-or-Pos, WinTitle, WinText, WhichButton, ClickCount, Options, ExcludeTitle, ExcludeText]

#### 参数

Control-or-Pos | 如果此 参数(parameter)为空，目标窗口的最顶端控件将被点击(如果窗口没有控件则点击窗口本身)。如果有参数，则分为以下两种模式。 模式 1 (坐标): 被指定的X和Y坐标相对于目标窗口的左上角。X坐标必须位于Y坐标的前面，并且他们之间至少要有一个空格或者制表符把他们隔开。例如: X55 Y33。如果有一个控件位于这个指定的坐标处，则将发送鼠标事件到该坐标处(控件将被点击)。如果此处没有控件，则目标窗口自身会被发送鼠标事件(也许并不会产生效果，取决于这个窗口)。在这种情况下,Options参数(parameter)里的X和Y选项将被忽略。 模式 2 (控件的 ClassNN 或 文本): 可以是控件的名称/文本或 ClassNN (控件的 classname(类名)和序号)，它们都可以通过 Window Spy 来确定。当使用名称/文本时，matching behavior (匹配模式)通过 SetTitleMatchMode 决定。 默认情况下，模式2 优先于模式1。打比方，有这样的一个控件，它的文本或ClassNN是这样的格式: "Xnnn Ynnn"，这种情况下模式2将会生效。如果想要使用模式1(坐标)并且避免这种情况的发生，请在Options中指定Pos一词。例如: ControlClick, x255 y152, WinTitle,,,, Pos 如果要通过控件的HWND (句柄)来操作, 请在此参数(parameter)上留空并在WinTitle上指定ahk_id %控件句柄% (这样仍可以作用于隐藏的控件即使 DetectHiddenWindows 设定为 Off)。控件的HWND可以通过以下方式来获取: ControlGet Hwnd, MouseGetPos, 或者 DllCall。
WinTitle | 目标窗口的标题或标题中的部分文字（匹配模式由 SetTitleMatchMode 决定）。如果这个参数和另外 3 个参数(WinText，ExcludeTitle，ExcludeText)都被忽略，默认目标是 上一次匹配窗口 。如果这个参数使用字母 A ，同时省略其它 3 个窗口参数，则以当前激活的窗口作为目标。要用窗口的 class 名进行匹配，使用 ahk_class 精确 class 名（Window Spy 中可以显示 class 名）。要用窗口的 进程标识符（PID）进行匹配，使用 ahk_pid %PID变量% 。要用 窗口组 ，使用 ahk_group 组名 （此时 WinText ，ExcludeTitle ，以及 ExcludeText 三个变量要省略）。要用窗口的 唯一 ID 进行匹配，使用 ahk_id %ID变量% 。要减小检测范围，使用 多重条件 ，例如：My File.txt ahk_class Notepad
WinText | 如果使用这个参数(parameter)，则它应该是目标窗口中某个文本元素的子字符串（在 Window Spy 中会显示出窗口中的文本元素）。隐藏文本只有在 DetectHiddenText 设置为 ON 的时候才能检测到。
WhichButton | 要发送的鼠标事件: LEFT(左键), RIGHT(右键), MIDDLE(中键) (或者取这些单词的首字母)。如果忽略或留空，将点击左键。 Windows 2000/XP 及以上：X1 (X按键1，第4个鼠标按键) 和 X2 (X按键2,第5个鼠标按键) 是被支持的。 Windows NT/2000/XP 及以上：WheelUp (or WU) 和 WheelDown (or WD) 是被支持的。在这种情况下， ClickCount 是滚轮滚动的次数。 Windows Vista 及以上 [v1.0.48+]：WheelLeft (or WL) 和 WheelRight (or WR) 是被支持的 (它们在旧的操作系统中没有效果)。 在这种情况下， ClickCount 是滚轮滚动的次数。
ClickCount | 发送鼠标点击事件的次数，可以使用 expression(表达式)。如果忽略或者留空，默认次数为 1 。
Options | 一个选项字母的序列，包含零个或更多的选项字母。例如: d x50 y25 NA [v1.0.45+]: 可能提高可靠性。参考下面的 reliability (可靠性)。 D: 按住鼠标按键并不放开(产生一个按下的事件)。如果 D 和 U 两个选项都不存在的话，则将发送一个完整的点击(按下再放开)。 U: 放开鼠标按键(产生一个放开的事件)。如果 D 已经存在则不能同时使用这个选项 (反之亦然)。 Pos: 在 Options 的任何位置指定 Pos 一词，以无条件地使用X/Y坐标模式，就像在上面 Control-or-Pos 参数里描述的那样。 Xn: n指定要点击的X坐标，相对于控件的左上角。如果没有指定，则点击会被发送到控件的横向中点。 Yn: n指定要点击的Y坐标，相对于控件的左上角。如果没有指定，则点击会被发送到控件的纵向中点。 请对 X 和 Y 选项使用十进制(而非十六进制)数字。
ExcludeTitle | 标题含有此参数值的窗口将不被考虑。
ExcludeText | 文本含有此参数值的窗口将不被考虑。

#### ErrorLevel

如果出现问题，ErrorLevel 值将被设置为 1 ，否则为 0 。

#### reliability (可靠性)

提高可靠性 -- 特别是当用户正在使用鼠标的时候进行 ControlClick -- 请尝试一下的两点或其一 :

1) 在 ControlClick 之前使用 SetControlDelay -1 。这样可以避免在点击时鼠标按键被按住，以降低用户对鼠标操作时对脚本运行造成的干扰。

2) 在任何地方指定 NA 在第6个参数 (Options)，如下所示:

    SetControlDelay -1
    ControlClick, Toolbar321, WinTitle,,,, NA

"NA" 可以避免激活目标窗口，也可以避免它的输入处理和脚本的相混淆，而这可以免除物理鼠标移动带来的干扰 (通常是在目标窗口没有激活时)。然而，这个方法可能对所有类型的窗口和控件都无效。

#### 注意

不是所有的程序都会响应一个 ClickCount 大于 1 的鼠标滚轮事件。对于这些程序，请使用一个循环来发送一个级数大于 1 的滚轮事件，就像这个使其滚动 5 级的例子:

    Loop, 5
        ControlClick, Control, WinTitle, WinText, WheelUp

窗口的标题和包含的文本是区分大小写的。隐藏的窗口是不会被检测到的，除非 DetectHiddenWindows 被打开(DetectHiddenWindows On)。

#### 相关命令

SetControlDelay, Control, ControlGet, ControlGetText, ControlMove, ControlGetPos, ControlFocus, ControlSetText, ControlSend, Click

#### 示例

    ControlClick, OK, Some Window Title  ; 点击OK按钮。
    ControlClick, x55 y77, WinTitle  ;点击一个设置的坐标。注意X和Y之间的空隙(至少一个空格或者制表符，没有逗号)。
    ; 下面的方法可能会提高可靠性并且减少其他不好的效果:
    SetControlDelay -1
    ControlClick, Toolbar321, WinTitle,,,, NA x192 y10  ; 在 NA 模式下点击相对于一个指定控件的坐标。

翻译: 游否 校对: hsudatalks 2009年2月27日