0
votes

I want to simply display a tooltip when a window becomes active.

Why doesn't this work? It launches the tooltip as soon as the script is loaded.

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

Tab detection works as expected, it shows the Message Box only if the window is active.

1

1 Answers

2
votes

As per the #If... docs, #IfWinActive creates context-sensitive hotkeys and hotstrings. To be a bit more precise, this is what happens when you use #IfWin...:
Whenever you press a hotkey or type a hotstring, AHK looks up the corresponding #IfWin... definition (if available) and evaluates it (e.g. "Is notepad active?"). If it is true, the hotkey/hotstring label will be executed, otherwise the native key will be sent.
Looking at this procedure, you will recognize that executing arbitrary code below a #IfWin... statement won't work; AHK doesn't fire an event when a specified window becomes active/existent etc, it rather checks the conditions when a corresponding hotkey/hotstring is fired.
Ergo, you will have to write code that waits for notepad, shows a notification and possibly repeats this procedure:

#Persistent

SetTimer, WaitForNotepad, -1

Exit

WaitForNotepad:
    WinWaitActive, ahk_class Notepad
    TrayTip, Warning, Notepad is active!
    WinWaitNotActive
    SetTimer, WaitForNotepad, -1
return

Please note that this would also work without SetTimer in some kind of loop. But whenever you're waiting a potentially large amount of time, it is reasonable to use timers, since they virtually allow other threads to run in between.
You also noticed that I used the window class (ahk_class) instead of the window title, since it's usually more reliable.