Autohotkey traytip窗口何时变为活动状态?

Autohotkey traytip窗口何时变为活动状态?,autohotkey,Autohotkey,我只想在窗口激活时显示工具提示 为什么这样不行?它会在加载脚本后立即启动工具提示 #IfWinActive, Untitled - Notepad { TrayTip, Notepad Has Focus, test Tab:: MsgBox Window Found return } 选项卡检测按预期工作,仅当窗口处于活动状态时才会显示消息框。根据,#IfWinActive创建上下文敏感热键和热字符串。更准确地说,这就是使用#IfWin…: 无论何时按下热键或键入热字符串,A

我只想在窗口激活时显示工具提示

为什么这样不行?它会在加载脚本后立即启动工具提示

#IfWinActive, Untitled - Notepad
{
TrayTip, Notepad Has Focus, test
Tab::
    MsgBox Window Found
    return
}
选项卡检测按预期工作,仅当窗口处于活动状态时才会显示消息框。

根据,
#IfWinActive
创建上下文敏感热键和热字符串。更准确地说,这就是使用
#IfWin…

无论何时按下热键或键入热字符串,AHK都会查找相应的
#IfWin…
定义(如果可用)并对其进行计算(例如,“记事本是否处于活动状态?”)。如果为true,将执行热键/热字符串标签,否则将发送本机密钥。
查看此过程,您将认识到在
#IfWin…
语句下面执行任意代码是行不通的;当指定的窗口变为活动/存在等时,AHK不会触发事件,而是在触发相应的热键/热字符串时检查条件。
因此,您必须编写等待记事本、显示通知并可能重复此过程的代码:

#Persistent

SetTimer, WaitForNotepad, -1

Exit

WaitForNotepad:
    WinWaitActive, ahk_class Notepad
    TrayTip, Warning, Notepad is active!
    WinWaitNotActive
    SetTimer, WaitForNotepad, -1
return
请注意,在某种循环中,如果没有
SetTimer
,这也可以工作。但是,当您等待的时间可能很长时,使用计时器是合理的,因为它们实际上允许其他线程在其间运行。
您还注意到我使用了窗口类(
ahk_class
)而不是窗口标题,因为它通常更可靠