首页 > 其他分享 >[AHK2] 不用结束符的热字串

[AHK2] 不用结束符的热字串

时间:2024-03-25 12:56:10浏览次数:25  
标签:matchList SendText AHK2 ._ actions ih 字串 结束符 listAndActions

开始

通常,我们使用热字串是这样的:

::;btw::by the way

需要使用结束符(; ' ' .等)来触发。

但在官方文档中,找到一种方法可以不使用结束符,基于InputHook的方式。

原始的例子就不展示了,我们直接入正题--封装后的代码。

代码



/**
 * @example
 * ; register actions by constructor
 * _ih := HotStringEx('~;', 1, ['foo', (*) => SendText('bar')])
 * ; or via [_ih.register()] method
 * actions := [
 *   ['btw', (*) => SendText('by the way')],
 *   ['jq', (*) => SendText('jquery')]
 * ]
 * _ih.Register(actions*)
 * ; cancel actions
 * _ih.Cancel('btw') ; O(n) operation
 * ; set timeout function or max-limit function
 * _ih.TimeOutFunc := (*) => MsgBox('timeout')
 * 
 */
class HotStringEx {

  actions := Map()
  matchList := ''
  TimeOutFunc := Noop
  MaxFunc := Noop

  ; ['jq', (*)=>'jquery'], ...
  __New(hk, hkLen, listAndActions*) {
    this.hk := hk
    this.hkLen := hkLen
    if (listAndActions.Length) {
      this._Update(listAndActions)
      Hotkey this.hk, (*) => this._Start(this.matchList), 'On'
    }
  }

  _Update(_param) {
    for v in _param
      this.actions.Set(v[1], v[2])
    for k in this.actions
      _matchList .= k ','
    this.matchList := RTrim(_matchList, ',')
  }

  _Start(matchList) {
    ih := InputHook('V T5 L8 C', '{space};', matchList)
    ih.Start()
    ih.Wait()
    switch ih.EndReason {
      case "Max": this.MaxFunc()
      case "Timeout": this.TimeOutFunc()
      case "EndKey":
      default:
        Send JoinStr('', '{BS ', this.hkLen + ih.input.Length, '}')
        this.actions.Get(ih.Input)()
    }
  }

  _Reload() => Hotkey(this.hk, (*) => this._Start(this.matchList), 'On')

  Register(listAndActions*) {
    this._Update(listAndActions)
    this._Reload()
  }

  Cancel(list*) {
    for key in list
      this.actions.Delete(key)
    this._Update('')
  }
}

示例

使用代码中使用的例子:

; register actions by constructor
_ih := HotStringEx('~;', 1, ['foo', (*) => SendText('bar')])
; or via [_ih.register()] method
actions := [
  ['btw', (*) => SendText('by the way')],
  ['jq', (*) => SendText('jquery')]
]
_ih.Register(actions*)
; cancel actions
_ih.Cancel('btw') ; O(n) operation
; set timeout function or max-limit function
_ih.TimeOutFunc := (*) => MsgBox('timeout')

可以在构造函数中提供actions,也可以使用register方法。

注意

需要注意的是,如果有注册了两个:Date Datetime

第二个将永远不会触发,因为第一个是它的前缀。

以及如果有普通的热字串:Date,优先触发的也是注册的Date。

一种推荐的方式是对于常规的首字母不大写,而注册的大写。

下面是我使用中的例子:

hse := HotStringEx('~;', 1)

main_actions := [
  ['Date', (*) => SendInput(FormatTime(, "yyyy/MM/dd"))],
  ['Time', (*) => SendInput(FormatTime(, "HH:mm:ss"))]
]
hse.Register(main_actions*)
::;datetime:: {
  SendInput(FormatTime(, "yyyy/MM/dd_HH:mm:ss/tt"))
}

标签:matchList,SendText,AHK2,._,actions,ih,字串,结束符,listAndActions
From: https://www.cnblogs.com/refiz/p/18094130

相关文章

  • 洛谷题单指南-搜索-P1032 [NOIP2002 提高组] 字串变换
    原题链接:https://www.luogu.com.cn/problem/P1032题意解读:要计算子串变换的最少步数,典型的最短路问题,可以通过BFS求解。解题思路:思路上比较直观,从给定的字符串开始,找有多少种替换可能,依次进行替换,存入队列,继续BFS,过程中记录替换的次数但是,有一些细节还需要注意:1、有多种替换......
  • UVR5字串中英文对照
    msgidSelectInputmsgstr选择输入文件msgidSelectOutputmsgstr选择输出文件msgidSelectInput(s)msgstr选择输入msgidWidenBoxmsgstr扩大框msgidCloseWindowmsgstr关闭窗口msgidEnableHelpHintsmsgstr启用帮助提示msgidOpenApplicationDirectoryms......
  • [AHK2] wt调用命令
    最近在研究mc服务器,一般启动时使用bat文件就可以,但是我想在终端中运行而不是在cmd中。查了wt和pwsh的文档写出了下面的脚本。作用仅仅是在wt中运行java这条命令。脚本包括一些变量,其中:reuse表示是否打开一个新的wt实例。headC表示在调用jar前运行的powershell命令。javaC中......
  • 回文字串
    回文串一般可以考虑把串倒过来思考问题对一个给定的串,我们将其倒序,设其长度为\(l\),求出原串和倒序的串的LCS,设长度为\(x\),则答案为\(l-x\)证明:我们假设已经获得了最终的回文串,然后我们将这个回文串倒序,那么肯定这个回文串与这个原串是相等的以样例为例其中红色字符是添加的......
  • [AHK2] 为toolwindow窗口添加阴影效果
    如下示例g:=Gui('-Caption+Border');或包含+ToolWindowg.SetFont('s13','consolas')g.AddText('c4c071d',data)g.BackColor:='f6eeda'g.Show('x100y50')WinSetTransColor('white......
  • 【C语言】结束符’\0‘ & gets()字符串输入函数
    ......
  • 【C语言】结束符"\0" & gets()字符串输入函数
    ......
  • 【滑动窗口】无重复字符的最长字串、找到字符串中所有字母异位词、串联所有单词的子串
    一、无重复字符的最长子串题目描述定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。题目链接:无重复字符的最长子串示例1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是"abc",所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因......
  • PTAC语言删除字符串中的字串
    这是题目。初见觉得还好,谁知道越分析越操蛋暗含深意。仔细看,假设我们通过遍历s1删除了两个显性的cat,哎,剩下的是什么Tomisamalecat咋样,牛逼不。说明这题肯定会出现删除一次不够的样例sample。假设我们熟知C语言中#include<string.h>中的strcat,strstr,strcpy等函数,那么这题可以比......
  • 掌握正则验证字串符,轻松搞定字符串匹配
    正则验证字串符是一种强大的工具,可以帮助程序员在处理字符串时轻松进行复杂匹配。本文将介绍正则表达式的概念、语法和在编程中的应用,并通过实例演示如何使用正则表达式进行字符串匹配、替换和提取等操作。一、正则表达式概述在编程中,字符串的处理是不可避免的一部分。我们经常......