如何仅匹配无标题且指定ahk_class的临时菜单栏窗口?
问题描述
我正在处理一款包含众多面板的应用(CLIPStudioPaint.exe),除主窗口外,所有面板(包括临时菜单栏面板)均共享相同的ahk_class名称。经调研发现,临时菜单栏面板无窗口标题,而其他面板均有窗口标题。
临时菜单栏面板的窗口信息:
;ahk_class 742DEA58-ED6B-4402-BC11-20DFC6D08040-6571DDC4-B3AA-45e4-9D35-57C0C1E90AD5 ;ahk_exe CLIPStudioPaint.exe
普通面板(比如Layers)的窗口信息:
; Layer ; ahk_class 742DEA58-ED6B-4402-BC11-20DFC6D08040-6571DDC4-B3AA-45e4-9D35-57C0C1E90AD5 ; ahk_exe CLIPStudioPaint.exe
我原本用以下代码尝试仅定位临时菜单栏窗口:
Space:: WinWaitActive, ahk_class 742DEA58-ED6B-4402-BC11-20DFC6D08040-6571DDC4-B3AA-45e4-9D35-57C0C1E90AD5 MsgBox, Found
但这段代码在普通面板获得焦点时也会触发消息框,请问如何实现仅触发临时菜单栏窗口的效果?
解决方案
你可以利用临时菜单栏无窗口标题的特性,结合AutoHotkey的窗口匹配规则精准定位,提供两种可行写法:
写法一:直接匹配空标题窗口
Space:: WinWaitActive, ahk_class 742DEA58-ED6B-4402-BC11-20DFC6D08040-6571DDC4-B3AA-45e4-9D35-57C0C1E90AD5 ahk_exe CLIPStudioPaint.exe,, MsgBox, Found return
- 代码中
WinWaitActive的第三个参数后加两个逗号,代表匹配空标题的窗口;同时指定ahk_exe可避免同class的其他进程干扰。
写法二:通过获取标题验证(逻辑更直观)
Space:: Loop { WinWaitActive, ahk_class 742DEA58-ED6B-4402-BC11-20DFC6D08040-6571DDC4-B3AA-45e4-9D35-57C0C1E90AD5 ahk_exe CLIPStudioPaint.exe WinGetTitle, ActiveTitle, A if (ActiveTitle = "") { MsgBox, Found break } } return
- 先等待目标class的窗口激活,再通过
WinGetTitle获取当前窗口标题,仅当标题为空时触发消息框,逻辑清晰且便于扩展其他判断条件。
内容的提问来源于Stack Exchange,提问作者GaryAtlan82
相关产品推荐
相关产品推荐

