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}")
  • 相关阅读:
    「数列分块入门学习笔记」
    「Luogu P3273 [SCOI2011]棘手的操作」
    「CF1342D Multiple Testcases」
    「CF803G Periodic RMQ Problem」
    【cf比赛记录】Educational Codeforces Round 77 (Rated for Div. 2)
    【cf比赛记录】Codeforces Round #601 (Div. 2)
    【cf比赛记录】Codeforces Round #600 (Div. 2)
    【学习报告】简单搜索
    【POJ2676】Sudoku
    【POJ1416】Shredding Company
  • 原文地址:https://www.cnblogs.com/hyaray/p/15449479.html
Copyright © 2011-2022 走看看