窗口变为活动状态时的托盘提示?

时间:2013-12-12 04:02:22

标签: autohotkey

我想在窗口变为活动状态时显示工具提示。

为什么这不起作用?它会在加载脚本后立即启动工具提示。

#IfWinActive, Untitled - Notepad
{
TrayTip, Notepad Has Focus, test
Tab::
    MsgBox Window Found
    return
}

选项卡检测按预期工作,仅当窗口处于活动状态时才显示消息框。

1 个答案:

答案 0 :(得分:2)

根据#If... docs#IfWinActive 创建了上下文相关的热键和热字串。为了更精确一点,这就是使用#IfWin...时发生的情况:
无论何时按热键或键入热字符串,AHK都会查找相应的#IfWin...定义(如果可用)并对其进行评估(例如“记事本是否处于活动状态?”)。如果为true,则执行hotkey / hotstring标签,否则将发送本机密钥 查看此过程,您将认识到在#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)而不是窗口标题,因为它通常更可靠。