如何在AutoHotKey中使用wmctrl返回的"name"字段?
关于wmctrl输出的"Name"字段与AutoHotKey窗口匹配问题
问题背景
在WSL2中执行wmctrl -l,输出如下:
wmctrl.exe -l ID: Name: Title: ------------------------------------------------- 13028 WindowsTerminal C:\WINDOWS\system32\wmctrl.exe
在Windows系统直接执行wmctrl -l,输出为:
ID: Name: Title: ------------------------------------------------- 13028 WindowsTerminal Windows PowerShell
尝试用AutoHotKey通过这个"Name"字段匹配窗口,以下代码无法生效:
^!+t:: if WinExist("WindowsTerminal") WinActivate else Run wt return
目前只能通过匹配窗口标题(比如"Power")实现操作,但需要直接匹配上述的"Name"字段,同时疑惑这个"Name"既不是可执行文件名也不是窗口标题,它到底是什么?
解答
1. 这个"Name"字段的本质
wmctrl输出的这个"Name"实际上是窗口类名(Window Class Name)。Windows系统中每个窗口都会被程序开发者分配一个类名,用于标识同一类窗口,它是独立于窗口标题、可执行文件名的窗口属性。
2. AutoHotKey中匹配窗口类名的方法
AutoHotKey的WinExist和WinActivate默认匹配窗口标题,要匹配窗口类名,需要在匹配字符串前加上ahk_class前缀,修改后的代码如下:
^!+t:: if WinExist("ahk_class WindowsTerminal") WinActivate else Run wt return
修改后就能精准通过wmctrl显示的"Name"字段(即窗口类名)匹配Windows Terminal窗口了。
内容的提问来源于stack exchange,提问作者Jason Hunter
相关产品推荐
相关产品推荐

