天下武功,唯快不破。除了全自动,最快的就是一键完成。
AutoHotkey 对热键的控制非常强大。可以通过窗口的以下信息综合起来作为条件判断
class
(用得最多)- 标题(一般作为
class
条件的补充) - 程序名(主要用来分类)
- 控件信息(当前激活控件,当前鼠标所在控件,控件状态,控件值)
正因为有如此强大的判断条件,就可以轻松设计一个(或多个)通用热键(我用 F4
)来针对各种界面的默认功能实现一键完成。
首先根据程序名分类
为大部分【主流程序】建个单独的ahk文件(比如微信用 WeChat.ahk
)
并用#HotIf WinActive("ahk_exe WeChat.exe")
来定义动态热键条件,
这样后续定义的热键只会在微信生效(其他应用的热键也用此法定义)
以下用 微信 举例
- 在程序里,可能需要根据不同的子窗口做相应的事
- 微信的主界面 class = WeChatMainWndForPC
- 转发界面 class = SelectContactWnd
- 设置界面 class = SettingWnd
- 查看聊天记录界面 class = FileManagerWnd
- 另存为界面 class = #32770(大部分的保存对话框都是这个类名,由于有通用性,放到后面通用功能内)
- 如果不匹配,则调用下方定义的【通用函数】
非主流程序
其他通用功能,就不需要单独建文件了,直接由自定义的【通用函数】(如hyf_autoF4()
)判断执行
步骤
- 程序名(由于程序名可能会带 x64 或【空格】等内容,所以需要做下处理)
exeName := StrReplace(RegExReplace(WinGetProcessName("A"), "i)_?(x?(64))?(.w+)?$"), " ", "_")
定义各【程序名】的
map
列表,如果包含exeName
则执行相应的函数(以下都是用此思想判断) class
(获取方法cls := WinGetClass("A")
)
上面提及的通用#32770
保存对话框,我的主需求就是一键保存到桌面,就是在这里定义功能- 标题(获取方法
tt := WinGetTitle("A")
) 其他原理同上 - 控件等其他方式
- 确实没定义功能,则模拟发送F4热键原生功能
send("{F4}")