我想在窗口变为活动状态时显示工具提示。
为什么这不起作用?它会在加载脚本后立即启动工具提示。
#IfWinActive, Untitled - Notepad
{
TrayTip, Notepad Has Focus, test
Tab::
MsgBox Window Found
return
}
选项卡检测按预期工作,仅当窗口处于活动状态时才显示消息框。
答案 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
)而不是窗口标题,因为它通常更可靠。