Событие появления окна Autohotkey

Я использую WorkRave rest reminder и хочу отключить экран, когда появится окно rest. Я знаю, как его выключить.

Как создать событие при заданном окне (#IfWinActive ahk_class ...) появляется?

кроме того, можно ли привязать символ%? {%} не работает, вместо других.

2 ответов


чтобы иметь мгновенное уведомление о появлении окна, используйте крючок оболочки. Это иногда так быстро, что autohotkey может реагировать, прежде чем вы даже видите окно самостоятельно.

крюк раковины продемонстрирован на Форум Для AutoHotkey.

пример с вашим использованием (почти скопировано дословно с поста форума):

#Persistent
SetBatchLines, -1
Process, Priority,, High

Gui +LastFound
hWnd := WinExist()

DllCall( "RegisterShellHookWindow", UInt,hWnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage" )
Return

ShellMessage( wParam,lParam )
{
    If ( wParam = 1 ) ;  HSHELL_WINDOWCREATED := 1
    {
        WinGetTitle, Title, ahk_id %lParam%
        If  ( Title = "WorkRest" )
            WinClose, ahk_id %lParam% ; close it immideately
    }
}

Если вы хотите использовать буквальный символ % в команде, экранируйте его с помощью escape-символа AutoHotkey, backtick ` (on тот же ключ, что и ~ на клавиатуре США), например:

MsgBox You are 200`% awesome!

ромалэ,

вы можете попробовать это, но так как я не использую WorkRave, я не могу проверить его.

; This next line needs to be added at the top of the AHK file, so it will be started as soon as AHK starts.
; Every 120000 ms, it will launch the "WorkRave:" script to check if a window with WorkRave exists.
SetTimer, WorkRave,120000 ; Run WorkRaveTester every 2 minutes = 120000


; Somewhere else in the AHK file.....
WorkRave: ; This is the label for the WorkRave script
SetTitleMatchMode, 2 ; 2 = Matches the string WorkRave anywhere in the window title of IfWinExist
IfWinExist, WorkRave ; When WorkRave window exists
{
  TrayTip, WorkRave, Started ,1 ; Or whatever you want to do here....
}
Return