使用 ahk 实现 Manico 功能
Manico (opens new window) 是 Mac 上一款优秀的效率工具,可以实现快速启动和切换 App
具体介绍可以看:简洁、高效、易用,Mac App 快速启动及切换工具:Manico 2.0 - 少数派 (opens new window)
注:但该软件是收费的,而且在多窗口切换不方便,具体可以看这里
奈何 Windows 上并没有可以替代的产品,故想通过 ahk 模拟 Manico 的功能
autohotkey 的简单使用可以参考这个文章:Windows 自动化效率神器:AutoHotkey 使用教程和脚本推荐 - 知乎 (opens new window)
# 手动实现
初步想法是这样的:
那我们就实现一下吧,以 chrome 为例:
首先新建脚本 Manico.ahk
# 定义快捷键
我们和 Manico 保持一致,也使用 alt 作为触发键
从这里 (opens new window)可以查得 alt 的修饰符为 !
所以我们可以这样定义快捷键:
; Manico.ahk
!j:: ; 触发的快捷键:alt + j。! 代表 alt
; do something
2
3
# 窗口操作
这里 (opens new window)是窗口操作相关的文档
这里 (opens new window)是系统变量相关的文档
继续补齐我们的代码:
; Manico.ahk
!j:: ; 触发的快捷键:alt + j。! 代表 alt
if not WinExist("ahk_exe chrome.exe") ; 判断是否有打开的 chrome
{
run "%A_ProgramsCommon%\Google Chrome" ; 运行 chrome,run 后面是 chrome 的位置
WinWait, ahk_exe chrome.exe ; 等待 chrome 打开
WinMaximize ; 最大化 chrome,默认打开的不是最大化的窗口
}
else if WinActive("ahk_exe chrome.exe") ; 判断 chrome 是否处于活动状态
{
WinMinimize ; 最小化
}
else
{
WinActivate ; 激活 chrome
WinGet, OutputVar, MinMax ; 判断 chrome 是否是最大化
if OutputVar != 1 ; 如果不是最大化
WinMaximize ; 最大化
}
return
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
这样我们就实现了通过快捷键 alt + j
打开/最大化/最小化 chrome
不过当有多个 chrome 窗口时,我们只能操作最后激活的那个窗口,无法操作其他的窗口
这时候我们只能使用 Windows 自带的快捷键来实现了
# 使用 Windows 自带的快捷键
在 Windows 中,我们可以使用 win + 数字 N
来打开/激活/最小化第 N 个软件,而且有多个窗口时,可以在窗口之间切换,但无法最小化
比如我将 chrome 固定到任务栏第一个位置 (固定以后位置就不变了,快捷键也就固定了),如果未打开 chrome,使用 win + 1
即可打开,如果当前激活的软件不是 chrome,使用 win + 1
即可激活 chrome,如果当前已激活 chrome,使用 win + 1
即可最小化 chrome,有多个 chrome 窗口时,win + 1
可以在窗口之间切换;我们都不需要 ahk 这个第三方软件了
如果不喜欢使用 win + 数字
,也可以改成别的按键
比如还是使用 alt + j
来操作 chrome,上面的代码都不需要了,只需要下面一行即可搞定
; Manico.ahk
!j::
Send #1 ; 将 alt + j 映射为 win + 1
return
2
3
4
使用 alt + j
切换多个窗口时无法在窗口之间切换,还是有点问题,改成 win + j
就没有这个问题了
但由于只有 10 个数字,故只支持操作 10 个软件,不过也够用了吧;如果还是不够用,只能使用上面的代码自己实现了
如果需要开机自启,将 Manico.ahk 放到开机启动目录下:C:\Users\${username}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
这样我们就基本实现了 Manico,当然没有人家那么完美,不过也可以正常使用
# 使用第三方软件
# 曹操快切 (opens new window)
用法极其简单:按住大小写键(Caps lock,可以自定义触发键),就能弹出切换窗口,之后可通过数字键、鼠标、方向键进行切换。
还可以在 setting.ini 文件里为程序配置固定快捷键,这样就能实现闭眼睛操作了
同一软件不同窗口间快速切换:capslock+·(esc 下面那个键)快捷键切换(当然,通过自定义序列和自定义触发键,这个快捷键可以是任何)
缺点是当有多个窗口时,使用固定快捷键无法切换,必须先按下触发键,再通过搭配的键切换。比如设置 alt
为触发键,alt + j
还是切换 chrome,当有多个 chrome 窗口时,alt + j
不能切换到任何 chrome 窗口,只能先按下 alt
,再按 j
切换,而且可以多次按 j
循环切换 chrome 窗口
# RunAny (opens new window)
RunAny 区别一般的启动工具,适合家里、公司多台电脑的用户,不管软件装在 C 盘还是 D 盘 Anywhere,根据名字直接找到并运行
多台电脑你只需配置一套软件列表 (RunAny.ini),就能到处运行,配合 坚果云 \ OneDrive \ Dropbox 等网盘同步更是如虎添翼,达到一劳永逸!
所有 exe 程序设置独立全局热键后有三种功能:
- 启动、最小化时激活
- 已激活时最小化
- 同个 exe 程序多窗口切换功能于一体
RunAny 可以使用固定快捷键切换窗口,弥补了曹操的不足,但无法操作文件资源管理器,而且切换 ,wt 这个问题看这里:给 wt 设置快捷键后,每次使用 wt 会报错,而且如果起服务的话,会停止服务 · Issue #91 · hui-Zz/RunAny (opens new window)WindowsTerminal
有问题,会把服务停掉
# MyKeymap (opens new window):强烈推荐
这款软件基本上还原出 Manico
99% 的功能了,除了最小化这个功能,不过这不算是一个很重要的功能
默认激活方式:小指按下 Capslock -> 食指按下 F -> 松开 Capslock
然后按下 w
是 chrome
,s
是 VS Code
,z
是 Windows 文件管理器 (打开 D:\ 盘)
...
我们还是改为 alt
激活吧
以 edge
为例:
打开 自定义热键
,点击 添加一行
,热键
那里输入 !j
然后在右侧选择 全局生效-启动程序或激活窗口
,在 要激活的窗口 (窗口标识符)
输入 ahk_exe msedge.exe
,这个值可通过下方的 查看窗口标识符
查询
在 当窗口不存在时要启动的:程序路径 / 文件夹 / URL
选择 shortcuts\Microsoft Edge.lnk
至此我们就配置好了:当 edge
未打开时,使用 alt + j
启动,未激活时,使用 alt + j
激活,当打开多个 edge
窗口时,使用 alt + j
在窗口之间切换
# 参考资料
- 01
- 搭配 Jenkins 实现自动化打包微前端多个项目09-15
- 02
- 自动化打包微前端多个项目09-15
- 03
- el-upload 直传阿里 oss 并且显示自带进度条和视频回显封面图06-05