超级热键一学就会简单编程,提升Windows效率
超级热键可通过简单编程 —— 自动化完成复杂操作,提升效率。快速上手
本教程需要一个很小的开源软件 ImTip ( 体积 639 KB ),了解 ImTip 请点击:电脑必备:通用输入法状态提示,再也不怕按错,再也不用看右下角
请右键点开 ImTip 托盘菜单,然后点击「管理超级热键」:
然后将热键配置改为如下代码,并且勾选「启用超级热键」,再点击「保存」按钮使热键生效。//大写金额、日期、时间 ["Ctrl+#34;] = function(hFocus){ win.dlg.chineseNumber().show(); }; //打开调色器 ["Ctrl+#"] = function(hFocus){ //创建选色器 var dlg = win.ui.ctrl.pick(); dlg.show(); //置顶 win.setTopmost(dlg.hwnd,true); };
上面的配置定义了 "Ctrl+#34;,"Ctrl+#" 这两个热键。中括号里是按键名字符串,等号的后面指定要输入的文本或者需要执行的函数对象。
以上热键配置将自动转换为以下 aardio 代码,然后编译执行://导入超级热键 import key.hotkey; //创建超级热键 var superHotkey = key.hotkey(winform); //批量加载热键配置表 superHotkey.loadTable({ ["Ctrl+#34;] = function(hFocus){ win.dlg.chineseNumber().show(); }; ["Ctrl+#"] = function(hFocus){ var dlg = win.ui.ctrl.pick(); dlg.show(); win.setTopmost(dlg.hwnd,true); }; });
超级热键配置其实就是一个表对象 ( table )。每个热键配置由等号分隔的键值对组成,等号前面指定热键,等号后面用一个函数指定要执行的代码。多个热键配置使用分号隔开。
如果不会编程没关系,下面会提供可直接复制粘贴的范例,建议先看几个范例 —— 再看一下:aardio 编程语言快速入门——语法速览
下面看一下 Ctrl + $ 热键运行效果:
Ctrl + # 热键运行效果:
超级热键检测规则
1、如果首个按下的键不是控制键,则不必同时按住多个键。如果按下的键是已注册的热键前半部分,则阻止当前按键继续发送。如果继续按键已不符合任何热键,则释放已捕获的按键并按原顺序重新发送。
2、如果首次按住的是控制键( CTRL,ALT,SHIFT,WIN 之一),则必须同时按住多个键才算已完成热键。如果这样同时按住的多个键是一个已完成的热键,但同时又是其他热键的前半部分,则必须放开所有键才会生效。
3、如果注册单个控制键热键,并且加上 @ 前缀,则放开该键(且中间没有按其他键)才算完成热键。
4、超键热键中任何键名都只表示该键名所在的按键,不区分上档键。例如热键 "~hi" 指连续按 3 个键,其中的 ~ 键不必按 Shift + ~。
5、超级热键会检测按键顺序,["Ctrl+Shift"] 与 ["Shift+Ctrl"] 是不同的热键。如果希望不同顺序触发同一个回调函数,则需要添加多个热键配置。
示例://按连续按 3 个键,每个键都要放开。 ["~AA"] = function(){ }; //按下Shift不放,再按2下Q。 ["SHIFT+Q,Q"] = function(){ }; //按下Ctrl不放,再按K, 然后都放开。 ["Ctrl+K"] = function(){ }; //按下Ctrl不放,再按2次K。 //因为不是其他热键的前半部分,不需要等待放开。 ["Ctrl+K,K"] = function(){ }; //表示按下 Shift 键再放开,中间不按其他键, //通常不会阻止 Shift 切换输入法状态的默认热键。 ["@Shift"] = function(){ };
运行 「aardio 自带范例 > Windows 窗口 > 快捷键 > 超级热键」看下效果:
超级热键回调函数
热键回调函数返回 true 表示允许系统继续发送按键,否则取消该按键,不再继续发送。
例如把斜杠"/"改为顿号的热键配置:["/"] = function(hFocus){ var openState,mode = key.ime.state();// if( !openState /*&&(mode==3) */ ) return true; key.sendString("、") };
上面的代码检测到当前不是中文标点就执行 return true 允许系统继续发送按键。
如果热键回调函数返回一个函数对象,则取消该按键不再发送,并在返回函数以后异步执行返回的函数对象。
例如输入法纠错热键配置就是这样做的:["Ctrl+,"] = function(hFocus){ //... 省略其他代码 //通过返回函数异步执行耗时操作 return function(){ key.combine("SHIFT","HOME"); key.combine("CTRL","C"); //... 省略其他代码 }; };
超级热键基于低级键盘钩子,在热键回调中不允许做耗时操作(在热键回调中返回异步执行的函数则不受限制)。超级热键配置范例:运行指定程序//运行计算器 ["~calc"] = function(hFocus){ process.execute("calc.exe") }; //运行word ["~word"] = function(hFocus){ var word = com.CreateObject("Word.Application") if(word)word.Visible = true; };超级热键配置范例:微软全拼双拼切换["Ctrl+P"] = function(){ var dpSchemes = tsfInput.getDoublePinyinSchemes(); tsfInput.enableoublePinyinScheme(dpSchemes.default===null); }超级热键配置范例:改键演示["Ctrl+."] = function(hFocus){ key.up("Ctrl"); //先把已经按下的键弹起来 key.combine("CTRL","A"); //换成别的键,具体看 aardio 库函数文档 return false; //阻止按键事件 };超级热键配置范例:取消次选键[";"] = function(hFocus){ if( winex.msCandidate.isVisible() ){ key.send(" ;") } else return true; };超级热键配置范例:按 Shift + Back 变 Ctrl + Z["SHIFT+BACK"] = function(hFocus){ key.up("SHIFT"); //先把已经按下的键弹起来 key.combine("CTRL","Z") };超级热键配置范例:斜杠"/"改为顿号["/"] = function(hFocus){ var openState,mode = key.ime.state();// if( !openState /*&&(mode==3) */ ) return true; key.sendString("、") };超级热键配置范例:调整音量//增加音量 ["Ctrl+F6"] = function(hFocus){ key.press("VOLUME_UP"); } //降低音量 ["Ctrl+F7"] = function(hFocus){ key.press("VOLUME_DOWN"); } //切换静音 ["Ctrl+F8"] = function(){ key.press("VOLUME_MUTE"); }超级热键配置范例:依次按 ~date 输入大写的当前日期["~date"] = function(hFocus){ var zh = string.chineseNumber("〇一二三四五六七八九"); key.sendString(zh.date()); //改为 zh.time() 输出大写的当前时间 };
注意超键热键中任何键名都只表示该键名所在的按键,不区分上档键。所以 ~ 键不需要同时按 Shift + ~ 。超级热键配置范例:按大写自动切换到英文输入["CAPSLK"] = function(hFocus){ key.ime.setOpenStatus(false); key.ime.setConversionMode(0); return true; };超级热键配置范例:右 Shift 键切换为英文["RSHIFT"] = function(hFocus){ key.ime.setOpenStatus(false); key.ime.setConversionMode(0); };超级热键配置范例:左 SHIFT 键切换为中文["LSHIFT"] = function(hFocus){ var openState,mode = key.ime.state(); if( openState && !key.ime.capital() ) return true; //当前已经是中文输入模式,不改变默认行为 key.up("SHIFT");//先放开 SHIFT 键 //如果是大写状态,切换为小写 if(key.ime.capital()) key.press("CAPSLK") //英文直接切中文 + 中文标点 key.ime.setOpenStatus(true); //打开输入法 key.ime.setConversionMode(1|0x400); //切换到中文状态,这一步不能省略 //再次尝试用键盘切换中文标点,这一步不能省略 key.combine("CTRL","."); //现在再次检测中文标点状态 var openState,mode = key.ime.state(); if(mode!=3/*_IME_SYMBOLMODE_SYMBOL*/){ //说明切换到了英文标点,再切换回去 key.combine("CTRL",".") } };超级热键配置范例:按 Ctrl + . 切换到中文输入 + 中文标点 + 小写["Ctrl+."] = function(hFocus){ var openState,mode = key.ime.state(); if( openState && !key.ime.capital() ) return true; //当前已经是中文输入模式,不改变默认行为 key.up("Ctrl");//先放开 Ctrl 键 //如果是大写状态,切换为小写 if(key.ime.capital()) key.press("CAPSLK") //英文直接切中文 + 中文标点 key.ime.setOpenStatus(true); //打开输入法 key.ime.setConversionMode(1|0x400); //切换到中文状态,这一步不能省略 //再次尝试用键盘切换中文标点,这一步不能省略 key.combine("CTRL","."); //现在再次检测中文标点状态 var openState,mode = key.ime.state(); if(mode!=3/*_IME_SYMBOLMODE_SYMBOL*/){ //说明切换到了英文标点,再切换回去 key.combine("CTRL",".") } };超级热键配置范例:输入法纠错,已输出英文自动转为中文输入["Ctrl+,"] = function(hFocus){ var openState,mode = key.ime.state(); if( openState && !key.ime.capital() ) return true; //当前已经是中文输入模式,不改变默认行为 key.up("Ctrl");//先放开 Ctrl 键 //如果是大写状态,切换为小写 if(key.ime.capital()) key.press("CAPSLK") //英文直接切中文 + 中文标点 key.ime.setOpenStatus(true); //打开输入法 key.ime.setConversionMode(1|0x400); //切换到中文状态,这一步不能省略 //再次尝试用键盘切换中文标点,这一步不能省略 key.combine("CTRL","."); //现在再次检测中文标点状态 var openState,mode = key.ime.state(); if(mode!=3/*_IME_SYMBOLMODE_SYMBOL*/){ //说明切换到了英文标点,再切换回去 key.combine("CTRL",".") } //通过返回函数异步执行耗时操作(避免系统删除热键钩子) return function(){ key.combine("SHIFT","HOME");//选中当前行 key.combine("CTRL","C");//复制当前行 var line = win.clip.read(); //读取剪贴板文本 var str = string.match(line,"[a-zA-Z]+#34;); //查找尾部连续字母 key.press("RIGHT");//按右方向键,取消选区 //如果字符串非空 if(#str){ key.repeat("BACK",#str);//按退格键指定次数(取字符串长度) key.send(str);//字符串转换为发送按键 //key.press("SPACE");//发果需要按空格,请取消前面的注释符号 } }; };超级热键配置范例:粘贴时替换指定的字符["Ctrl+V"] = function(){ var str = win.clip.read(); if(str && string.find(str,"abcd")){ str = string.replace(str,"abcd",""); win.clip.write(str); } return true; //执行默认操作 }超级热键配置范例:引号配对[`SHIFT+"`] = function(hFocus){ if( checkImeProcess(hFocus,"Code.exe") ){ return true;//允许继续发送按键 } var o,s = key.ime.state(); key.sendString(s==3 ? `""` : `""`); //与目标窗口共享输入状态 winex.attach(hFocus,true); //设置LSHIFT,RSHIFT 为弹起状态 key.up("RSHIFT","LSHIFT","SHIFT"); key.setState(false,"RSHIFT","LSHIFT","SHIFT"); //移动光标 key.press("LEFT"); //取消共享输入状态 winex.attach(hFocus,false); }超级热键配置范例:微软五笔打开或关闭拼音混输["Ctrl+,"] = function(hFocus){ import win.reg; var reg = win.reg("HKEY_CURRENT_USERSoftwareMicrosoftInputMethodSettingsCHS"); var mode = !reg.queryValue("PinyinMixEnable") ? 1 : 0 reg.setDwValue("PinyinMixEnable",mode) key.ime.changeRequest(0x4090409) key.ime.changeRequest(0x8040804) };超级热键配置范例:切换鼠标左右键["Ctrl+SHIFT+RIGHT"] = function(hFocus){ ::User32.SwapMouseButton(!::User32.GetSystemMetrics(23)); }超级热键配置范例:微软五笔叠字键["`"] = function(hFocus){ var openState,mode = key.ime.state();//用法请查看 aardio 文档 if(!openState || mode !=3 || key.getState("Shift") || key.getState("Ctrl") || key.getState("CAPSLK") ) { return true; //允许此按键继续发送 } key.combine("SHIFT","LEFT"); //向后选一个字 key.combine("CTRL","C"); //复制 key.press("RIGHT"); //取消选中 key.combine("CTRL","V"); //粘贴 };实现更多功能 ……
ImTip 体积虽然小,但已自带了大量 #aardio# 库。您也可以下载 aardio ,将 aardio 目录下的 /lib/ 目录复制到 ImTip.exe 所在目录 —— 超级热键就可以使用全部的 aardio 库了。
也可以在 /lib/ 目录下新建用户库,然后通过 import 语句导入超级热键。
超级热键配置本质是一个表对象 (table),不但可以包含键值对,也可以包含数组成员。利用这个特性可在超级热键配置内直接执行代码。例如添加一个检测当前窗口启动程序名的全局函数 checkImeProcess,然后使用该函数检测目标窗口的启动程序文件名:(function(){ var lastFocus,lastPath,lastClass; checkImeProcess = function(hFocus,exeFile){ if(lastFocus != hFocus){ lastClass = win.getClass(hFocus); var tid,pid = win.getThreadProcessId(hFocus); lastPath = process.getPath(pid); lastFocus = hFocus } return (lastPath && io.splitpath(lastPath).file == exeFile ) } })(); //引号配对 [`SHIFT+"`] = function(hFocus){ if( checkImeProcess(hFocus,"Code.exe") ){ return true;//允许继续发送按键 } var o,s = key.ime.state(); key.sendString(s==3 ? `""` : `""`); //与目标窗口共享输入状态 winex.attach(hFocus,true); //设置LSHIFT,RSHIFT 为弹起状态 key.up("RSHIFT","LSHIFT","SHIFT"); key.setState(false,"RSHIFT","LSHIFT","SHIFT"); //移动光标 key.press("LEFT"); //取消共享输入状态 winex.attach(hFocus,false); }
比较常用的按键、文本输入函数://发送字符串 key.sendString("这里是要发送的字符串") //发送按键 key.send("/") //发送按键 key.press("ENTER") //判断中文输入法是否打开,打开则执行花括号中的语句 if( key.ime.state() ){ }
更多库函数用法请参考 aardio 自带的《库函数文档》,或者 aardio 自带的范例:
aardio 也支持很多第三方编程语言,例如 C语言、C++、C#、Java、Python、R、Javascript、Node.Js、Fortran、VB、PHP、VBScript、PowerShell、NewLISP、AutoLISP、Delphi、FreeBASIC、Ruby、Rust、Julia、Nim、Go 语言、批处理 ...... 用法请参考 aardio 自带范例。
如果您对超级热键还有任何疑问,欢迎在评论区留言,我会尽快解答。
资讯我国5G套餐全网用户达9。51亿年内有望突破10亿大关中国电信中国移动中国联通公布的7月运营数据显示,我国5G套餐用户数保持高速增长,总量已达9。51亿。按照这一增速,年内我国5G套餐用户数有望突破10亿大关。三家基础电信企业的7月运
空间弯曲谬论爱因斯坦的空间弯曲是错误的,下面我用两种方法来证明。第一种推翻证据法日全食为空间弯曲的最有力证据图1为日全食。图2为地球观测者发现太阳周围星体发生偏移。我们知道,太阳主要是由气体组
天际汽车ME5可油可电增程式新能源车A级家用型SUV,轻奢国民新能源车。家族式鲨鱼之吻前脸设计,4580mm车长,2750mm轴距,最大化乘坐空间。10。25英寸仪表,14。8英寸中控大屏,256色温感变色氛围灯,2
法本信息营收净利再创新高正式上线新能源车COSO解决方案8月25日晚间,法本信息(300925)发布2022年中报业绩,营收净利润及扣非净利润等核心财务指标同比继续增长,超出此前市场对同行业的普遍预期。报告期内,公司在数字化升级方面也取
(经济)我国互联网地图日覆盖用户数逾10亿人次新华社北京8月29日电(记者王立彬)在政策扶持下,我国导航电子地图互联网地图产业迅速发展,促进了社会经济建设方便了人民群众生活。今年8月29日是第19个全国测绘法宣传日,中国地理信
温医大附一院自主研发就医一件事获评省人工智能典型案例来源温州市人民政府社会信息近日,温医大附一院自主研发的就医一件事应用,获评2022年浙江省人工智能典型应用案例。该应用于2020年11月投入运行,目前单次可为患者节约就医时间15分
甲壳类动物使水泥更坚固作者ChristineMiddleton编译袁瑜图片来源httpsphysicstoday。scitation。or就人类的材料消耗而言,混凝土仅次于水。水泥(由粉状氧化钙二氧化硅
我国无人机达到世界先进水平,无人机之父到底是谁?媒体报道,空军新闻发言人说,我国无人机达到世界先进水平。那么,我国的无人机之父是谁呢?下面,来了解一下有关情况。媒体报道不了解不知道,一了解吓一跳。我国无人机之父居然有好几个。先来
半价拥有旗舰,库存手机值得入手吗?清库存,可能是2022年下半年主流手机厂商们最紧迫的任务。关注手机行业的朋友们,想必最近都听到了手机品牌面临高位库存压力的传闻。从消息面来看,虽然这些传闻跟各家的实际情况多少都有些
上海贝岭研究报告模拟功率双驱动,加速向工控汽车端转型(报告出品方申万宏源研究)1。模拟功率双驱动,加速向工控汽车端转型1。1三十余载深耕,铸成国产模拟IC一线大厂公司是我国集成电路行业第一家上市公司,专注于模拟和数模混合IC。上海贝
房地产业与中国经济,特色服务的居住环境,是老龄化社会发展趋势房子是用来住的不是用来炒的!2013年以来,国家从房住不炒到住有所居,再到不将房地产作为短期刺激经济的手段,不仅明确了房地产业的地位及产业作用,也指明了未来房地产业发展的方向。中国
9。25BTC分析比特币晚间分析百万也是前面给出比特币回踩的多单也是成功把握,比特币成功把握900点利润,比特币在前面下跌之后,行情也是一直围绕在下方18500,上方19500一线进行来回波动震荡走
在新发展格局中做强做优县域经济来源经济日报郡县治,天下安。县域位于城乡两头的交汇点,具有独特的辐射带动作用,县域经济是国民经济的重要基石和支柱。顺应县城人口流动变化趋势,相关政策举措陆续出台,为新时代县域经济创
勾拳解读(下)在上一篇文章中,作者讲解了前手平勾拳和后手平勾拳,还有勾拳的结构特点,本篇文章作者来讲解腹部勾拳与上勾拳。作者先来讲解上勾拳。上勾拳的发力大致有两种,第一种是直接向前方和上方发力击
脂溢性皮炎是什么原因引起的?脂溢性皮炎怎么治疗?您是否有过这样的困扰头发不算特别油,但头屑却怎样洗都洗不干净眼睑鼻翼两边经常出油泛红起皮如果出现这些症状,说明您很可能得了脂溢性皮炎!脂溢性皮炎是什么?脂溢性皮炎是发生在皮脂溢出部
肖战七年红毯气场变化,如今的他乘风破浪步步生辉肖战挑战七年红毯气场变化2016年随组合亮相红毯,脸上青涩懵懂,此时的他还只是个小透明,2017年依旧和组合同框,不变的还是走在最后面,但脸上圆嘟嘟,笑起来很是可爱呆萌。2018的
黑眼圈不算什么,去掉美颜看眼袋,明星也只能回归普通人娱乐圈的明星演员总是需要一些特点才能让人更快速地记住,而万万没想到的是,有些人居然能凭借两道闪亮的大眼袋而出圈,他就连实力派演技都离不开这两道明晃晃的眼袋。没错,说的就是我们的倪大
黄圣依与杨子离婚事件最新进展!男方的侄女称有些事我不能说黄圣依当初嫁进豪门费了多大的劲,大家都心知肚明,但如今离婚的传闻甚嚣尘上,让人也是丈二和尚摸不着头脑!杨子能开玩笑,黄圣依不会拿离婚说事的,黄圣依肯定不愿意,如果是杨子,那肯定是真
策划庞氏骗局圈钱超20亿美元,加密货币公司BitConnect发起人被判38个月监禁记者冯赛琪编辑在一场庞氏骗局中,加密货币公司BitConnect席卷全球超20亿美元资金,使近百个国家的超4千名散户投资者深陷其中。近日,美国联邦法院公布了一则加密货币欺诈案判决书
高血压除了要限盐,为什么还要控糖?提到高血压,很多人都知道要减少钠盐的摄入,少吃腌制食品。可大家不知道的是,高血压不仅要少吃盐,还要少吃糖!高血压为什么要控糖?很多人以为,只有糖尿病患者才需要控制糖分摄入,其他没有
每周科普关于降血压,吃芹菜有用嘛?关于降血压,吃芹菜有用嘛?有,但是效果甚微防控高血压确实需要日常饮食中要高钾低纳,钾的主要作用是增加尿液中钠的排泄量,降低血容量,降低血压。此外,钾可以软化血管,也可以起到降低血压
盐多必痴,重口味的危害并非只有高血压据科普中国报道都说盐是五味之首,如果没有盐,很多菜肴都将食之无味。虽然盐可以满足我们的口腹之欲,但过量食用会对身体造成伤害。中国居民膳食指南(2022)中建议成年人每天食盐的摄入量