Hallo zusammen,
ich habe vor einiger Zeit, mit eurer Hilfe, ein kleines Programm gebastelt, welches mir in einer Endlosschleife, alle paar Minuten, einen Screenshot erstellt und den alten überschreibt.
Mit einem Freeware-Programm schnappe ich mir dann den Screenshot und lade ihn auf einen FTP-Server hoch.
Nun möchte ich das gerne alles in einem Programm umsetzten.
Man soll seine FTP-Zugangsdaten per Textfeld eingeben können, den Zeitintervall auswählen und anschließend das Programm starten.
Sobald das Programm gestartet wurde, wird der erste Screenshot erstellt und lokal gespeichert.
Anschließend, soll das Programm den Screenshot nehmen und ihn auf den FTP-Server schieben.
Nach Ablauf des Zeitintervalls, beginnt alles von vorne.
Nun schreibe ich da schon ein paar Tage dran rum und es ist alles noch eine große Baustelle, daher schon einmal Sorry für den Chaos-Code
Wenn ich das Programm starte, speichert er schonmal den Screenshot und auf dem FTP-Server erscheint auch eine Datei namens screenshot.jpg.
Nun habe ich aber 2 sehr große Probleme:
1. Die screenshot.jpg auf dem Server ist 0kb groß und wenn ich sie aufrufe, ist da einfach nur alles weiß.
Also kein Screenshot sondern irgendwie wie eine leere Datei die einfach nur screenshot.jpg heißt.
2. Ich habe irgendein Problem mit der Funktion FtpVerbindung() , sobald ich diese aufrufe (das tue ich in der Funktion HuntingStart(), nachdem der Button "Programm starten" gedrückt wurde), erscheint zwar diese merkwürdige leere Datei auf dem Server aber das Programm hängt sich auf.
Man kann das GUI nicht mehr bewegen und es dauert einige Sekunden, bis ich das Fenster schließen kann.
Für meine Verhältnisse, ist das jetzt schon ein recht umfangreiches Programm, weshalb ich gerade stark auf dem Schlauch stehe.
Könnt ihr mir eventuell einen Hinweis geben, wo mein Fehler liegt?
Danke und Gruß,
ely
Spoiler anzeigen
;*****************************************
;ScreenHunter_2.au3 by saryo
;Erstellt mit ISN AutoIt Studio v. 1.11
;*****************************************
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <GuiButton.au3>
#include <UpDownConstants.au3>
#include <EditConstants.au3>
#include <ScreenCapture.au3>
#include <File.au3>
#include <FTPEx.au3>
#include <MsgBoxConstants.au3>
; Erstellt GUI
$ScreenHunter = GUICreate("Screenhunter 2.0",560,430,-1,-1,-1,-1)
GUISetState(@SW_SHOW, $ScreenHunter)
; START Gruppe FTP-Daten
GUICtrlCreateGroup("FTP Daten",20,20,250,250,-1,-1)
GUICtrlSetBkColor(-1,"0xF0F0F0")
; Textfeld: FTP-Hostname
$ftpHostname = GUICtrlCreateInput("",40,70,210,20,-1,$WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("FTP-Hostname:",40,50,210,15,-1,-1)
GUICtrlSetBkColor(-1,"-2")
; Textfeld: FTP-Login-Name
$ftpLoginName = GUICtrlCreateInput("",40,130,210,20,-1,$WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("FTP-Login-Name:",40,110,210,15,-1,-1)
GUICtrlSetBkColor(-1,"-2")
; Textfeld: FTP-Passwort
$ftpPasswort = GUICtrlCreateInput("",40,190,210,20,$ES_PASSWORD,$WS_EX_CLIENTEDGE)
GUICtrlCreateLabel("FTP-Passwort:",40,170,210,15,-1,-1)
GUICtrlSetBkColor(-1,"-2")
; Input Up/Down: FTP-Port
GUICtrlCreateLabel("Port:",40,225,30,20,$SS_CENTERIMAGE,-1)
GUICtrlSetBkColor(-1,"-2")
$ftpPort = GUICtrlCreateInput("21",80,225,50,20, -1,$WS_EX_CLIENTEDGE)
GUICtrlCreateUpdown(-1,-1)
; Button: FTP-Daten speichern
$btnFtpSpeichern = GUICtrlCreateButton("Speichern",150,225,100,20,-1,-1)
; ENDE Gruppe FTP-Daten
; START Gruppe Optionen
GUICtrlCreateGroup("Optionen",290,20,250,155,-1,-1)
GUICtrlSetBkColor(-1,"0xF0F0F0")
; CheckBox: Autostart aktivieren
GUICtrlCreateCheckbox("Autostart aktivieren",310,50,210,20,-1,-1)
; CheckBox: Minimieren auf Taskleiste
GUICtrlCreateCheckbox("nach Start auf Taskleiste minimieren",310,75,210,20,-1,-1)
; CheckBox: Mauszeiger ausblenden
GUICtrlCreateCheckbox("Mauszeiger auf Screenshots ausblenden",310,100,210,20,-1,-1)
; Button: Test-Screenshot erstellen
$btnScreenshotTest = GUICtrlCreateButton("Test-Screenshot erstellen und öffnen",310,130,210,20,-1,-1)
; ENDE Gruppe Optionen
; START Gruppe Status
GUICtrlCreateGroup("Status",290,195,250,140,-1,-1)
GUICtrlSetBkColor(-1,"0xF0F0F0")
; Label: Programmstatus
$lblProgrammStatus = GUICtrlCreateLabel("Aufnahme / Upload gestoppt",310,225,210,20,BitOr($SS_CENTER,$SS_CENTERIMAGE),-1)
GUICtrlSetBkColor(-1,"0xff6b6b")
; Label: Anzahl erstellter Screenshots
$lblScreenshotZaehler = GUICtrlCreateLabel("Erstellte Screenshots:",310,255,210,15,-1,-1)
GUICtrlSetBkColor(-1,"-2")
; Label: Zeit bis zum nächsten Screenshot
GUICtrlCreateLabel("Nächster Screenshot in xx Sekunden",310,295,210,15,-1,-1)
GUICtrlSetBkColor(-1,"-2")
; Label: Ausgewählter Intervall nach Programmstart
$lblStatusIntervall = GUICtrlCreateLabel("Aufnahme / Upload-Intervall:",310,275,210,15,-1,-1)
GUICtrlSetBkColor(-1,"-2")
; ENDE Gruppe Status
; START Gruppe Steuerung
GUICtrlCreateGroup("Steuerung",20,290,250,120,-1,-1)
GUICtrlSetBkColor(-1,"0xF0F0F0")
; Label: Text Intervall
GUICtrlCreateLabel("Intervall in Minuten:",40,315,100,20,$SS_CENTERIMAGE,-1)
GUICtrlSetBkColor(-1,"-2")
; Input Up/Down: Intervall in Minuten
$idStrgIntervallMinuten = GUICtrlCreateInput("1",150,315,50,20, -1,$WS_EX_CLIENTEDGE)
GUICtrlCreateUpdown(-1,-1)
; Button: Programm starten
$btnProgrammStarten = GUICtrlCreateButton("Programm starten",40,355,210,30,-1,-1)
GUICtrlSetFont(-1,8,700,0,"MS Sans Serif")
GUICtrlSetState(-1, $GUI_SHOW)
; Button: Programm stoppen
$btnProgrammStoppen = GUICtrlCreateButton("Programm stoppen",40,355,210,30,-1,-1)
GUICtrlSetFont(-1,8,700,0,"MS Sans Serif")
GUICtrlSetState(-1, $GUI_HIDE)
; Ende Gruppe Steuerung
; Label: Programmname
GUICtrlCreateLabel("ScreenHunter 2.0",290,355,250,30,BitOr($SS_CENTER,$SS_CENTERIMAGE),-1)
GUICtrlSetBkColor(-1,"-2")
; Variable für Screenshotaufnahme
Global $erstelleScreenshot = _ScreenCapture_Capture("")
; Variable mit Pfad zum SH-Screenshots-Ordner
Global $screenshotOrdnerPfad = @ScriptDir & "\SH-Screenshots"
; Variablen mit Pfaden zu den FTP-Daten
Global $ftpDatenOrdnerPfad = @ScriptDir & "\FTP-Daten"
Global $ftpDatenDateiPfad = $ftpDatenOrdnerPfad & "\ftp-daten.ini"
; Variable für Screenshotzähler
Global $screenshotZaehler = 0
; Funktion ftp-daten.ini mit aktuellen FTP-Daten erstellen
Func FtpIniErstellen()
_FileCreate ($ftpDatenDateiPfad)
IniWrite($ftpDatenDateiPfad, "FTP-Daten", "FTP-Hostname", GUICtrlRead($ftpHostname))
IniWrite($ftpDatenDateiPfad, "FTP-Daten", "FTP-Login-Name", GUICtrlRead($ftpLoginName))
IniWrite($ftpDatenDateiPfad, "FTP-Daten", "FTP-Passwort", GUICtrlRead($ftpPasswort))
IniWrite($ftpDatenDateiPfad, "FTP-Daten", "FTP-Port", GUICtrlRead($ftpPort))
MsgBox($MB_ICONINFORMATION, "FTP-Daten speichern", "Die FTP-Daten wurden unter " & @CRLF & @CRLF & $ftpDatenDateiPfad & @CRLF & @CRLF & " gespeichert!")
EndFunc
; Ende FtpIniErstellen
; Funktion FTP-Daten speichern
Func FtpDatenSpeichern()
If FileExists($ftpDatenOrdnerPfad) Then
If FileExists($ftpDatenDateiPfad) Then
FileDelete($ftpDatenDateiPfad)
FtpIniErstellen()
Else
FtpIniErstellen()
EndIf
Else
DirCreate($ftpDatenOrdnerPfad)
FtpIniErstellen()
EndIf
EndFunc
; Ende FtpDatenSpeichern
; Funktion FTP-Verbindung aufbauen und Screenshot hochladen
Func FtpVerbindung()
Local $serverpfad = "screenshot.jpg"
Local $ftpOeffnen = _FTP_Open('ScreenHunter 2.0 FTP-Session')
Local $ftpVerbinden = _FTP_Connect($ftpOeffnen, GUICtrlRead($ftpHostname), GUICtrlRead($ftpLoginName), GUICtrlRead($ftpPasswort))
If @error Then
MsgBox($MB_ICONERROR, "FTP-Verbindung", "Es konnte keine Verbindung zum Server aufgebaut werden!")
Else
_FTP_FilePut($ftpVerbinden, @ScriptDir & "\SH-Screenshots\screenshot.jpg", $serverpfad)
EndIf
_FTP_Close($ftpOeffnen)
EndFunc
; Ende FtpVerbindung
; Funktion HuntingTest - Erstellt Screenshot, speichert ihn ab und öffnet ihn
Func HuntingTest()
If FileExists($screenshotOrdnerPfad) Then
; Speichert das Bild
_ScreenCapture_SaveImage("SH-Screenshots\screenshot.jpg", $erstelleScreenshot)
; Öffnet das Bild
ShellExecute("SH-Screenshots\screenshot.jpg")
Else
DirCreate($screenshotOrdnerPfad)
; Speichert das Bild
_ScreenCapture_SaveImage("SH-Screenshots\screenshot.jpg", $erstelleScreenshot)
; Öffnet das Bild
ShellExecute("SH-Screenshots\screenshot.jpg")
EndIf
EndFunc
; Ende HuntingTest
; Funktion HuntingStart - Erstellt nach einem Minutenintervall einen Screenshot und speichert ihn ab
Func HuntingStart()
AdlibUnRegister('HuntingStart')
; Speichert das Bild
_ScreenCapture_SaveImage("SH-Screenshots\screenshot.jpg", $erstelleScreenshot)
FtpVerbindung()
$screenshotZaehler = $screenshotZaehler + 1
GUICtrlSetState ($btnProgrammStarten, $GUI_HIDE)
GUICtrlSetState ($btnProgrammStoppen, $GUI_SHOW)
GUICtrlSetData ($lblProgrammStatus, "Aufnahme / Upload gestartet")
GUICtrlSetBkColor($lblProgrammStatus, "0x51cf66")
GUICtrlSetData ($lblScreenshotZaehler, "Erstellte Screenshots:" & GUICtrlRead($screenshotZaehler))
GUICtrlSetData ($lblStatusIntervall, "Aufnahme / Upload-Intervall:" & GUICtrlRead($idStrgIntervallMinuten))
AdlibRegister('HuntingStart', GUICtrlRead($idStrgIntervallMinuten)*60*1000)
EndFunc
; Ende HuntingStart
; Funktion HuntingStopp - Stoppt die Aufnahme und den Upload
Func HuntingStopp()
GUICtrlSetState ($btnProgrammStarten, $GUI_SHOW)
GUICtrlSetState ($btnProgrammStoppen, $GUI_HIDE)
GUICtrlSetData ($lblProgrammStatus, "Aufnahme / Upload gestoppt")
GUICtrlSetBkColor($lblProgrammStatus, "0xff6b6b")
AdlibUnRegister('HuntingStart')
EndFunc
; Ende HuntingStopp
; Liest ftp-daten.ini aus und schreibt Werte in die FTP-Daten Textfelder
GUICtrlSetData ($ftpHostname, IniRead ($ftpDatenDateiPfad, "FTP-Daten", "FTP-Hostname", ""))
GUICtrlSetData ($ftpLoginName, IniRead ($ftpDatenDateiPfad, "FTP-Daten", "FTP-Login-Name", ""))
GUICtrlSetData ($ftpPasswort, IniRead ($ftpDatenDateiPfad, "FTP-Daten", "FTP-Passwort", ""))
GUICtrlSetData ($ftpPort, IniRead ($ftpDatenDateiPfad, "FTP-Daten", "FTP-Port", "21"))
; Ereignisschleife
Local $iMsg = 0
While 1
$iMsg = GUIGetMsg()
Switch $iMsg
; Ablauf, nachdem das Programm per Button gestartet wurde
Case $btnProgrammStarten
If GUICtrlRead($idStrgIntervallMinuten) < 1 Then
MsgBox($MB_ICONERROR, "Wert zu klein...", "Der Intervall in Minuten muss mindestens 1 Minute betragen")
Break(1)
Else
HuntingStart()
EndIf
; Ablauf, nachdem das Programm per Button gestoppt wurde
Case $btnProgrammStoppen
HuntingStopp()
; Ablauf, nachdem der Button Test-Screenshot gedrückt wurde
Case $btnScreenshotTest
HuntingTest()
; Ablauf, nachdem der Button speichern (Gruppe FTP-Daten) gedrückt wurde
Case $btnFtpSpeichern
FtpDatenSpeichern()
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd
GUIDelete($ScreenHunter)
Alles anzeigen