traytip when window becomes active?

前提是你 提交于 2019-12-12 03:09:20

问题


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:


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.



来源:https://stackoverflow.com/questions/20534811/traytip-when-window-becomes-active

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!