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 组名 (此时 WinTextExcludeTitle ,以及 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: 按住鼠标按键并不放开(产生一个按下的事件)。如果 DU 两个选项都不存在的话,则将发送一个完整的点击(按下再放开)。

U: 放开鼠标按键(产生一个放开的事件)。如果 D 已经存在则不能同时使用这个选项 (反之亦然)。

Pos: 在 Options 的任何位置指定 Pos 一词,以无条件地使用X/Y坐标模式,就像在上面 Control-or-Pos 参数里描述的那样。

Xn: n指定要点击的X坐标,相对于控件的左上角。如果没有指定,则点击会被发送到控件的横向中点。

Yn: n指定要点击的Y坐标,相对于控件的左上角。如果没有指定,则点击会被发送到控件的纵向中点。

请对 XY 选项使用十进制(而非十六进制)数字。

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日