【第五章5.4】快捷键 -- 超级热键
找到超级热键库
//超级热键 import win.ui; /*DSG{{*/ var winform = win.form(text="超级热键演示";right=796;bottom=434;bgcolor=16777215) winform.add( edit={cls="edit";left=8;top=8;right=784;bottom=360;edge=1;multiline=1;z=1}; editLog={cls="edit";left=9;top=375;right=784;bottom=427;bgcolor=16777215;multiline=1;z=2} ) /*}}*/ import key.hotkey; var superHotkey = key.hotkey(winform) //创建超级热键,必须用于窗口程序中 //批量加载热键配置表 superHotkey.loadTable({ (function(){ //这里的代码可以直接执行 })(); /* 大写金额(可输入数学表达式)、日期、时间 */ ["Ctrl+$"] = function(hFocus){ win.dlg.chineseNumber().show(); }; }); import win.dlg.chineseNumber; superHotkey.reg( "CTRL","K", function(hwnd,...){ ..winex.say("你按了CTRL+K!") } ) superHotkey.reg( "CTRL","K","K", function(hwnd,...){ ..winex.say("你按了CTRL+K,K!") } ) //添加新的热键方案 superHotkey.reg( "~","H","I", function(hwnd,...){ ..winex.say("hello world!") } ) //添加新的热键方案 import fsys.lnk; import process; superHotkey.reg( "SHIFT","Q","Q", function(hwnd,...){ var path = fsys.lnk.search( {"qq.exe";"QQScLauncher.exe";"QQProtect.exe"} ) ; process.execute(path) } ) superHotkey.regStr( "@SHIFT", function(hwnd,...){ ..winex.say("单按 SHIFT") } ) superHotkey.regStr( "~aa", function(hwnd,...){ ..winex.say("http://www.aardio.com",hwnd) } ) //允许在下面的事件中拦截所有按键,返回 true 阻止按键消息 superHotkey.onKeyDown = function(vk){ } superHotkey.setEndKeys("SPACE") //可选指定下面的触发器函数, 当用户按下部分热键、并有一个或多个可能的候选键时触发 import win.util.tray; superHotkey.onWaiting = function(hwnd,enteredKeys,waitingKeys){ if(!enteredKeys){ winform.editLog.text = "准备就绪......"; return; } winform.editLog.text = '已按下:' + ..string.join(enteredKeys,"+") + ' 等待候选键:' + ..string.join(waitingKeys,",") ,"超级热键模式已启动" } winform.edit.text = /* 热键 Ctrl+$ 用法:按下 Ctrl 不放,再按$ 热键 Ctrl+K 用法:按下 Ctrl 不放,再按K, 然后都放开 热键 Ctrl+K,K 用法:按下Ctrl不放,再按2次K 热键 @Shift 用法:按下 Shift 再放开,中间不按其他键,通常不会阻止 Shift 切换输入法状态的默认热键。 热键 ~hi 用法:依次按键,每个键都放开 热键 Shift+Q,Q 用法:按下Shift不放,再按2下Q 热键 ~AA 用法:依次按键,每个键都放开 点这里,连续按上面各行的键。 注意这是超级热键,不是热字符串,以键为输入单位而不是字符。 例如 ~hi 只按3次键,第一个键不要按Shift + ` 超级热键是操作系统级别的热键,系统全局可用。 超级热键的更多用法请参考开源软件 ImTip (http://imtip.aardio.com) */ /**details(超级热键规则) 一、超级热键检测规则 1、如果首个按下的键不是控制键,则不需要同时按住多个键。 如果按下的键是已注册的热键前半部分,则阻止当前按键继续发送。 如果继续按键已不符合任何热键,则释放已捕获的按键并按原顺序重新发送。 2、如果首次按住的是控制键( CTRL,ALT,SHIFT,WIN 之一),则必须同时按住多个键才算已完成热键。 如果这样同时按住的多个键是一个已完成的热键,但同时又是其他热键的前半部分,则必须放开所有键才会生效。 3、如果注册单个控制键热键,并且加上 @ 前缀,则放开该键(且中间没有按其他键)才算完成热键。 4、按键保持按下不放时不会触发多次超级热键。 超键热键中任何键名都只表示该键名所在的按键,不区分上档键。 例如热键 "~hi" 指连续按 3 个键,其中 ~ 不是指同时按 Shift + ` 。 二、示例 例如注册了以下 4 个热键,则使用规则如下: 热键 "~hi" 用法:按连续按 3 个键,每个键都要放开。 热键 "SHIFT+Q,Q" 用法:按下Shift不放,再按2下Q。 热键 "Ctrl+K" 用法:按下Ctrl不放,再按K, 然后都放开。 热键 "Ctrl+K,K" 用法:按下Ctrl不放,再按2次K(因为不是其他热键的前半部分,不需要等待放开)。 三、热键回调函数 热键回调函数返回 true 表示允许系统继续发送按键, 否则取消该按键,不再继续发送。 如果热键回调函数返回一个函数对象, 则取消该按键不再发送,并在返回函数以后异步执行返回的函数对象。 这样可以避免在热键回调函数中执行耗时操作。 超级热键基于低级键盘钩子, 在热键回调中不允许做耗时操作(在热键回调中返回异步执行的函数则不受限制), 如果耗时超过一秒或超过注册表限制的更小时间,系统会直接删除键盘钩子(导致热键不可用)。 没有任何方法可以检查到删除操作,应当遵守规则避免滥用。 如果仍然出现过一段时间键盘钩子失效。 建议检查一下是否安装了什么特别的软件导致了这样的问题。 end details**/ winform.show(); win.loopMessage();
相关回复
-
暂无评论!