有没有办法从 GroupAdd 中排除多个标题?

有没有办法从 GroupAdd 中排除多个标题?

当我使用特定程序 (Dolphin) 时,我的 Esc 热键会将其完全关闭,但我希望特定 (子) 窗口具有不同的功能。到目前为止,我一直在使用 #IfWinActive 与 GroupAdd 结合使用。

以下是有关#IfWinActive 命令的文档:https://autohotkey.com/docs/commands/_IfWinActive.htm
群组地址:https://autohotkey.com/docs/commands/GroupAdd.htm

如果 GroupAdd 命令允许从 ExcludeTitle 参数中排除多个标题,那么我现在已经解决了这个问题。ExcludeTitle 不接受 ahk_group。

我希望有比每个热键都有一个子句更优雅的东西IfWinNotActive ahk_group exceptions。我希望热键在程序中除了少数特定(子)窗口之外的任何地方都能工作,所以我宁愿使用一行GroupAdd, AllOfTheProgramExceptExceptions, ahk_exe Dolphin.exe, exceptions或几行代码GroupAdd, AllOfTheProgramExceptExceptions, ahk_exe Dolphin.exe, exception123,而不是为程序的所有窗口(我不知道这些窗口,而且必须随着时间的推移不断添加)创建一个 ahk_group,除了例外情况。

答案1

我了解到 WinTitle 参数群组添加接受 ahk_group,感谢fab12我之前读过好几遍,但直到一两天后我才理解他们的代码/解决方案。

GroupAdd, AllOfTheProgramExceptExceptions1, ahk_exe Dolphin.exe, , , exception1 ; Make a group of all of the program's windows excluding window 1. ahk_class & ahk_exe not accepted by ExcludeTitle parameter.
GroupAdd, AllOfTheProgramExceptExceptions, ahk_group AllOfTheProgramExceptExceptions1, , , exception2 ; Make a group consisting of the previous group excluding window 2.

答案2

WinGet, id, list, ahk_exe Dolphin.exe
Loop, %id%
{
this_ID := id%A_Index%
; WinGet, exStyle, exStyle, ahk_id %this_ID%
; If !(exStyle & 0x100)
        ; Continue
    GroupAdd, Dolphin_group_WithoutExceptions, ahk_id %this_ID%
WinGetTitle, title, ahk_id %this_ID%
IfInString, title, ExcludeTitle1
    GroupAdd, Dolphin_group_exception1, ahk_id %this_ID%
else
IfInString, title, ExcludeTitle2
    GroupAdd, Dolphin_group_exception2, ahk_id %this_ID%
else
    GroupAdd, Dolphin_group_ExceptExceptions, ahk_id %this_ID%
}
return


F1:: GroupActivate, Dolphin_group_exception1
F2:: GroupActivate, Dolphin_group_exception2
F3:: GroupActivate, Dolphin_group_ExceptExceptions
F4:: GroupActivate, Dolphin_group_WithoutExceptions

相关内容