【问题标题】:Having two Windows excluded in a IfWinNotActive in AutoHotKey在 AutoHotKey 的 IfWinNotActive 中排除两个 Windows
【发布时间】:2013-07-11 06:17:50
【问题描述】:

我将 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

【问题讨论】:

    标签: autohotkey


    【解决方案1】:

    #IfWinNotActive 行中 ahk_group 后面多了一个逗号

    尝试以下方法:

    GroupAdd, ESC, Untitled - Notepad
    ;  Add more windows to the group if necessary
    
    #IfWinNotActive, ahk_group ESC
        Escape::!F4
    Return
    

    【讨论】:

      【解决方案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
      

      【讨论】:

      • 因此,如果我要排除的两个窗口具有完全不同的标题,它应该看起来像这样,对吗?请参阅上面的更改。
      • 这似乎过于复杂了。他应该能够添加SetTitleMatchMode 2 并简单地将更多窗口添加到组中。
      • 感谢你们两位对此的帮助。似乎我的脚本其余部分中的某些内容导致它失败。当我只使用这段代码时,脚本正确执行。但是,当它在脚本的其余部分时,窗口仍然关闭。无论如何,最后一个问题......是否有理由当两个窗口之一处于活动状态时其余代码不运行?我以为这就是“回归”的目的。
      【解决方案3】:

      这对我有用:

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

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

      2:那么就可以使用非运算符!

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

      Credit

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-10
        • 1970-01-01
        • 2018-09-04
        • 2019-06-19
        • 1970-01-01
        • 1970-01-01
        • 2021-11-11
        • 2022-01-12
        相关资源
        最近更新 更多