2012-02-07 23 views
6

Używam przypomnienia o odpoczynku WorkRave i chcę wyłączyć mój ekran po wyświetleniu okna odpoczynku. Wiem, jak to wyłączyć.Pojawia się okno Autohotkey

Jak utworzyć zdarzenie, gdy pojawi się określone okno (#IfWinActive ahk_class ...)?

Czy można również powiązać symbol%? {%} nie działa, zamiast innych.

+0

Romale, Czy możesz otworzyć szpiega okna, gdy aktywne jest przypomnienie o odpoczynku w WorkRave? Otwieranie szpiega systemu Windows następuje po kliknięciu ikony AHK prawym przyciskiem myszy. Szpieg okienny zawsze będzie na górze. Po aktywowaniu ekranu WorkRave powinieneś zobaczyć szczegóły (w tym ahk_class). Nie wiem, co chcesz zrobić ze znakiem%. –

+0

Romale, jak dotąd szczęście? –

+0

1. Windowsowy szpieg nie może zatrzymać pierwszego ostrzeżenia workrave'a na górze ostrzeżenia. Ale przechwyciłem to przez listę okien (ahk_class). Jak mogę powiązać akcję, kiedy się pojawi? 2. Przykład, nie działa: 5 :: {%} % :: {5} –

Odpowiedz

8

Aby uzyskać natychmiastowe powiadomienie o pojawiającym się oknie, użyj haka muszelkowego. Czasami jest to tak szybkie, że autohotkey może zareagować, zanim jeszcze zobaczysz okno.

Hak na muszlę został zademonstrowany na AutoHotkey Forum.

Przykładem z użytkowania (prawie dosłownej ze stanowiska 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 
    } 
} 

Jeśli chcesz korzystać z literalnego symbolu% w poleceniu, uciec z ucieczki charakter AutoHotkey, tym grawis `(na tym samym klawiszu co ~ na klawiaturze amerykańskiej):

MsgBox You are 200`% awesome! 
+0

To jest fantastyczne i działa świetnie! Spójrz także na [tę odpowiedź] (http://superuser.com/a/266240/16847). Czy możesz zaprojektować swój skrypt, aby to zrobić? To znaczy. wykryć wszystkie istniejące okna i zobaczyć, czy wcześniej widziano, czy nie? – Vijay

0

Romale,

Można spróbować, ale ponieważ nie używam Workrave, nie mogę go przetestować.

; 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 
Powiązane problemy