在AutoHotKey中的IfWinNotActive中排除了两个Windows

时间:2013-07-12 16:18:39

标签: autohotkey

我将Alt + F4映射到ESC,这样我就可以通过按下escape来关闭窗口。但是我需要两个窗口来实际使用ESC。因此,当这两个窗口中的任何一个处于活动状态时,我希望能够在不关闭窗口的情况下按ESC。实现这一目标的最简单方法是什么?当我只是排除一个活动窗口时我的脚本工作,但是当两个窗口中的任何一个都处于活动状态时我需要工作。

这是我尝试过的代码:

GroupAdd, ESC, Untitled - Notepad
GroupAdd, ESC, 

#IfWinNotActive, ahk_group, ESC
Escape::!F4
Return

这是仅使用一个窗口正常运行的代码:

;#IfWinNotActive, Untitled - Notepad
;Escape::!F4
;Return

更新:这应该有用吗?

SetTitleMatchMode, 2
SetTitleMatchMode, 2
#IfWinNotActive, Untitled - Notepad
#IfWinNotActive, Document 1 - Microsoft Word
    Escape::!F4
Return

3 个答案:

答案 0 :(得分:4)

#IfWinNotActive

之后,ahk_group行中有一个额外的逗号

尝试以下方法:

GroupAdd, ESC, Untitled - Notepad
;  Add more windows to the group if necessary

#IfWinNotActive, ahk_group ESC
    Escape::!F4
Return

答案 1 :(得分:1)

尝试使用SetTitleMatchMode

http://www.autohotkey.com/docs/commands/SetTitleMatchMode.htm

  

2:窗口的标题可以在其中的任何位置包含WinTitle   匹配。

然后你可以这样做(默认情况下是区分大小写的):

settitlematchmode, 2
#IfWinNotActive, Untitled - 

试试这个:

首先,您不能在同一个脚本中重复两次相同的密钥。

  

此命令会影响所有窗口命令的行为,例如:   IfWinExist和WinActivate。

其次,你堆叠这样的行:

#IfWinNotActive, Untitled - Notepad
#IfWinNotActive, Document 1 - Microsoft Word

你说,如果win1没有激活,那么如果win2没有激活。

试试这个,而不是:

settitlematchmode, 2
app1 := winexist("other app")
app2 := winexist("Untitled - Notepad")

if(app1 || app2)    ;the || means OR.  you can use && for AND.
    Escape::!F4   ;you can only map a particular key one time per script

或者这个,更接近你的方法:

settitlematchmode, 2
GroupAdd, ESC, Untitled - Notepad
GroupAdd, ESC, My other window
IfWinNotActive, ahk_group ESC
    Escape::!F4
Return

答案 2 :(得分:0)

这对我有用:

1:将其写在脚本顶部(在第一个热键之前):

SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetTitleMatchMode, Regex 

2:然后可以使用not运算符!

if !(WinActive("ahk_class Notepad") or WinActive("ahk_class Calculator")) {
...
}

Credit