aardio 调用 AHK 实现超极热键
By
圣地
at 2021-12-12 • 0人收藏 • 1596人看过
import win.ui;
/*DSG{{*/
var winform = win.form(text="嵌入autohotkey演示";right=599;bottom=399)
winform.add()
/*}}*/
import ahk;
var code =`
#Persistent ;保持ahk线程不退出
#NoTrayIcon ;不显示托盘图标
#include <aardio> ;启动ahk代码中必须加入这句才能与aardio交互
;LWin:: msgbox, 我屏蔽国 Win 键
#E:: msgbox, 我屏蔽了WIN+E
`
//直接定义允许AHK调用的aardio函数(函数名以on开头)
var script = ""
for(i=1;9;1){
ahk["onFunc"++i] = function(){
winform.msgbox(i)
}
script += "#" ++ i + "::" ++ "aardio.onFunc" ++ i ++ "()"+ '\n'
}
code += script
//运行ahk代码
ahk.run( code );
winform.show();
win.loopMessage();以前接触过AHK,习惯了它的按键方式,再使用(key.hotkey)超极热键感觉不习惯
比如定义按键后调用也必须按定义时顺序 来按下,
幸好 aardio 支持调用众多种其它编程语言,其中就有 AutoHotkey
上面代码演示了在ahk定义热键来调用 aardio中定义的函数。是不是很好玩~~~

1 个回复 | 最后更新于 2021-12-13
登录后方可回帖
多谢指导,主要是不熟悉,如果键盘钩子方式能保证稳定运行,超极热键这也是一个不错的定义热键方法比 RegisterHotKey 强一些(但 RegisterHotKey也最稳定) 。
刚又学习了下超极热键,简单总结了下使用规则。
ahk快捷键和aardio超极热键的规则:
1、以 Win+E 为例
AHK 可以在按下 Win+E 时触发自己定义功能,同时屏蔽系统 Win+E 功能
aardio 也可以在按下 Win+E 时触发,同时屏蔽系统Win+D功能,既Win+其它键 AHK 和 aardio 都可以屏蔽系统定义的相同热键。
但 AHK 还可以在 WIN 按下保持不动时一直来回按 E 多次触发,aardio 则不可以只能先按WIN再按 E 触发, 两个修饰键 + 一个字母键也是一样。
2、以 Win 为例
AHK 可以直接用 LWIN:: msgbox,123 来定义单独一个WIN的热键,且会屏蔽系统WIN键打开开始菜单的功能
aardio 也可以用 LWIN 或 WIN 定义单独一个 WIN 的热键调用,但其不会屏蔽系统 WIN 键功能。
3、以同时定义 WIN 热键和 WIN+E 热键为例
AHK: LWin:: msgbox, 我屏蔽国 Win 键
#E:: msgbox, 我屏蔽了WIN+E
这会屏蔽系统 Win 打开开始菜单功能,但这样只会 WIN 定义热键有效,WIN+E 或其它和 WIN组合热键都会无效。
aardio:
同样则 WIN 热键和 Win+E 热键都会有效,系统本身 Win打开开始菜单功能也会有效。
这里可以用 AHK 定义一个 LWIN::return , 然后用 aardio 定义 WIN 和 Win+E 等,则既可以屏蔽系统 Win功能也或以使这两键都可用。
还有一个方法用组策略可以屏蔽系统 Win的功能。
4、以 Ctrl+Win+E 为例
AHK 可以按下Ctrl+Win+E 来触发,也可以按下 Win+Ctrl+E 来触发,也就是除了字母键外其它的修饰键可以互换顺序
aardio 定义了 Ctrl+Win+E 则只能按定义顺序来触发,不过也再定义一个 Win+Ctrl+E 来触发同一个函数。