Autohotkey实现任意输入字符串替换为指定内容的方法咨询
用AutoHotkey实现任意输入字符串替换为指定内容
核心需求:任意输入替换为单一固定文本
要实现捕获任意输入字符串并替换为指定内容,AutoHotkey的InputHook是最合适的工具——它能监听并捕获用户输入的所有字符,再通过触发事件完成替换。
以下是可直接运行的示例代码:
; 设定要替换成的目标文本 targetText := "Quack, Quack quack quack quack quack" ; 创建输入钩子,捕获所有可打印字符,按Enter触发替换 ih := InputHook("V", "{Enter}") ih.KeyOpt("{All}", "E") ; 允许所有常规输入按键 ih.OnEnd := Func("ReplaceUserInput") ih.Start() ReplaceUserInput(ihObj) { global targetText ; 删除用户刚输入的所有内容(按退格键次数等于输入字符数) SendInput, % "{Backspace " . StrLen(ihObj.Input) . "}" ; 输出目标文本 SendInput, % targetText ; 重启钩子,继续监听下一次输入 ihObj.Start() } ; 按Esc键终止脚本 Esc::ExitApp
代码说明:
InputHook("V", "{Enter}"):V表示输入内容会实时显示,{Enter}设定为替换触发键——用户输入完内容后按Enter,就会触发替换逻辑。ReplaceUserInput函数负责核心替换:先删除原输入,再发送目标文本,最后重启钩子保持监听。
扩展需求:随机替换为预选文本
如果后续要实现随机替换,只需把固定目标文本换成候选数组,用Random函数随机选取即可,示例代码如下:
; 定义预选文本数组 candidateTexts := [ "Quack, Quack quack quack quack quack", "Quack, Snack quack flack flack snack", "Flack, Quack snack flack quack snack" ] ih := InputHook("V", "{Enter}") ih.KeyOpt("{All}", "E") ih.OnEnd := Func("RandomReplaceInput") ih.Start() RandomReplaceInput(ihObj) { global candidateTexts ; 删除原输入内容 SendInput, % "{Backspace " . StrLen(ihObj.Input) . "}" ; 生成随机索引(AutoHotkey数组索引从1开始) Random, randIdx, 1, candidateTexts.Length() ; 发送随机选中的文本 SendInput, % candidateTexts[randIdx] ihObj.Start() } Esc::ExitApp
自定义调整建议
- 触发键可修改:比如把
{Enter}换成{Ctrl down}{Enter}{Ctrl up},用Ctrl+Enter触发替换。 - 隐藏输入内容:如果不想让原输入显示,可把
InputHook的第一个参数改成"VI"(I表示忽略输入,不显示原内容)。
内容的提问来源于stack exchange,提问作者hueberto550
相关产品推荐
相关产品推荐

