Angucken und testen

  • Hiho,
    Genau 8 Tage, nachdem ich mit Autoit angefangen habe ich hier ein kleines Programm.
    Ursprünglich war es dazu da, umzu gucken ob ich Internet habe, geht auch soweit. Doch jetzt, wo man die Pingadresse ändern kann, kann man jetzt auch gucken, ob ein Server online ist. Da ich ja noch in der lernphase bin, bitte ich euch nicht den Code zu verändern und so fertig hier schreiben bitte gibt mir nur Tipps :D

    Das ist jetzt Verison 0.6 mit nur einem Tray Menü.
    Das geht noch nicht(kommt aber):
    -Speicherort ändern (der ping.csv)
    -Autostart (hab ich extra deaktviert für euch)
    -Falls ihr noch keine down hattet gibst die ping.csv auch nicht^^ (wird geändert)
    -Multiping
    -richtiges Gui

    Spoiler anzeigen
    [autoit]

    #include <file.au3>
    #Include <Constants.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("TrayOnEventMode",1)
    Opt("TrayMenuMode",1) ;Pause Exit ausblenden
    ;FileCreateShortcut( @ScriptDir & "\Internetchecker.exe", "C:\Dokumente und Einstellungen\All Users\Startmenü\Programme\Autostart\Internetcheck.exe") ;autostart
    TraySetClick(16) ;Rechte maustaste

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $displayitem = TrayCreateItem("Log zeigen")
    TrayItemSetOnEvent(-1,"pinger")
    TrayCreateItem("")

    [/autoit] [autoit][/autoit] [autoit]

    $settingsitem = TrayCreateMenu("Einstellungen")
    TrayCreateItem("")
    $autostart = TrayCreateItem("Autostart", $settingsitem)
    TrayItemSetOnEvent(-1,"autostart")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $wodatei = TrayCreateItem("Speicherort", $settingsitem)
    TrayItemSetOnEvent(-1,"wodatei")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $timeout = TrayCreateItem("Timeout festlegen", $settingsitem)
    TrayItemSetOnEvent(-1,"timeout")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $pingad = TrayCreateItem("Pingaddresse festlegen", $settingsitem)
    TrayItemSetOnEvent(-1,"pingad")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    $intervall = TrayCreateItem("Intervall festlegen", $settingsitem)
    TrayItemSetOnEvent(-1,"intervall")

    [/autoit] [autoit][/autoit] [autoit]

    $infoitem = TrayCreateItem("Information")
    TrayItemSetOnEvent(-1,"ShowInfo")

    [/autoit] [autoit][/autoit] [autoit]

    $exititem = TrayCreateItem("Schließen")
    TrayItemSetOnEvent(-1,"ExitScript")

    [/autoit] [autoit][/autoit] [autoit]

    TraySetState()
    ;Variabeln suchen
    $intervalliniread = IniRead(@ScriptDir & "\options.ini", "options", "intervall", "60000")
    $pinginiread = IniRead(@ScriptDir & "\options.ini", "options", "pingad", "www.google.de")
    $timeoutread = IniRead(@ScriptDir & "\options.ini", "options", "timeout", "250")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1 ; Idle Function Loop
    $var = Ping($pinginiread, $timeoutread)
    If $var Then
    sleep(10)
    Else
    _FileWriteLog(@ScriptDir & "\ping.csv","; Offline ; Error: " & @error)
    EndIf
    Sleep($intervalliniread)
    Wend
    Exit

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; Functions
    Func timeout() ;timeout zeit einstellen
    $timeout = InputBox("Timeout", "Gib die Timeoutzeit ein in Millisekunden ein. Sie gibt an, wann der Verbindungsversuch abgebrochen wird. Standart: 250ms")
    IniWrite(@ScriptDir & "\options.ini", "options", "timeout", $timeout)
    Endfunc

    [/autoit] [autoit][/autoit] [autoit]

    Func pingad() ;pingadresse einstellen
    $pingini = InputBox("Pingadresse", "Gib die Adresse an, die angepingt werden soll. Standart: http://www.google.de")
    IniWrite(@ScriptDir & "\options.ini", "options", "pingad", $pingini)
    Endfunc

    [/autoit] [autoit][/autoit] [autoit]

    Func wodatei() ;ping.csv speicherort
    Endfunc

    [/autoit] [autoit][/autoit] [autoit]

    Func autostart() ;Autostart Ja o. nein
    Endfunc

    [/autoit] [autoit][/autoit] [autoit]

    Func ShowInfo() ;info
    Dim $avArray[9]
    $avArray[0] = "Internetchecker"
    $avArray[1] = "Ver. [0.6]"
    $avArray[2] = "Errors:"
    $avArray[3] = "1 = Host is offline"
    $avArray[4] = "2 = Host is unreachable"
    $avArray[5] = "3 = Bad destination"
    $avArray[6] = "4 = Other errors"
    $avArray[7] = "ICQ: 191221651"
    $avArray[8] = "© 2008/2009 bei Hendrik O."
    $array = StringSplit("a,b,c,d,e,f,g,h,i",",")
    $iRetCode = _ArrayToClip( $avArray, 0 )
    MsgBox( 0, "Information", ClipGet() ) ; Der Wert des ClipBoards wird abgerufen!
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func intervall()
    $intervallini = InputBox("Intervall", "Gib bitte die Intervallzeit in Sekunden ein. Standart: 60sek")
    $intervallini2 = $Intervallini * 1000
    IniWrite(@ScriptDir & "\options.ini", "options", "intervall", $intervallini2)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func pinger() ;shell ping.csv
    ShellExecute (@ScriptDir & "\ping.csv" )
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func ExitScript() ;exit
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]


    Wenn ihr das kurz testen könntet wäre ich euch dankbar.

    Einmal editiert, zuletzt von Henne (23. Dezember 2008 um 16:06)

  • auchwenn das internet an ist?

    * der erstellt ne Excel Datei ;)

    Einmal editiert, zuletzt von Henne (23. Dezember 2008 um 16:40)

  • evt. Firewall? ^^ bei mir gehts ohne Probleme jedenfalls das pingen

    Hab grad nen Bug entdeckt :-D:
    -wenn man bein ändern der Ini nichts eingibt ändert sich das trotzdem :D

    • Offizieller Beitrag

    @r1fLeX: evtl. blockt die Firewall das Programm?

    @Henne:

    1. In der Funktion "pingad" kann der User eine neue Adresse eingeben, die Du dann auch in der Ini abspeicherst, aber sie wird nicht in der While...WEnd-Schleife benutzt, da die neue Adresse nicht in der Variablen "$pinginiread" steht.
    Abhilfe: der Variablen "$pinginiread" in der Funktion den Wert von "$pingini" zuweisen.

    1a. Das Gleiche mit $intervallini und $intervalliniread.

    2. Die If...Then-Anweisung in der While...WEnd-Schleife kann man kürzer schreiben:

    [autoit]


    While 1 ; Idle Function Loop
    $var = Ping($pinginiread, $timeoutread)
    If Not $var Then
    _FileWriteLog(@ScriptDir & "\ping.csv", "; Offline ; Error: " & @error)
    EndIf
    Sleep($intervalliniread)
    WEnd

    [/autoit]


    oder gleich so:

    [autoit]


    While 1 ; Idle Function Loop
    If Not Ping($pinginiread, $timeoutread) Then _FileWriteLog(@ScriptDir & "\ping.csv", "; Offline ; Error: " & @error)
    Sleep($intervalliniread)
    WEnd

    [/autoit]

    3. In der Funktion "ShowInfo" erstellst Du ein Array, übergibst es ans Clipboard und liest dann den Inhalt vom Clipboard wieder ein, um es in einer MsgBox anzuzeigen?! Warum nicht einfach einen String und den dann anzeigen?

    3a. Was soll diese Zeile in der Funktion:

    [autoit]

    $array = StringSplit("a,b,c,d,e,f,g,h,i", ",")

    [/autoit]

    4. In der Funktion "pinger" vor dem Shellexecute überprüfen, ob es die Datei überhaupt gibt. Stichwort: FileExists()

    5. Bei der Ausgabe in die Logdatei könntest Du die Errorwerte ausgeschrieben (und in deutsch) eintragen lassen.

    6. Und: "Standard" statt "Standart", bitte! Das sind zwei verschiedene Wörter!

    Ende der Liste... :)

  • Oscar , das denke ich nicht. Hatte die Firewall zu testzwecken auch mal ausgeschaltet aber tut sich nachwievor nichts.

  • danke! und keine ahnung warum das bei dir nicht geht :D evt. Router? haste mal so ne ->Start->Ausführen->CMD-> ping https://autoit.de/www.google.de prbierT?

    Oscar meinst du etwa so?

    Spoiler anzeigen
    [autoit]

    Func pingad() ;pingadresse einstellen
    $pingini = InputBox("Pingadresse", "Gib die Adresse an, die angepingt werden soll. Standart: http://www.google.de")
    IniWrite(@ScriptDir & "\options.ini", "options", "pingad", $pingini)
    $pinginiread = $pingini
    Endfunc

    [/autoit]

    Aber er liest doch hier das ab:

    [autoit]

    $pinginiread = IniRead(@ScriptDir & "\options.ini", "options", "pingad", "www.google.de")

    [/autoit]

    zu 3: Weil ich nicht weiß, wie man sachen Formatiert. Mit Absatz etc.
    zu 3a: War verwirrt ^^ weil so stand das im Tut thx ^^ wusste nicht wofür das galt

    Und zu func pinger, hab ich so gelöst:

    Spoiler anzeigen
    [autoit]

    If Not FileExists (@ScriptDir & "\ping.csv" ) Then
    _FileCreate (@ScriptDir & "\ping.csv" )
    Endif
    ShellExecute (@ScriptDir & "\ping.csv" )

    [/autoit]

    5 Mal editiert, zuletzt von Henne (23. Dezember 2008 um 20:13)

  • Henne , einen Router habe ich keinen.
    Die Cmd Variante habe ich ebensfalls probierts , diese klappt wunderbar.

    • Offizieller Beitrag

    Funktion "pingad" ist mit der Änderung ok!

    Das einlesen mittels IniRead geschieht vor der While...WEnd-Schleife. Wird also nur einmal beim Programmstart gelesen. Wenn sich der Wert in der Ini dann im Verlauf des Programms ändert, bekommt das Programm das erst beim nächsten Programmstart mit. Es sei denn man ändert die benutzte Variable ebenfalls (wie jetzt geschehen).

    String-Formatierungen:

    Spoiler anzeigen
    [autoit]


    Func ShowInfo() ;info
    Local $String = ""
    $String &= "Internetchecker" & @CRLF
    $String &= "Ver. [0.6]" & @CRLF & @CRLF
    $String &= "Errors:" & @CRLF
    $String &= "1 = Host is offline" & @CRLF
    $String &= "2 = Host is unreachable" & @CRLF
    $String &= "3 = Bad destination" & @CRLF
    $String &= "4 = Other errors" & @CRLF & @CRLF
    $String &= "ICQ: 191221651" & @CRLF
    $String &= "© 2008/2009 bei Hendrik O." & @CRLF
    MsgBox(0, "Information", $String)
    EndFunc ;==>ShowInfo

    [/autoit]

    Die Funktion zum anzeigen der CSV-Datei könnte man auch so schreiben:

    [autoit]


    Func pinger() ;shell ping.csv
    If FileExists(@ScriptDir & "\ping.csv") Then ShellExecute(@ScriptDir & "\ping.csv")
    EndFunc ;==>pinger

    [/autoit]
  • ich kann hier leider nichts konstruktives beitragen im moment
    aber ich hab eine frage:
    wie machst du das mit dem autostart??
    bei mir funktioniert das immer nicht weder mit Registry-Eintrag noch mit direkt in Autostart-Ordner kopieren
    -.-

    Padmak