一、AutoIt 与 AutoHotkey 有何异同是选择前者还是后者
我是先接触AutoIt的,但时间还不算久。我看了一些介绍, AutoHotkey是从AutoIt分支出来的,部分开发人员是原来AutoIt的开发人员,这两者有许多方面非常相似,我也看了两者的帮助,确实如此,目前我认为比较不一样的就是AutoIt所用的语言类VB,而AutoHotkey所用的语言类C++或JAVA。实际上我比较熟悉的是C++和JAVA类语言,看上去简洁容易理解,而且本人接触C++语言有很长的时间,所以比如FLASH所用的AS语言,其它J脚本类的也很容易阅读。而对于类VB的我看上去不是不能理解,而是比较吃力,所以我在先接触AutoIt时感觉这语言比较杂乱,特别是endif这些比较罗嗦的语法比较讨厌。既然是我比较不喜欢VB类,那为什么我选择了AutoIt呢?原因很简单,本来只是想找一种编程工具写个工具,但又不想用比较复杂的VC++编写,因为使用VC++与MFC写图形界面我反而没什么接触,所以想找一比较快速的脚本语言写个图形界面程序,结果找到的是AutoIt而不是AutoHotkey,所以就先用了几天时间。因为AutoIt与AutoHotkey有根源,所以通过一些介绍关注了下AutoHotkey,知道非常相似。其实以前就有下载过这样的编程工具,但看名字,可能只是针对写游戏键盘鼠标自动化用的吧!但现在看来,似乎不是那么回事,原来看介绍还可以实现类似于AutoIt中我需要的功能,比如文件目录操作,GUI等。目前对阅读VB类已经不成问题,已经能实现一些功能,现在开始做我的工具。但我的仍然不改我的印象,视觉上,代码还是太乱了。如果是这样,不知道有没有必要转向类C++的AutoHotkey?毕竟我与某些评论的观点一致,AutoIt比较失败的就是使用了类VB的语言。
二、[求教]AutoHotKey 不激活视窗,鼠标后台点击的语法
试试这个
ControlClick
发送鼠标按钮或鼠标滚轮事件到控件。
ControlClick [, Control-or-Pos, WinTitle, WinText, WhichButton, ClickCount, Options, ExcludeTitle, ExcludeText]
参数
Control-or-Pos
如果此参数为空,则点击目标窗口的顶层控件(或如果窗口没有控件则点击窗口自身).否则,使用下列两种模式的其中一个.
模式 1(位置):指定相对于目标窗口左上角的 X和 Y坐标. X坐标必须在 Y坐标前面,且它们之间需要含有至少一个空格或 tab.例如:X55 Y33。如果在指定的坐标存在控件,则会发送点击事件到这个坐标处.如果没有控件,则发送事件到目标窗口自身(根据窗口的性质,这可能不会产生效果).注意:在此模式中,会忽略 Options参数中的 X和 Y字母选项。
模式 2(ClassNN或文本):可以指定 ClassNN(控件的类名和实例编号)或控件的名称/文本,它们都可以通过 Window Spy获取.使用名称/文本时,匹配行为由 SetTitleMatchMode决定.
默认情况下,模式 2优先于模式 1.例如,在一种不太可能的情况中某个控件的文本或 ClassNN格式为"Xnnn Ynnn",那么此时会使用模式 2.要覆盖此行为而无条件使用模式 1,请在 Options中加上单词 Pos,例如:ControlClick, x255 y152, WinTitle,,,, Pos
要操作控件的 HWND(窗口句柄),请将此参数留空同时在 WinTitle参数中指定 ahk_id%ControlHwnd%(即使在 DetectHiddenWindows设置关闭时,这样也可以操作隐藏控件)。获取控件的 HWND的一般方法是使用 ControlGet Hwnd, MouseGetPos或 DllCall.
WinTitle
窗口标题或识别目标窗口的其他条件。请参阅 WinTitle。
WinText
如果使用此参数,那么它必须是目标窗口中单个文本元素的子字符串(和内置的 Window Spy工具显示的一样).当 DetectHiddenText的设置为 ON时,那么会检测到隐藏文本元素.
WhichButton
要点击的按钮: LEFT, RIGHT, MIDDLE(或这些单词的首个字母).如果省略或为空,则使用 LEFT按钮.
还支持 X1(XButton1:第四个鼠标按钮)和 X2(XButton2:第五个鼠标按钮)。
还支持 WheelUp(或 WU)和 WheelDown(或 WD)。此时 ClickCount为需要转动的滚轮格数.
Windows Vista或更高版本 [v1.0.48+]:还支持 WheelLeft(或 WL)和 WheelRight(或 WR)(它们在较旧的操作系统中没有效果).此时 ClickCount为需要转动的滚轮格数.
ClickCount
要点击鼠标的次数,可以为表达式.如果省略或为空,则点击 1次.
选项
零个或多个下列选项字母组成的系列.例如:d x50 y25。
NA [v1.0.45+]:也许可以提高可靠性.请参阅后面的可靠性.
D:按住鼠标按钮不放(即生成按下事件).如果 D和 U选项都没有包含,则会发送完整的点击事件(按下事件和弹起事件).
U:释放鼠标按钮(即生成弹起事件).此选项不能和 D选项同时使用.
Pos:在 Options的任意位置指定单词 Pos,这样会无条件使用在上面 Control-or-Pos参数中描述的 X/Y位置模式.
Xn:指定 n为要点击的相对于控件左上角的 X坐标.如果未指定,则在控件的水平中心点击.
Yn:指定 n为要点击的相对于控件左上角的 Y坐标。如果未指定,则在控件的垂直中心点击.
在 X和 Y选项中使用十进制数而不是十六进制数.
ExcludeTitle
标题中含有此参数值的窗口将被排除.
ExcludeText
文本中含有此参数值的窗口将被排除.
ErrorLevel
[v1.1.04+]此命令失败时会抛出异常.想了解更多信息,请参阅运行时错误.
如果遇到问题则 ErrorLevel被置为 1,否则为 0.
可靠性
要提高可靠性,尤其是在 ControlClick期间用户同时在使用鼠标,请尝试下面的一种或两种方法也许会有所帮助:
1)请在 ControlClick前面加上 SetControlDelay-1。这样可以避免在点击时按住鼠标,减少对用户使用鼠标的干扰.
2)在第六个参数(Options)中指定字符串 NA,如下所示:
SetControlDelay-1
ControlClick, Toolbar321, WinTitle,,,, NA
NA可以避免激活目标窗口,同时避免混淆它和脚本的输入,这样可以防止鼠标实际移动产生的冲突(但通常只在目标窗口不活动时)。然而,此方法不是对所有的窗口和控件都有效.
备注
在滚动鼠标滚轮时,有些程序不会接受大于 1的 ClickCount.对于这些程序,请使用循环来转动多个格数,例如这个例子转动 5格:
Loop, 5
ControlClick, Control, WinTitle, WinText, WheelUp
窗口标题和文本是区分大小写的.只有在打开 DetectHiddenWindows设置时,才能检测到隐藏窗口。
示例ControlClick, OK, Some Window Title;点击 OK按钮
ControlClick, x55 y77, WinTitle;在坐标上进行点击.注意 X和 Y之间的空隙.
;下面的方法可以提高可靠性并减少副作用:
SetControlDelay-1
ControlClick, Toolbar321, WinTitle,,,, NA x192 y10;使用 NA模式在相对于命名控件的坐标处进行点击.
三、AutoHotkey是做什么的
AutoHotkey是一款免费的、Windows平台下开放源代码的热键脚本语言。有了它,您就可以:
通过发送键盘或鼠标的键击动作命令来实现几乎所有操作的自动化。您可以自己编写宏或者使用宏录制器来生成;
为键盘,游戏操纵杆和鼠标创建热键。事实上任何的按键、按钮或组合键都可以被设置为热键;
当键入您自定义的缩写时可以扩展缩写。例如,键入“btw”就可以自动扩展为“by the way”;
创建自定义的数据输入表格、用户界面、菜单等。详情请看图形界面部分;
映射键盘、游戏操纵杆和鼠标上的按键或按钮;
运行现有的AutoIt v2脚本并用新功能来增强它们;
将脚本文件编译成EXE可执行文件,使得程序在没有安装AutoHotkey的机器上得以运行;
借助相关工具以实现更强大的功能。
更多关于热键的说明
AutoHotkey可令键盘、游戏操纵杆和鼠标的所有潜能都发挥出来。例如,除了典型的Control、Alt和Shift键之外,你还可以定义Win键(徽标键)和Capslock键作为调节键。而实际上你还可以设置任意的键盘按键或鼠标按键作为调节键。详细内容请看高级热键部分。
其他功能
调节音量、设置静音,以及其他关于声卡的设置;
令指定窗口变为透明,顶层窗口,或改变外形;
用游戏操纵杆或键盘代替鼠标;
监控您的系统。例如,当您不希望见到的窗口出现时自动关闭它们;
获取并改变剪贴板的内容,包括从资源管理器中复制的文件的名称;
关闭或屏蔽 Windows自有的快捷键,例如Win+E和Win+R;
取替Alt-Tab(通过按键、鼠标滚轮或按钮)从而减轻RSI(肢体重复性劳损);
使用您喜欢的图标、工具提示(ToolTip)、菜单项目和子菜单来自定义托盘图标菜单;
显示对话框、工具提示(Tooltips)、气球提示以及弹出菜单,与用户交互;
执行脚本动作来响应系统关闭或注销;
检测系统空闲时间。例如,在系统空闲的时候执行高CPU负荷的任务;
通过检测图像和象素色彩来自动执行游戏中的动作;
读取、写入以及解释文本文件比起其他语言更容易;
针对一组与通配符匹配的文件进行操作;
可对注册表和 INI文件进行操作。
在 Windows 95/98/Me下的一些限制:
一些高级功能--例如鼠标热键和热字串--在Win9x平台将失效。