我将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
答案 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")) {
...
}