Die Adlib-Lösung funktioniert natürlich auch im OnEvent-Modus. Hier aber eine andere Lösung:
C
;*****************************************
;ScreenHunter.au3 by DS
;Erstellt mit ISN AutoIt Studio v. 1.10
;*****************************************
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiButton.au3>
#include <ButtonConstants.au3>
#include <ScreenCapture.au3>
#include <MsgBoxConstants.au3>
; Wechsle in den OnEvent Modus
Opt("GUIOnEventMode", 1)
Global $bScrShot, $hTime
; Erstelle GUI
$ScreenHunter = GUICreate("ScreenHunter", 320, 500, -1, -1, -1, -1)
GUISetBkColor(0xFFFFFF, $ScreenHunter)
GUISetState(@SW_SHOW, $ScreenHunter)
; Event zum schließen der GUI über X
GUISetOnEvent($GUI_EVENT_CLOSE, "ProgrammEnde")
; Logo
Local $idLogo = GUICtrlCreatePic("Images\logo.jpg", 10, 10, 297, 81)
; Button mit Event für den Test-Screenshot
$BtnScreenshotTest = GUICtrlCreateButton("Screenshot Test", 10, 101, 300, 31, -1, -1)
GUICtrlSetOnEvent($BtnScreenshotTest, "HuntingTest")
; Button mit Event für die Scrrenshot-Schleife
$BtnProgrammStarten = GUICtrlCreateButton("Programm starten", 10, 141, 300, 31, -1, -1)
GUICtrlSetOnEvent($BtnProgrammStarten, "Hunting")
; Statusgrafiken grün=Programm läuft rot=Programm steht
Local $idRun = GUICtrlCreatePic("Images\run.jpg", 10, 181, 300, 40)
GUICtrlSetState($idRun, $GUI_HIDE)
Local $idStop = GUICtrlCreatePic("Images\stop.jpg", 10, 181, 300, 40)
; Text unten in der GUI
GUICtrlCreateLabel("ScreenHunter v1.0", 10, 423, 300, 15, $SS_CENTER, -1)
GUICtrlSetBkColor(-1, "-2")
; Endlosschleife um die GUI sichtbar zu machen
While 1
Sleep(100)
If $bScrShot And TimerDiff($hTime) >= (5 * 60 * 1000) Then ScrShot()
;es sollen ScreenShots gemacht werden UND die Zeit ist erreicht
WEnd
Func ScrShot()
Local $hBmp
ConsoleWrite('SC: ' & @MIN & ':' & @SEC & @CRLF)
; Erstellt Screenshot - kompletter Bildschirm
$hBmp = _ScreenCapture_Capture("")
; Speichert das Bild
_ScreenCapture_SaveImage(@MyDocumentsDir & "\screenshot.jpg", $hBmp)
$hTime = TimerInit() ;Timer initialisieren
EndFunc ;==>ScrShot
; Funktion HuntingTest - Erstellt Screenshot, speichert ihn ab und öffnet ihn
Func HuntingTest()
MsgBox($MB_SYSTEMMODAL, "Test-Screenshot...", "Das Programm speichert und öffnet einmalig einen Test-Screenshot")
Local $hBmp
; Erstellt Screenshot - kompletter Bildschirm
$hBmp = _ScreenCapture_Capture("")
; Speichert das Bild
_ScreenCapture_SaveImage(@MyDocumentsDir & "\screenshot.jpg", $hBmp)
; Öffnet das Bild
ShellExecute(@MyDocumentsDir & "\screenshot.jpg")
EndFunc ;==>HuntingTest
; Funktion Hunting - Erstellt alle 5 Minuten einen Screenshot und speichert ihn ab
Func Hunting()
MsgBox($MB_SYSTEMMODAL, "Programm wird gestartet...", "Das Programm wird gestartet und speichert alle 5 Minuten einen Screenshot ab")
$bScrShot = True
GUICtrlSetState($BtnProgrammStarten, $GUI_DISABLE)
GUICtrlSetState($BtnScreenshotTest, $GUI_DISABLE)
GUICtrlSetState($idStop, $GUI_HIDE)
GUICtrlSetState($idRun, $GUI_SHOW)
ScrShot()
EndFunc ;==>Hunting
; Funktion ProgrammEnde - Beendet das Programm
Func ProgrammEnde()
If @GUI_WinHandle = $ScreenHunter Then
MsgBox($MB_SYSTEMMODAL, "Programm wird beendet...", "Das Programm wird beendet und es werden keine Screenshots mehr abgespeichert")
Exit
EndIf
EndFunc ;==>ProgrammEnde
Alles anzeigen