[基础] [GIF动图] 绕过中文输入法发送文本的3种方法

news/2024/2/22 18:36:17

文章编号-AHK-J004

之前有位群友问我,如何才能"绕过中文输入法"发送文本,他是想用自动替换一键发送邮箱,但只要在中文输入法下就会先发送到输入法框中,需要手动点一次,非常麻烦。这是常见的问题,下面我会分享三个解决方案,希望能够帮到你。^_^

中文输入法干扰文本发送(问题动图)

方案1:SendText方案

自从v1.1.27之后,Send命令中新增了{Text}这个功能,也就是“发送文本”,可以说几乎完美的解决了这个问题。(普通的Send是发送键击,所以会误触中文输入法)。

唯一的缺点是可能是版本太新了,如果发给朋友用的话,请先告诉他,升级到最新版。

小结:作为AHK官方的解决方案,在速度和兼容性上达到了很好的平衡,应优先考虑

这里给出一个示例(AHK-J004-示例1),程序设计目的是:按下热字串“/a”,在某文本的行首加上字符串“[AHK] ”。如果不使用SendText,那么在中文输入法下将无法正常发出。

;# AHK-J004-示例1::/a::Send,{Home}SendText("[AHK] ")
return;将命令封装为函数,便于程序维护
SendText(var_string){localSendInput {text}%var_string%return
}

速度:★★☆
普适性:★★★
便捷性:★★★

文章编号-AHK-J005-4-SendEvent&SendInput

另外,值得注意的是

  1. 如果SendMode是Event(也就是默认),那么Send速度会很慢,建议使用SendInput。(速度 SendInput>SendEvent>SendPlay)
  2. 对于长文本来说,即使是SendInput的速度还是不如SendByClip(下一种将要介绍的方法),长文本建议使用SendByClip。
  3. 如果你是使用“热字串自动替换”,那么“自动替换”也可以通过选项T来实现“发送文本”的功能。

方案2:SendByClip

从名字上也能看得出来,其实这就是通过粘贴来实现文本发送,在1.1.27之前,这是最常见到的解决方案。

它的优点就是长文本输入速度快(你可以看到上面的方案唰唰的过程,但SendByClip不会有,像是凭空降临),因为SendByClip往往要在两端加上一些延迟(为了提高兼容性),所以说文本越长,它对比SendText的优势也越大。如果是小段文字,比如20字之内,那么SendText要快很多,也稳定得多。

这个方法还有个问题是误触,毕竟是发送 send ^v键击实现的(后面有函数代码),也难免,好在并不严重。

小结:SendByClip的优势在于“发送长文本时速度快”,当需要快速发送大量文本时,这是不二之选

这个函数就一定要自己封装了,程序本身是没有带的。
要特别强调的一点是,我们只是通过剪切板来发送,所以不能干扰之前的剪贴板内容,保存之前的剪贴板内容需要通过## 内置变量ClipboardAll来实现,ClipBoard是没有格式的。

sendbyclip(var_string)
{ClipboardOld = %ClipboardAll%Clipboard =%var_string%sleep 100send ^vsleep 100Clipboard = %ClipboardOld%  ; Restore previous contents of clipboard.
}

速度:★★☆
普适性:★★☆
便捷性:★★★
文章编号-AHK-J004-3-SendByClip.gif

方案3:ControlSetText 命令

ControlSetText , Control, NewText, WinTitle, WinText, ExcludeTitle, ExcludeText

如果能用Windows Spy探测到控件的ClassNN而且是发送确定的某段文本,那么这种方法的速度非常快,也很稳定。
由于这个命令的自身特点,所以它的缺点就是,普适性差,应用场景很有限。

小结:该方案最大的问题是通用性差,若已知Text控件的Class时,这无疑是一个很好的选择,既快又稳

这里给出一个示例(AHK-J004-示例2)(在文章最末尾),程序设计目的是:按下某快捷键,复制当前选中文本并且跳转到Everthing(一款好用的搜索软件)进行搜索。
文章编号-AHK-J004-4-ControlSetText.gif
速度:★★★
普适性:★☆☆
便捷性:★☆☆

技术总结

**三种方法各有优劣,需要根据不同的场景灵活使用。
发送小篇幅文本→SendText方案
发送大篇幅文本→SendByClip方案
给特定的text控件发送文本→ControlSetText命令**

End

心如止水是Java/AHK的持续学习者,很欢迎您来和我探讨Java/AHK问题。 QQ:2531574300 ^_^

版本信息:

v2
①增加示例2
②修改了部分说法,更简单易懂
v3 - 11月15日
①增加了更简洁易懂的示例3
②"实例"改为描述更精准的"示例"
v4 - 12月05日
①增加了自动替换热字串的相关说明
②增加了关于发送模式的相关说明
v5 - 12月08日
更换示例1,删除部分冗余内容

更多文章

[专栏] AHK程序设计 - 简书(优先持续更新)

[基础] 在AHK中实现函数重载的效果

[基础] AHK函数对象系列-绑定函数对象v3

[基础] AHK函数对象系列-绑定方法对象

[基础] [GIF动图] 绕过中文输入法发送文本的3种方法

[基础] AHK函数对象系列-对象属性与数据域保护v2

问题解答:

[问题解答] 示例不能运行吗? - 关于AHK程序设计系列文章示例问题的解释

版权声明:

该文章版权系“心如止水”所有,欢迎分享、转发,但如需转载,请联系QQ:2531574300,得到许可并标明出处和原链接后方可转载。未经授权,禁止转载。

作者:心如止水

;# AHK-J004-示例2
;********************用"Everthing"搜索选中文字***************************
!^f::EverthingSearch()
returnEverthingSearch(){;## 复制内容try{OutNameNoExt:=SuperCopy(5)}catch{global ycInputBox,t2,复制失败,% "未能复制到内容,请输入文本`n`n`(按下取消程序就结束,输入文本按下Enter或OK会继续搜索`)",,,,,,,,%Clipboard%;如果发现用户取消了,那么什么也不做if (ErrorLevel=1){return}elseOutNameNoExt:=t2};## 如果发现对应窗口存在则激活并且填入IfWinExist %yc%{global yc,thispathWinActivate %yc%WinMaximize %yc%;利用修改Everything输入栏控件文字的方式,填入剪切板的内容。ControlSetText, %TextControl%, %OutnameNoExt%, %yc%};## 如果发现存在,开启之后激活并且填入else{global yc,TextControl,thispathTrayTip,在Everthing内搜索,找不到Everthing的Class%yc%`n将会先启动Everthing,,1try{Run, %thispath%}catch{MsgBox,16,错误,没有找到路径或没有权限运行`n路径如下`n%thispath%return};~ MsgBox,% ErrorLevelWinWait,%yc%,,3if (ErrorLevel=1){;~ MsgBox,5MsgBox,16,错误,路径存在,但Everthing窗口并未出现(或超时)return}WinActivate %yc%WinMaximize %yc%ControlSetText, %TextControl% , %OutnameNoExt%, %yc%return}return
};--------------------------------------------------------------------------------------------------------------- ;# 超级复制 SuperCopy函数
SuperCopy(fast:=15){old := ClipboardAllSleep 50Clipboard :=""Sleep 50Send ^c;测试;## 只要发现fast不是0就开启快速模式,如果开启fast那么就可以通过循环控制这个触发时间if(fast!=0){loop,%fast%{Sleep 10;### 检测剪切板上是否还有内容theruslt:=(Clipboard=="");如果发现不为空(为1),立即跳出if !(theruslt){Sleep 15show := ClipboardTrayTip,超级复制(Fast%fast% 模式),剪切出的内容为:`n%show%,,1Clipboard := oldSleep 15return %show%}} ;循环结束,如果没发现就throw ExceptionClipboard = %old%Sleep 35throw Exception("CopyFail")return};## 如果没有开启快速模式,那么等待1秒钟,如果剪切板没收到才会发送错误代码
elseClipWait,1;防误触暂停
Sleep 50
if(ErrorLevel = 1){
;~ TrayTip,超级复制,剪切失败,,1
Clipboard = %old%
Sleep 35
;## 没复制到,那么就抛出异常
throw Exception("CopyFail")
return
}
;防误触暂停
Sleep 15
show := Clipboard
TrayTip,超级复制,剪切出的内容为:`n%show%,,1
Clipboard := old
Sleep 15
return %show%
}
return

https://dhexx.cn/news/show-742210.html

相关文章

安卓部分手机reload()失效问题

1.在移动wap中,经常会使用window.location.reload()去刷新页面,这个方法在绝大多数浏览器中都不会存在问题,但早上测试的同学提出了一个bug:在安卓某个测试手机(OPPO)的微信自带浏览器中,这个是失效的,并没…

阿里云梁楹:这样的青春,别样的精彩

人的青春应该怎样度过?相信一千个人心中,有一千个答案。我是郭嘉梁,花名梁楹,在不少人眼中,我是一个来自北方的大男孩,一个自带“古典气质的少年”,其实我是一个喜欢晋级打怪,热爱挑…

Echarts(小程序版)图表组件使用,wxcharts.js和uCharts.js

一、Echarts(小程序版) 1.1:下载 GitHub 上的 项目 https://github.com/ecomfe/echarts-for-weixin 1.2:但项目下载之后,打开小程序开发工具,可以看到效果如下,适配性还是比较完美的。 1.3.如…

数据结构-队列(1)

先入先出的数据结构在 FIFO 数据结构中,将首先处理添加到队列中的第一个元素。 如上图所示,队列是典型的 FIFO 数据结构。插入(insert)操作也称作入队(enqueue),新元素始终被添加在队列的末尾。…

Linux文件系统管理 文件系统

概述 文件系统:文件系统这个名词大家都很陌生,不过如果说成分区,大家就比较容易理解了。原先每个分区只能格式化为一个文件系统,所以我们可以认为文件系统就是指分区。不过随着技术的进步,现在一个文件系统可以由几个分…

微信小程序图片上传,删除,拖拽,(裁剪参考链接,参看说明5.6)

场景&#xff1a;从相册中选择照片&#xff0c;展示图片列表&#xff0c;删除某张不需要的图片&#xff0c;通过拖拽调整图片的位置顺序。 1.wxml <!-- 上传图片 --> <view classuploadPic><view classuploadPic-ul clearfix><movable-area classupload…

正则(输入框 input 限制,整数,表情,保留两位小数,type=number时maxlength不起作用,身份证和姓名加密),小程序替换br为可换行

1.输入纯数字 var detail e.detail.value; var detail1 ; if (detail) {detail1 detail.replace(/[^\d]/g, ); } 2.输入正整数 var detail e.detail.value; var detail1 ; if (detail) {detail1 detail.replace(/[^\d]/g, );if (detail1 0) {detail1 1} } 3.输入保…

小程序锚点跳转(例如楼层快捷导航,点击字母滚动到相关城市)

使用场景&#xff1a;楼层之间的快速切换&#xff0c;锚点的跳转&#xff0c;点击字母滚动到相关的城市 原理解析 1.代码 1.1.wxml <view classcontainer> <view classleft><scroll-view classleftScroll scroll-y><block wx:for"{{list}}"…

职场思想分享004 | 为什么你学东西记不住,答案都在这里了

第004招 为什么你学东西记不住&#xff0c;答案都在这里了今天为大家分享老男孩核心思想108招之第004招&#xff1a;为什么你学东西记不住&#xff0c;答案都在这里了。大家有没有觉得&#xff0c;无论是工作还是休息&#xff0c;因为自身追求也或者是未来的危机&#xff0c;你…

picker-view 和 picker-view-column 自定义可以切换的picker

场景&#xff1a;对于小程序官方提供的picker基本能满足大多数需求&#xff0c;但如果涉及类似于在picker的弹出层上进行两种不同类型的picker切换&#xff0c;还是无法实现的。但官方最近新提供了picker-view &#xff0c;可根据自己的使用场景来自定义自己的picker。 1.wxml…