AutoHotkey 实现同个热键在各境界下执行对应功能的思路

天下武功,唯快不破。除了全自动,最快的就是一键完成。

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}")
posted @ 2021-10-23 20:50  火冷  阅读(471)  评论(0编辑  收藏  举报