【第五章5.4】快捷键 -- 超级热键

贴主:admin| 发贴:2024-07-28 17:33| 浏量:22

找到超级热键库

Code aardioLine:155复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
    • //超级热键
    • 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();


    相关回复


      暂无评论!

    发表回复