in Zeiten von vermehrter Homeofficearbeit und eventuell damit verbundener Selbstausbeutung und Mißachtung der Gesundheit, dachte ich mir, wäre ein Bildschirmpausen-Timer genau das richtige
Daher hier ein kleines Skript, welches einen an die nötigen Pausen erinnern möchte...
Viel Spaß damit und haltet durch!
Code: Select all
; erstellt: 02.05.2020
; von : aifritz
; Name : BiPa-Timer
; ab ahk Version [v1.1.31+]
;
; Beschreibung:
; =====================================
; Der Bildschirmpausen-Timer zeigt nach Ablauf der eingestellten Arbeitszeit einen Hinweis im Tray-Tip an und es ertönt ein kurzer Klang
; falls ununterbrochen am Computer gearbeitet wurde.
; Über das Einstellungs-Menü lassen sich:
; - die Arbeitzeit bis zur nächsten Pause
; - die Pausenlänge
; - und eine Erinnerungszeit einstellen, falls die Pause vergessen wurde
; Hält man den Mauszeiger über das Systemtray-Icon wird die Zeit bis zur nächsten Pause, bzw. wie lang die Pause überfällig ist, angezeigt.
; Will man eine Pause überspringen wählt man im Systemmenü Neustart.
;======================================
;Update: 22.11.2020:
;auf Anregung von daywalker
;- Focus auf Edit1 in den Einstellungen setzen
;- Links in den Einstellungen erweitert
#InstallMouseHook
#SingleInstance force
Ver := 1.03
OnMessage(0x404, "AHK_NOTIFYICON") ;um Anzeigehinweis TrayTip ggf. auszublenden
;menu, tray, icon, MyPause.ico, 1 ;Statt des Autohotkey Standard Icon lässt sich hier ein eigenes Icon einstellen
Menu, Tray, NoStandard ;kein Standard Menu
Menu, Tray, Add , BiPa-Timer &beenden, Beenden
Menu, Tray, Add , &Einstellungen, Einstellungen
Menu, Tray, Add , &Neustart/Pause überspringen, Neustart
IniFile := RegExReplace(A_ScriptFullPath,"(\.exe$)|(\.ahk$)",".ini") ;Ini Datei im aktuellen Verzeichnis
Vars = WorkTime,Pausendauer,Erinnerung
Loop Parse, Vars, `, ;Lese die Werte aus ini Datei ein, falls vorhanden
{
IniRead %A_LoopField%, %IniFile%, Zeiten, %A_LoopField%
%A_LoopField% *= 60000 ;1 Minute = 60*1000 ms
}
JetztPause := false ;Boolean der auf true steht, wenn Pause
If (WorkTime = 0) ;falls noch keine Ini-Datei existiert, erst mal die Grundeinstellung anzeigen
{
WorkTime = 60
Pausendauer = 10
Erinnerung = 3
Loop Parse, Vars, `,
{
IniWrite % %A_LoopField%, %IniFile%, Zeiten, %A_LoopField%
%A_LoopField% *= 60000
}
Gosub Einstellungen
}
;msgbox,4096,, Pausendauer|%Pausendauer%|`nWorkTime|%WorkTime%|`nErinnerung|%Erinnerung%|
SetTimer TimeCheck, 1000
WorkStart := A_Tickcount
ErinnerungStart := 0 ; merkt sich die aktuelle letzte Erinnerungszeit, um nach Ablauf der Erinnerung erneut zu warnen
ErinnerungStartFirst := 0 ;merkt sich die erste Erinnerungszeit
TimeCheck:
;Tooltip % A_Tickcount " `n" A_TimeIdlePhysical "`nPausendauer:" Pausendauer "`nWorkStart: " WorkStart "`nWorktime: " Worktime "`nErinnerung:" Erinnerung "`nErinnerungstart: " ErinnerungStart
If !JetztPause ;wenn noch keine Pause fällig
{
If (Round((Worktime - (A_Tickcount - Workstart))/60000, 1) < 1) ;wenn weniger als eine Minute, dann in Sek. anzeigen
Menu, Tray, Tip , % "Nächste Bildschirmpause in " Round((Worktime - (A_Tickcount - Workstart))/60000*60, 0) " Sek."
else
Menu, Tray, Tip , % "Nächste Bildschirmpause in " Round((Worktime - (A_Tickcount - Workstart))/60000, 0) " Min."
}
else ;wenn Pause fällig
{
If (Round((A_Tickcount - ErinnerungStartFirst)/60000, 0) <= 1) ;wenn weniger als eine Minute keine Pause
Menu, Tray, Tip , % "Eine kleine Pause fällig!"
else
Menu, Tray, Tip , % "Kleine Pause fällig seit " Round((A_Tickcount - ErinnerungStartFirst)/60000, 0) " Min." ;"->" (A_Tickcount - ErinnerungStart)/60000
}
If (A_TimeIdlePhysical > Pausendauer) ;wenn ausgeruht
{
WorkStart := A_Tickcount ;Wenn nicht gearbeitet wurde, also Pause genommen, dann: reset Workstart
If (JetztPause)
{
ErinnerungStart := 0
ErinnerungStartFirst := 0
JetztPause := false ;Pause erledigt
TrayTip, , % "Prima " Round(Pausendauer/60000, 0) " Min. Pause gemacht!" , 30, 1
}
Return
}
If (A_Tickcount > WorkStart + Worktime) ;Pause ist fällig
{
If (!JetztPause)
{ ;Wenn noch kein Pausenvorschlag erfolgt ist, dies nun tun
JetztPause := true
TrayTip, , Wie wär's mit einer kleinen Pause?, 30, 1
ErinnerungStart := A_Tickcount ;Aktuelle Erinnerung start time
ErinnerungStartFirst := A_Tickcount ;Erste Erinnerung start time
Return
}
If (A_Tickcount > ErinnerungStart + Erinnerung)
{ ;Bereits an Pause erinnert, aber immer noch am Arbeiten
TrayTip, Erinnerung..., % "Kleine Pause fällig seit " Round((A_Tickcount - ErinnerungStartFirst)/60000, 0) " Min." , 30, 2
ErinnerungStart := A_Tickcount ; Reset für nächsten Hinweis
Return
}
}
return
;die GUI für die Einstellungen
Einstellungen:
Gui, Destroy
Gui, +AlwaysOnTop
Gui +Lastfound
GuiHWND := WinExist() ;*the unique ID number (HWND/handle) of a window
Gui Add, Text,x3 ,Der Bildschirm-Pausentimer kann dabei helfen, regelmäßige Bildschirmpausen einzuhalten.
Gui Add, Text,x3 ,Nach Ablauf der Arbeitszeit erfolgt ein dezenter Hinweis am unteren rechten Bildschirmrand`nsowie ein kurzer Klang.
Gui, Font, underline
;Gui, Add, Text, x3 y+5 cBlue gMyLink, Hier ein Link zum Thema Telearbeit: Arbeit im Büro gesund gestalten
Gui, Add, Link,x3 y+10 gMyLink, <a id="1">Hier ein Link zum Thema Arbeit im Büro gesund gestalten</a>
Gui, Add, Link,x3 y+10 gMyLink, <a id="2">- Signale des Körpers ernst nehmen</a>
Gui, Add, Link,x3 y+10 gMyLink, <a id="3">- Übungen zur Entspannung der Augen</a>
Gui, Font, norm
Gui Add, Text, x3 y+20,- Den größten Effekt für die Gesundheit und die Leistungsfähigkeit haben Kurzpausen von`n ca. 10 Minuten pro Stunde.`n- Länger als 2 Stunden sollten Sie keinesfalls ununterbrochen vor dem Bildschirm sitzen.
Gui Add, Text, x3 y+20, Alle Angaben in Minuten
field("WorkTime","Arbeitszeit bis zur nächsten Pause")
field("Pausendauer","Bildschirm-Pausenzeit")
field("Erinnerung","Erinnerung nach X Min., falls Pause vergessen")
Gui Add, Button, x10 y+20 w134 Default, &Neustart
Gui Add, Button, x+10 w134 gWeiter, &Fenster schließen
Gui Add, Button, x+10 w134 gBeenden, &App beenden
GuiControl, Focus, Edit1
SendMessage, 0x00B1, 0, -1, Edit1 ; EM_SETSEL
Gui Show,,Bildschirm-Pausentimer by aifritz V%Ver%
WinWaitClose, ahk_id %GuiHWND% ; Waiting for Gui to Close *siehe unter 1.
Return
field(var,text) { ; Edit + UpDown + Text
Global
Gui Font, s8, MS Sans Serif
Gui Add, Edit, w50 x30 y+10
Gui Add, UpDown, Range1-500 v%var%, % %var%//60000
Gui Font, s11, MS Sans Serif
Gui Add, Text, x+20, %text%
}
MyLink:
Gui Destroy
switch Errorlevel
{
case 1:
Run, "https://www.ergo-online.de/"
case 2:
Run, "https://www.ergo-online.de/arbeitsorganisation/arbeitsformen/callcenter/artikel/telearbeit/signale-des-koerpers-ernst-nehmen"
case 3:
Run, "https://www.ergo-online.de/ergonomie-und-gesundheit/gesundheit-und-vorsorge/artikel/vorsorge-augen/uebungen-zur-entspannung-der-augen/"
}
return
ButtonNeustart: ;Wenn über Gui Neustart, dann zusätzlich Werte in Ini-Datei speichern
Gui Submit
Loop Parse, Vars, `,
{
IniWrite % %A_LoopField%, %IniFile%, Zeiten, %A_LoopField%
%A_LoopField% *= 60000
}
Neustart:
Menu Tray, NoIcon ;Traytip ausblenden
Menu Tray, Icon ;Traytip ausblenden
WorkStart := A_Tickcount ;Falls Neustart
JetztPause := false
SplashImage,, B1 FM14,, Pausentimer zurückgesetzt
Sleep 1000
SplashImage, Off
Return
Weiter:
GuiClose:
GuiEscape: ;Close GUI
Gui Destroy
Return
Beenden:
ExitApp
return
AHK_NOTIFYICON(wParam, lParam) ; http://www.autohotkey.com/board/topic/62125-how-do-i-change-the-actions-of-clicking-the-tray-icon/?p=391707
{
if (lParam = 0x205) ; WM_RBUTTONUP
{
Menu Tray, NoIcon ;Traytip ausblenden
Menu Tray, Icon ;Traytip ausblenden
;Menu, Tray, Show ;Menü anzeigen
Return
}
}