BiPa-Timer zum Einhalten von Bildschirmpausen
Posted: 02 May 2020, 04:01
Hallo Zusammen,
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!
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
}
}