2012-02-07 11 views
6

Sto usando il promemoria di riposo WorkRave e voglio spegnere lo schermo quando appare la finestra di riposo. So come spegnerlo.La finestra Autohotkey appare evento

Come creare un evento quando viene visualizzata la finestra specificata (#IfWinActive ahk_class ...)?

Inoltre, posso associare il simbolo%? {%} non funziona, anziché altri.

+0

Romale, puoi aprire lo spia di Windows quando questo promemoria di riposo WorkRave è attivo? Si apre la spia di Windows facendo clic con il tasto destro sull'icona AHK. The Window Spy sarà sempre in primo piano. Quando attivi la schermata WorkRave, dovresti vedere i dettagli (incluso ahk_class). Non so cosa si voglia fare con il segno%. –

+0

Romale, qualche fortuna fino ad ora? –

+0

1. La spia di Windows non riesce a catturare il primo avviso di workrave. Ma l'ho preso dalla lista delle finestre (ahk_class). Come posso legare un'azione, quando appare? 2. Esempio, non funziona: 5 :: {%} % :: {5} –

risposta

8

Per ricevere una notifica immediata di una finestra che appare, utilizzare un gancio di shell. Questo a volte è così veloce che l'autohotkey può reagire prima ancora di vedere la finestra da solo.

Un gancio shell è dimostrato su AutoHotkey Forum.

Un esempio con l'uso (quasi copiato pari pari dal post sul forum):

#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 
    } 
} 

Se si desidera utilizzare un simbolo letterale% in un comando, la fuga con il carattere di escape di AutoHotkey, l'apice inverso `(sullo stesso tasto di ~ su una tastiera americana):

MsgBox You are 200`% awesome! 
+0

Questo è fantastico e funziona alla grande! Dai un'occhiata a [questa risposta] (http://superuser.com/a/266240/16847). Puoi progettare il tuo script per farlo anche tu? Cioè rilevare anche tutte le finestre esistenti e vedere se precedentemente visto o no? – Vijay

0

Romale,

si può provare questo, ma dal momento che io non uso Workrave, non posso provarlo.

; 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 
Problemi correlati