2

我将 Alt+F4 映射到 ESC,这样我就可以通过按 Esc 来关闭窗口。但是,我需要在两个窗口中实际使用 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
4

3 回答 3

6

#IfWinNotActive后面的行中有一个额外的逗号ahk_group

尝试以下操作:

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

#IfWinNotActive, ahk_group ESC
    Escape::!F4
Return
于 2013-07-12T16:51:24.280 回答
2

尝试使用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
于 2013-07-12T16:51:33.807 回答
1

这对我有用:

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")) {
...
}

信用

于 2019-10-09T05:29:36.933 回答