dog
(荒废千年)
1
wox,
见小众软件:
是一款类似utools,火柴,listray……的软件。
wox的优点在于可以自定义针对某一关键词的快捷键。
比如设置快捷键 ALT+B ⇒ “bd ”,
只用按下alt+b就可以进行百度搜索了,而不用像其他几个同类软件一样,还得手动输入“bd ”
背景介绍完毕。
第一步,我设置了快捷键:ALT+空格 ⇒ “ahk ”
第二步,启用ahk,代码如下:
Enter::
{
IfWinNotActive, ahk_exe wox.exe
{
send,{Enter}
}
IfWinActive, ahk_exe wox.exe
{
send , +{Home}
sleep, 20
send, ^c
send, {Enter}
Switch Clipboard
{
case "ahk 小众软件":{
send , {esc}
run www.appinn.com
return
}
case "ahk 自定词句":{
send , {esc}
/*
自定命令
*/
return
}
Default:
send , {esc}
}
return
}
}
return
上述代码实现了输入“小众软件”,通过ahk打开www.appinn.com。
通过添加不同的自定词句,以及不同的命令,可以实现更多的可能。
【如图,按下atl+空格,启动已经预先输入了“ahk ”的命令框,此时输入自己的命令,按下回车,启动对应ahk指令】
3 Likes
Kuma
(小熊)
2
老哥,可以研究一下这个方案吗? CLaunch之美 - 知乎 (zhihu.com)
我觉得可以用来平替Quicker
1 Like
在大佬的基础上重写了一下:
- 把自定义文本、自定义命令存在数组里了,方便修改;
- 兼容单行文本、多行文本、自定义命令;
- 改用if判断,先判断触发词,再进循环逐一比对;
- 执行完毕后恢复原剪贴板内容。
使用方法:
- 在wox输入框中输入
ahk
+自定义命令
(注意ahk后有空格),触发数组中对应的文本或命令
- 例如,输入
ahk doc
则执行OpenAHKDoc
函数跳转到文档网站
问题:
- 是否有可能结合wox添加自动补全自定义命令的插件?
- 大量条目下循环比对的速率问题?
代码如下:
; wox自定义指令 - by @dog, @Azona77 - https://meta.appinn.net/t/topic/25130
SetTitleMatchMode, 3
#IfWinActive Wox ahk_exe wox.exe
$Enter::
{
; 记录原剪贴板内容
ClipboardOld := ClipboardAll
; 复制当前行
send , {End}
send , +{Home}
send, ^c
send, {End}
; ==============================
; 定义数组,存放匹配规则和对应的文本
; 分行定义数组语法详见 - https://www.autohotkey.com/boards/viewtopic.php?t=66878
array := {"ten": "10"
,"example1": Func("OpenAHKDoc")
,"example2": "单行文本案例"
,"example3": "多行文本案例 - 使用``n分隔`n这是第二行"
,"example4": "
(
多行文本案例 - 直接粘贴至括号内,注意缩进
- 这是第二行
)"
,"doc": Func("OpenAHKDoc")
,"CustomFunc": Func("ActionExample")
,"New command": "aa"}
; 定义要触发的函数
OpenAHKDoc() {
run, https://wyagd001.github.io/zh-cn/docs/Hotkeys.htm
}
ActionExample() {
tooltip, You selected Example!, 1000
; 这里可以添加其他需要执行的代码
sleep 1000
tooltip
}
; ==============================
If (InStr(Clipboard, "ahk ") = 1)
{
; 如果是ahk开头,则将剪贴板内容的第五个字符开始(即除去前四个字符)赋值给新变量
TriggerWord := SubStr(Clipboard, 5)
For key, value in array
{
; 修剪剪贴板内容的前后空白字符
if (TriggerWord = key) {
; 判断value的类型
if (IsFunc(value)) {
; 如果value是函数,则调用它
send, {esc}
value.Call()
; 恢复剪贴板内容
Clipboard := ClipboardOld
return
} else {
; 否则,将value作为文本发送
send, {esc}
Clipboard := value
send, ^v
return
}
}
}
Clipboard := ClipboardOld
Send, {Enter}
}
Clipboard := ClipboardOld
Send, {Enter}
}
return
1 Like
比wox插件要轻量吧?wox插件得再回来调用ahk(前提是要用ahk相关的功能,不然直接写对应wox插件就行了)
而且直接在ahk中实现也方便配置和迁移