ich hatte die Tage das Problem, das von einer Bekannten der Kurze (13 J.) sich Netzseiten angesehen hatte, die nix für ihn sind. Sie hatte mich darauf angesprochen, ob es nicht eine Möglichkeit zur Überwachung gibt.
Ich fand so ein Freeware-Tool, das sich AutoScreenShot nannte. Kurzerhand installiert und stellte fest: nix geht. Schrott, das Teil. Also habe ich mich daran gemacht, selbst so ein Teil zu zaubern.
Die Soft erstellt in frei angebbaren Zeiten (in Sekunden) Screenshots vom Desktop. Die Anzahl der Bilder, die in einem frei wählbaren Verzeichnis abgelegt werden, können auch bestimmt werden. Ebenso kann man es mit dem Rechnerstart gleich mit starten lassen.
Bevor ich es vergesse: Keine Garantie oder dergleichen, der übliche Quatsch also. Getestet unter XP. Hier der Quellcode von dem Teil:
Code: Alles auswählen
#offsetX = 0
#offsetY = 0
#percentX = 1
#percentY = #percentX
Parameter$ = LCase(RemoveString(ProgramParameter(0),"/"))
Parameter$ = "config"
UsePNGImageEncoder()
LoadFont(0, "Arial", 10)
LoadFont(1, "Arial", 10, #PB_Font_Bold)
LoadFont(2, "Arial", 8)
;--- Regestry-Werte
HKey.l = #HKEY_LOCAL_MACHINE
SKey_Autostart.s = "\Software\Microsoft\Windows\CurrentVersion\Run"
SKey.s = "\Software\ScreenShot"
Value.s = "ScreenShot"
Value1.s = "Time"
Value2.s = "Number"
Value3.s = "Directory"
Value4.s = "Autostart"
Procedure.s spec_folder(clsi_const.l)
path.s = Space(2048)
SHGetSpecialFolderLocation_(0,clsi_const,@pidl.l)
SHGetPathFromIDList_(pidl,@path)
CoTaskMemFree_(pidl)
ProcedureReturn path+"\"
EndProcedure
result1.s = JHRegGetString(HKey.l, SKey.s, Value1.s)
If result1.s = ""
JHRegCreateKey(HKey.l, SKey.s)
JHRegSetString(HKey.l, SKey.s, Value1.s, "200")
JHRegSetString(HKey.l, SKey.s, Value2.s, "500")
JHRegSetString(HKey.l, SKey.s, Value3.s, spec_folder($27))
JHRegSetString(HKey.l, SKey.s, Value4.s, "1")
EndIf
Time.l = Val(JHRegGetString(HKey.l, SKey.s, Value1.s))
Global Number.l = Val(JHRegGetString(HKey.l, SKey.s, Value2.s))
Global Directory.s = JHRegGetString(HKey.l, SKey.s, Value3.s)
Autostart.s = JHRegGetString(HKey.l, SKey.s, Value4.s)
Global schleife.l = 0
Procedure BildVerzeichnisLoeschen(Directory.s, Number.l)
AnzahlBilder.l = 0
If ExamineDirectory(0, Directory.s, "*.png")
While NextDirectoryEntry(0)
AnzahlBilder.l = AnzahlBilder.l + 1
Wend
FinishDirectory(0)
EndIf
Structure Bilder
Name$
Nummer.l
EndStructure
NewList Bildarray.Bilder()
X = 1
If ExamineDirectory(0, Directory.s, "*.png")
While NextDirectoryEntry(0)
AddElement(Bildarray())
Bildarray()\Nummer = X
Bildarray()\Name$ = DirectoryEntryName(0)
X = X + 1
Wend
FinishDirectory(0)
EndIf
SortStructuredList(Bildarray(), 0, OffsetOf(Bilder\Name$), #PB_Sort_String)
ForEach Bildarray()
If Bildarray()\Nummer <= AnzahlBilder.l - Number.l
Ergebnis = DeleteFile(Directory.s + Bildarray()\Name$)
If Ergebnis = 0
MessageRequester("Hinweis", "Fehler in der Datenbank!" + Chr(13) + "Bitte das System neu starten!", #MB_ICONWARNING)
End
EndIf
EndIf
Next
EndProcedure
Procedure SaveScreenEx(offsetX.f, offsetY.f, widthPercent.f, heightPercent.f)
hDcDesktop = GetDC_(GetDesktopWindow_())
w = GetSystemMetrics_(#SM_CXSCREEN)
h = GetSystemMetrics_(#SM_CYSCREEN)
CreateImage(0, w, h)
hDC = StartDrawing(ImageOutput(0))
BitBlt_(hDC, 0, 0, w, h, hDcDesktop, 0, 0, #SRCCOPY)
StopDrawing()
ReleaseDC_(GetDesktopWindow_(), hDcDesktop)
GrabImage(0, 1, offsetX * w, offsetY * h, widthPercent * w, heightPercent * h)
FreeImage(0)
Datum.s = FormatDate("%yyyy%mm%dd-%hh%ii%ss", Date())
Ergebnis = SaveImage(1, Directory.s + Datum.s + ".png" ,#PB_ImagePlugin_PNG )
If Ergebnis <> 1
MessageRequester("Wichtiger Hinweis von der Anwendung!", "Fehler in der Datenbank!" + Chr(13) + "Bitte den Administrator benachrichtigen!", #MB_ICONERROR)
End
Else
schleife.l = schleife.l + 1
If schleife.l = 10
BildVerzeichnisLoeschen(Directory.s, Number.l)
schleife.l = 0
EndIf
EndIf
EndProcedure
Procedure.s GetAppDir()
FullPath.s = Space(#MAX_PATH)
GetModuleFileName_(GetModuleHandle_(0), @FullPath, #MAX_PATH)
FullPath = GetPathPart(FullPath)
If Right(FullPath, 1) <> "\" : FullPath + "\" : EndIf
ProcedureReturn FullPath
EndProcedure
Procedure.s GetAppName()
AppName.s = Space(#MAX_PATH)
GetModuleFileName_(GetModuleHandle_(0), @AppName, #MAX_PATH)
ProcedureReturn GetFilePart(AppName)
EndProcedure
Procedure Beenden()
Result = MessageRequester(" Beenden","Programm wirklich beenden?",#PB_MessageRequester_YesNo|#MB_ICONQUESTION)
If Result = #PB_MessageRequester_Yes
End
EndIf
EndProcedure
If Parameter$ = "config"
jahr$ = FormatDate("%yyyy", Date())
If jahr$ > "2009"
jahranzeige$ = "2009 - " + jahr$
Else
jahranzeige$ = jahr$
EndIf
OpenWindow(0, 0, 0, 330, 240, "ScreenShot Optionen", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
SetGadgetFont(#PB_Default, FontID(0))
TextGadget(0, 10, 10, 310, 20, "Screenshot V1.0", #PB_Text_Center)
SetGadgetFont(0, FontID(1))
TextGadget(12, 10, 30, 310, 20, Chr(169) + " " + jahranzeige$ + " by Micro (http://www.purebasic.fr/german/)", #PB_Text_Center)
SetGadgetFont(12, FontID(2))
TextGadget(1, 10, 50, 170, 20, "Zeit zwischen zwei Bildern:") ; Zeit
StringGadget(2, 190, 50, 55, 20, "" , #PB_String_Numeric | #PB_Text_Right) ; Zeit
TextGadget(3, 260, 50, 70, 20, "Sekunden") ; Zeit
SetGadgetText(2, Str(Time.l)) ; Zeit
TextGadget(4, 10, 80, 170, 20, "Anzahl der Bilder:") ; Bilder
StringGadget(5, 190, 80, 55, 20, "" , #PB_String_Numeric | #PB_Text_Right) ; Bilder
TextGadget(6, 260, 80, 70, 20, "maximal") ; Bilder
SetGadgetText(5, Str(Number.l)) ; Bilder
TextGadget(7, 10, 110, 80, 20, "Verzeichnis:") ; Verzeichnisanzeige
StringGadget(8, 85, 110, 200, 20, "") ; Verzeichnisanzeige
SetGadgetText(8, Directory.s) ; Verzeichnisanzeige
ButtonGadget(9, 295, 110, 25, 20, "...") ; Verzeichnisanzeige
CheckBoxGadget(10, 10, 140, 310, 20, "Programm automatisch starten") ; Autostart
SetGadgetState(10,Val(Autostart.s)) ; Autostart
TextGadget(11, 10, 170, 310, 20, "Update wird beim nächsten Systemstart wirksam", #PB_Text_Center)
SetGadgetFont(11, FontID(1))
SetGadgetColor(11, #PB_Gadget_FrontColor, RGB(00, 00, 255))
ButtonGadget ( 20, 10, 200, 90, 25, "Abbrechen")
ButtonGadget ( 21, 230, 200, 90, 25, "OK")
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case 9
InitialPath$ = GetGadgetText(8) ; anfänglichen Pfad für die Anzeige festlegen (kann auch leer sein)
Path$ = PathRequester("Bitte wählen Sie einen Pfad aus, in dem die Bilder gespeichert werden sollen.", InitialPath$)
If Path$
SetGadgetText(8, Path$)
Else
MessageRequester("Information", "Der Requester wurde abgebrochen.", #MB_ICONWARNING)
EndIf
Case 20
Beenden()
Case 21 ; Speichern
If GetGadgetText(2) = "" Or GetGadgetText(5) = "" Or GetGadgetText(8) = ""
ResultSpeichern = MessageRequester("Achtung", "Es wurde ein Feld nicht ausgefüllt. Dies ist aber für den Betrieb der Software notwenig!" + Chr(13) + Chr(13) + "Klicken Sie auf " + Chr(34) + "Ja" + Chr(34) + " , um die Autostart-Funktion zu deaktivieren und das Programm zu beenden." + Chr(13) + "Klicken Sie auf " + Chr(34) + "Nein" + Chr(34) + ", um zu den Einstellungen zurückzukehren.", #PB_MessageRequester_YesNo | #MB_ICONWARNING)
If ResultSpeichern = #PB_MessageRequester_Yes
Debug ""
JHRegDelValue(HKey.l, SKey_Autostart.s, GetAppDir() + GetAppName())
JHRegSetString(HKey.l, SKey.s, Value1.s, GetGadgetText(2))
JHRegSetString(HKey.l, SKey.s, Value2.s, GetGadgetText(5))
JHRegSetString(HKey.l, SKey.s, Value3.s, Chr(34) + GetGadgetText(8) + Chr(34))
JHRegSetString(HKey.l, SKey.s, Value4.s, Str(GetGadgetState(10)))
End
EndIf
Else
JHRegSetString(HKey.l, SKey.s, Value1.s, GetGadgetText(2))
JHRegSetString(HKey.l, SKey.s, Value2.s, GetGadgetText(5))
JHRegSetString(HKey.l, SKey.s, Value3.s, GetGadgetText(8))
JHRegSetString(HKey.l, SKey.s, Value4.s, Str(GetGadgetState(10)))
If GetGadgetState(10) = 1
JHRegSetString(HKey.l, SKey_Autostart.s, Value.s, GetAppDir() + GetAppName())
Else
JHRegDelValue(HKey.l, SKey_Autostart.s, Value.s)
EndIf
MessageRequester("Hinweis", "Einstellungen erfolgreich gespeichert!", #MB_ICONINFORMATION)
Beenden()
EndIf
EndSelect
Case #PB_Event_CloseWindow
Beenden()
EndSelect
Until Quit = 1
; Ende Config
Else
Repeat
SaveScreenEx(#offsetX, #offsetY, #percentX, #percentY)
Delay(Time.l * 1000)
ForEver
EndIf
End
; IDE Options = PureBasic v4.02 (Windows - x86)
; CursorPosition = 1
; Folding = --
; EnableXP
; UseIcon =
; Executable = ScreenShot.exe
Ich habe folgende Libs eingebunden: UserLib JHRegistry_400 von / by Jens Haipeter
Wird das Tool ohne Parameter aufgerufen, macht es seinen Dienst


Ich hoffe, das der eine oder andere vielleicht damit was anfangen kann!
Gruß Frank