zoukankan      html  css  js  c++  java
  • 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}")
  • 相关阅读:
    9.11 eventbus
    9.10,,,实现new instanceof apply call 高阶函数,偏函数,柯里化
    9.9 promise实现 写完了传到gitee上面了,这里这个不完整
    9.5cors配置代码
    9.5 jsonp 实现
    9.5 http tcp https总结
    9.3 es6 class一部分 and es5 class 发布订阅
    8.30 cookie session token jwt
    8.30vue响应式原理
    warning: LF will be replaced by CRLF in renard-wx/project.config.json. The file will have its original line endings in your working directory
  • 原文地址:https://www.cnblogs.com/hyaray/p/15449479.html
Copyright © 2011-2022 走看看