Ping

  • Hallo,

    ich hab gerade ein kleines Problem mit einem Programm undzwar soll dieses eine txt einlesen ( in der txt befindet sich XX Ips ), dass Programm pingt die Ips an und wenn alle down sind, soll mein eigener PC runterfahren. Wenn aber noch ein paar online sind dann soll er weiter pingen solang bis alle IPs in der Liste off sind ... Ich hab vorgehabt alles via Guil Oberfläsche zu machen aber nun wär es doch geschickter ohne Oberfläsche...

    Bis jetzt hab ich es nur mit Oberfläsche ( was aber auch nicht so ganz klappt )

    [autoit]

    Opt("GuiOnEventMode", 1)
    #include<guiconstants.au3>
    #include<array.au3>
    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 579, 170, 192, 124)
    GUISetOnEvent(-3, "_exit")
    $Button1 = GUICtrlCreateButton("Abbrechen", 416, 104, 113, 49)
    $Button2 = GUICtrlCreateButton("GO", 416, 16, 113, 49)
    GUICtrlSetOnEvent(-1, "_go")
    $Edit1 = GUICtrlCreateEdit("", 24, 16, 361, 129)
    GUICtrlSetData(-1, "")
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###
    $iStart = 0

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

    While Sleep(100)
    $aIP = StringSplit(GUICtrlRead($Edit1), @LF)
    While $iStart = 1
    $iCounter=0
    For $i = 1 To $aIP[0]
    If Ping($aIP[$i], 250) = 0 Then $iCounter += 1
    Sleep(100)
    Next
    if $iCounter=$aIP[0] then Exit Shutdown(1, "", "Shutdown") ;
    Sleep(180000)
    WEnd

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

    WEnd

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

    Func _go()
    $iStart = 1
    EndFunc ;==>_go

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

    Func _stop()
    $iStart = 0
    EndFunc ;==>_stop

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

    Func _exit()
    Exit
    EndFunc ;==>_exit

    [/autoit]

    Wär Super wenn mir jemand damit helfen könnte ...
    lg

    Eldas

    Einmal editiert, zuletzt von Eldas (21. September 2010 um 18:23)

  • Probiere mal dieses Beispiel :) :

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    Local $status = 0, $Pause = -1
    Opt("GuiOnEventMode",1)
    $Form1 = GUICreate("Ping->OFF", 290, 135, 192, 164)
    $Input1 = GUICtrlCreateInput("", 8, 8, 273, 21)
    $Button1 = GUICtrlCreateButton("Durchsuchen...", 192, 32, 89, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Starte Prozedur", 90, 64, 101, 49, $WS_GROUP)
    GUICtrlSetOnEvent($Button1,"Wahl")
    GUICtrlSetOnEvent($Button2,"StartStop")
    GUISetOnEvent(-3,"_Exit")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    If $Pause = 1 Then
    If FileExists(GUICtrlRead($Input1)) = False Then
    MsgBox(0,"ERROR!","Datei existiert nicht!")
    $Pause = 0
    GUICtrlSetData($Button2,"Starte Prozedur")
    Else
    $status = PingList(GUICtrlRead($Input1), 10)
    If $status = 1 Then
    MsgBox(0,"Herunterfahren","HIER EINSETZEN!")
    Exit
    EndIf
    EndIf
    EndIf
    Sleep(10)
    WEnd

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

    Func StartStop()
    If $Pause = -1 Then $Pause = 0
    $Pause = Not $Pause
    If $Pause = 0 Then
    GUICtrlSetData($Button2,"Starte Prozedur")
    Else
    GUICtrlSetData($Button2,"Pausiere Prozedur")
    EndIf
    EndFunc

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

    Func Wahl()
    GUICtrlSetData($Input1,FileOpenDialog("IP-Liste",@ScriptDir,"Alle Dateien (*.*)"))
    EndFunc

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

    Func _Exit()
    Exit
    EndFunc

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

    Func PingList($liste, $wait = 100)
    Local $a=FileOpen($liste,0),$b=FileRead($a)
    FileClose($a)
    $a = StringStripCR($b)
    $b = StringSplit($a,@LF)
    $a = 1
    If IsArray($b) = False Then Return -1
    For $i=1 To $b[0]
    If Ping($b[$i],$wait) Then $a = 0
    Next
    If $a = 1 Then Return 1
    Return 0
    EndFunc

    [/autoit]

    Es sollte genau das tun was du willst - Außer der Shutdownfunktion -> kannste deshalb testen [ungetestet - sollte aber funzen] ;)

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Ganz erlich !!! Perfect !!

    Ich bin richtig vom Forum begeister ! Gestern ein Problem gehabt, und geholfen worden und nun !! Dank dank dir vielmals !!!

    Könnte man vllt noch ohne Oberfläsche machen d.h. man klickt auf eine Exe und es macht alles automatisch ? ( Wie die txt Datei heißt wird dann im Programm fest definziert ) Also auf eine exe klicken dann holt er dich die IPs auf der TxT datei und prüft die, wenn alle down runterfahren wenn net weiter machen ! Des wär noch Super =)

    lg

    Eldas !!!!

    Einmal editiert, zuletzt von Eldas (21. September 2010 um 12:41)

  • Ich habe festgestellt, dass die vorherige Funktion möglicherweise fehlerhaft war ... :S
    EDIT: Ich bin davon ausgegangen, dass der Ping bei der @IPAddress1 keinen Error auswirft :huh::S
    Keine Ahnung warum der das macht, aber die Funktion ist korrekt soweit! :)
    Die folgende Version ist OHNE GUI und mit "aktualisierter" Funktion ("alte Funktion funzt doch") ;) :

    Spoiler anzeigen
    [autoit]

    $Datei = "test.txt"
    While 1
    $status = PingList($Datei, 10)
    If $status = 1 Then
    MsgBox(0, "Herunterfahren", "HIER EINSETZEN!");Hier Shutdown eingeben
    Exit
    EndIf
    Sleep(10)
    WEnd

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

    Func PingList($liste, $wait = 100)
    Local $a=FileOpen($liste,0),$b=FileRead($a)
    FileClose($a)
    $a = StringStripCR($b)
    $b = StringSplit($a,@LF)
    $a = 1
    If IsArray($b) = False Then Return -1
    For $i=1 To $b[0]
    If Ping($b[$i],$wait) Then $a = 0
    Next
    If $a = 1 Then Return 1
    Return 0
    EndFunc

    [/autoit]

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Danke dir :love:

    Nur bei mir kommt :

    _ArrayDisplay($b)
    ^ ERROR
    >Exit code: 1 Time: 0.474

    Wenn es es aufsühren will ;)

  • Oberer Post wurde aktualisiert :D
    Jetzt sollte alles wie beschrieben funktionieren!
    PS: _ArrayDisplay($b) hab ich als Test gebraucht, damit ich dem
    Error bei Ping(@IPAddress1) auf die Schliche kommen kann... leider erfolglos *stirnrunzel*

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • Supi werds gleich mal testen und dir ein Feedback schreiben =)

    Edd#

    Also habs gerade auf die schnelle getestet funzt 1A =) Ich bedank mich herzlich bei dir =) :love:

    Find echt SUPER dass es noch Leute gibt die neulingen helfen =)