用 AutoHotKey 显示隐藏软件窗口
2024-03-17 17:33:41

我有这样一个需求,使用频率很高的软件在未使用的时候暂时隐藏它,用的时候按下快捷键就能弹出来。
虽然有些软件自带热键显示隐藏的功能,但是大部分软件都是没有的。这时候就可以用 AutoHotKey 来解决。

通过查找窗口标题、窗口类名基本上能定位到唯一的窗口。但是现在很多客户端软件都喜欢用 Electron 之类的框架开发。
这类框架都是基于 Web 技术,有个特点是软件会包含多个进程。
如果仅仅只通过标题和类名去查找窗口就会匹配到多个窗口,因为渲染进程也含有隐藏窗口,且标题和类名大概率都相同。

于是我多加了一个检查条件:窗口样式。隐藏窗口基本都是无边框没有菜单栏的。
这是一个针对 Chatbox 的例子:

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
; Win + C
#c::
WinGet, hwnd, List, ahk_class Chrome_WidgetWin_1
found := false
Loop, %hwnd%
{
hwnd := hwnd%A_Index%
WinGetTitle, title, ahk_id %hwnd%
if (title = "Chatbox") ; 匹配窗口标题
{
WinGet, style, Style, ahk_id %hwnd%
if (style & 0x6CF00000) ; 匹配除了 WS_VISIBLE 之外的样式
{
found := true
if (style & 0x10000000) ; 检查 WS_VISIBLE 样式判断是否处于可见状态
{
WinHide, ahk_id %hwnd%
}
else
{
WinShow, ahk_id %hwnd%
WinActivate, ahk_id %hwnd%
}
}
}
}
if (!found)
{
Run, "C:\Users\ADMIN\AppData\Local\Programs\xyz.chatboxapp.app\Chatbox.exe"
}
return

如果要用于其他软件,改下标题、类名、样式就能用了。
窗口样式可以参考官方手册:https://ahkcn.github.io/docs/misc/Styles.htm