aardio 调用 AHK 实现超极热键
By
圣地
at 2021-12-12 • 0人收藏 • 1357人看过
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 来触发同一个函数。