0815 Pinger

  • Hoopa einen Geilen Tag an Alle

    Mein Vorhaben
    ich bin gerade am basteln eines 0815 Pingers (Pingt die 4 wichtigsten Server und schreibt ein Logfile). Um von jeder Workstation die Verbindung zu testen. Später soll auch noch ein Remote Shutdownprogramm dazukommen um meine Kollegen zu ärgern :)
    Anstatt der Labels sollen für Online grüne icons erscheinen und für Offline rote hab aber keine ahnung wie ich das realisiere.

    Woher weis man was für icons es alles in shell32 gibt z.b shell32

    Mein Ziel
    Die Datei soll immer mit dem aktuellem Datum gespeichert werden.
    Kann mir (Möchtegernprogrammierer) jemand verraten wie ich zuerst das Datum dann das ping.log hinbekomme und mir vielleicht noch schreiben ob der Code so okay ist oder viel zu umständlich usw ist.

    Ich glaube auch das ich einen Fehler beim Erstellen und Beschreiben der Logfile habe ab Zeile 46 :(
    Zeigt mir als kompilierte Exe auf einem anderen rechner einen File Handle fehler.


    Herzlichen Dank schon mal

    17 Mal editiert, zuletzt von Real_Bourbon (12. Juli 2006 um 15:01)

    • Offizieller Beitrag

    Hallo,

    ich fange mal mit dem einfachsten an

    Zitat

    Woher weis man was für icons es alles in shell32 gibt z.b shell32

    z.B. mit einem IconViewer!

    Für den Rest melde ich mich heute abend noch mal, ich habe im moment kene Zeit! ;)

    @edit1: Neuere Version gefunden ;)

    • Offizieller Beitrag
    Zitat

    Original von Real_Bourbon

    ....

    Mein Ziel
    Die Datei soll immer mit dem aktuellem Datum gespeichert werden.
    Kann mir (Möchtegernprogrammierer) jemand verraten wie ich zuerst das Datum dann das ping.log hinbekomme und mir vielleicht noch schreiben ob der Code so okay ist oder viel zu umständlich usw ist.

    ....

    Wie willst du es den jetzt genau?

    1. Soll die Datei Ping.log heissen und in der Datei das Datum und das Pingergebnis stehen oder soll die Datei <DATUM> Ping.log heissen und nur das Pingergebnis drin stehen?

    2. Soll die Datei immer neu erstellt werden (alter Inhalt wird gelöscht) oder soll das Pingergebnis immer an die alte Datei angehängt werden?

    Meine Lösung:

    Spoiler anzeigen

    Die Funktion _FileCreate() wird in diesem Fall nicht benötigt da die Funktion FileOpen() automatisch die Datei erstellt wenn sie nicht existiert!

    Tipp: Immer nur eine Eventmethode benutzen entweder mit GUIGetMsg() oder mit ...SetOnEvent()

  • Hi,
    wenn ich alles richtig verstanden habe, sieht es dann etwa so aus:

    Spoiler anzeigen


    eddy_erpel

  • Das Programm soll das Ergebnis an eine Log dranhängen und die Datei soll dann Datum.Uhrzeit.ping.log heißen. Damit ich nach Datum Uhrzeit durchsuchen und archivieren kann.

    Eddy_Erpel
    Klappt super ich danke dir leicht zu durchschauen Kool mit der for schleife.

    Bernd
    Der Code ist ja Bestialisch. Das tut ja in den Augen weh. :rolleyes: Versteh Ihn zwar nicht aber Hut ab mehr als ich mir gewünscht habe.
    Der Logaufbau ist ja supergeil Dank auch in deine Richtung

    Das mit den Arrays und Schleifen muß ich ja dann wohl noch ein paar Lichtjahre lang üben.

    Perfekt wie immer Leute :)

    Einmal editiert, zuletzt von Real_Bourbon (12. Juli 2006 um 19:49)

    • Offizieller Beitrag

    Gern geschehen! :gehtrunterwieoel:

    Zitat

    Original von Real_Bourbon
    Das Programm soll das Ergebnis an eine Log dranhängen und die Datei soll dann Datum.Uhrzeit.ping.log heißen. Damit ich nach Datum Uhrzeit durchsuchen und archivieren kann.

    Die Uhrzeit würde ich nicht in den Dateinamen einfügen. Das kann sehr unübersichtlich werden je nachdem wie oft man das Programm ausführt!

    Aber wenns sein muss geht es so (vor der Zeile mit FileOpen in Pingdem einfügen):

    Code
    $datei = @YEAR & @MON & @MDAY & "." & @HOUR & @MIN & ".Ping.log"

    Was verstehst du den nicht, vllt kann ich es dir ja verständlich erläutern!

  • Hehe mir kann niemand helfen sogar meine Freundin versteht mehr vom Programmieren wie ich.

    Ich versuchs mal

    Z.B das hier
    Dim $Servers[4][2], $Icons[4]
    Soweit ich verstanden habe sind das mehrdimensionale Arrays bloß was speicherst du da [4][2].

    Das hier ist auch out of space
    GUICreate("Ping some Ass Baby", 250, 180 + (35 * (UBound($Servers) -1 )))

    Oder das 'ist ja kriminell

    Code
    ;Erstell die Server-Labels  
    For $i = 0 To UBound($Servers) - 1
    GUICtrlCreateLabel($Servers[$i][0], 11, 55 + (35 * $i), 70)
          $Icons[$i] = GUICtrlCreateIcon("shell32.dll", 210, 115, 45 + (35 *
     $i),32,32)  Next

    Hier angekommen hab ich mich gefragt ob ich es mal mit viel Jacky probiere zu verstehen.

    Code
    For $i = 0 To UBound($Servers) - 1
    	If Ping($Servers[$i][1],250) Then
                  GUICtrlSetImage($Icons[$i], "shell32.dll",9) ; Online
                  FileWrite($file, $Servers[$i][0] & " ist Online" & @CRLF)
    Else  GUICtrlSetImage ($Icons[$i], "shell32.dll",10) ;Offline              FileWrite($file, $Servers[$i][0] & " ist Offline" & @CRLF)
    EndIf
    Next

    Also ich versteh nicht die Gedankenschritte. Wie kommst du auf ubound
    auf die For Schleife, in welcher reihenfolge muß ich das ablaufen lassen gibt es ein leben ohne Programmierung :)

    Deshalb hab ich auch alles versucht zu dokumentieren.

    Und überhaupt wie bringst du den Code unter den Button im Forum
    Spoiler Zeigen?

    Einmal editiert, zuletzt von Real_Bourbon (12. Juli 2006 um 20:43)

    • Offizieller Beitrag
    Zitat

    Z.B das hier
    Dim $Servers[4][2], $Icons[4]
    Soweit ich verstanden habe sind das mehrdimensionale Arrays bloß was speicherst du da [4][2].

    Ja $Servers ist ein mehrdimensionales (zweidimensionales) Array (4 Zeilen und 2 Spalten) darin speichere ich die Servernamen und IpAdressen:

    Code
    $Servers[0][0] = "Lxmain"
    $Servers[0][1] = "192.168.1.1"
    $Servers[1][0] = "Ntmain"
    $Servers[1][1] = "192.168.2.1"
    $Servers[2][0] = "Notesapp"
    $Servers[2][1] = "192.168.2.2"
    $Servers[3][0] = "Notesmail"
    $Servers[3][1] = "192.168.2.3"

    $Icons ist ein eindimensionales Array und speichert die ControlID's von GUICtrlCreateIcon:

    Code
    $Icons[$i] = GUICtrlCreateIcon("shell32.dll", 210, 115, 45 + (35 * $i),32,32)

    Damit ich später auch das entsprechende Icon zuweisen kann:

    Code
    GUICtrlSetImage($Icons[$i], "shell32.dll",9) ; Online


    Mit Ubound kann man die Dimensionen von Arrays abfragen, ohne weitere Angaben wird immer die grösse der 1. Dimension (Wert in der 1. eckigen Klammer) zurückgegeben, Ubound($Servers) gibt also 4 zurück. Mit Ubound($Server,2) wird die 2. Dimension zurückgegeben, in diesem Fall 2 (wert in der 2. eckigen Klammer). Mit Ubound($Server,0) wird die anzahl der Dimensionen (anzahl der eckigen Klammern) zurückgegeben. In desem Fall also 2.

    Zitat


    Das hier ist auch out of space
    GUICreate("Ping some Ass Baby", 250, 180 + (35 * (UBound($Servers) -1 )))

    Ist nicht als eine einfache rechenaufgabe, in diesem Fall 180 + (35 * (4 - 1)) = 270.
    Hat den Vorteil wenn du noch eine Server hinzufügst wird Fenster automatisch vergrössert, z.B:

    Zeile 11 ändern in

    Code
    Dim $Servers[5][2], $Icons[5]


    und nach Zeile 24 einfügen

    Code
    $Servers[4][0] = "Name neuer Server"
    $Servers[4][1] = "192.168.3.1"

    Dann werden 5 Server angezeigt und das Fenster ist automatisch 305 Pixel hoch.

    Der Rest müsste sich jetzt von selbst erklären, oder ?

    Zitat


    Oder das 'ist ja kriminell

    Code
    ;Erstell die Server-Labels  
    For $i = 0 To UBound($Servers) - 1
    GUICtrlCreateLabel($Servers[$i][0], 11, 55 + (35 * $i), 70)
          $Icons[$i] = GUICtrlCreateIcon("shell32.dll", 210, 115, 45 + (35 *
     $i),32,32)  Next

    Hier angekommen hab ich mich gefragt ob ich es mal mit viel Jacky probiere zu verstehen.

    Code
    For $i = 0 To UBound($Servers) - 1
    	If Ping($Servers[$i][1],250) Then
                  GUICtrlSetImage($Icons[$i], "shell32.dll",9) ; Online
                  FileWrite($file, $Servers[$i][0] & " ist Online" & @CRLF)
    Else  GUICtrlSetImage ($Icons[$i], "shell32.dll",10) ;Offline              FileWrite($file, $Servers[$i][0] & " ist Offline" & @CRLF)
    EndIf
    Next

    Also ich versteh nicht die Gedankenschritte. Wie kommst du auf ubound
    auf die For Schleife, in welcher reihenfolge muß ich das ablaufen lassen gibt es ein leben ohne Programmierung :)

    Deshalb hab ich auch alles versucht zu dokumentieren.

    Und überhaupt wie bringst du den Code unter den Button im Forum
    Spoiler Zeigen?

    Für den Spoiler musst du die Tags [ SPOILER ] und [ /SPOILER ] (ohne Leerzeichen) eingeben!

    • Offizieller Beitrag
    Zitat

    Original von Eddy_Erpel
    Hi,
    danke für die Lorbeeren.
    Hier noch zu deiner letzte Frage:
    Global $datei = ( _NowDate() & "." & _NowTime() & " .ping.log")

    eddy_erpel

    Das kann so nicht funktionieren, _NowTime() gibt die Zeit getrennt durch ":" aus und das ist ein nicht erlaubtes Zeichen bei Dateinamen.

    Das ist auch der Grund weshalb ich _NowDate() ungerne für Dateinamen verwende, wenn nämlich z.B. das amerikanische Format eingestellt ist wird als Trennzeichen "/" benutzt und das ist auch ein nicht erlaubtes Zeichen im Dateinamen.

  • W-o-W
    sowas muß man auch können Programmieren und dann nebenbei mal hüpsch idiotensicher erklärt.
    Wäre nie auf die Idee gekommen die Gui dynamisch anzupassen
    Danke euch beiden noch mal.

    THX
    an
    Bernd
    Eddy_Erpel

    Nur noch eins wie kann man eine Datei ausführen z.B AutoIt.chm wenn man den Arbeitspfad mit regread ausgelesen hat?

    Code
    $regautoitdir = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt\", "InstallDir")
    $autoitdir = $regautoitdir & "\"


    Dann ist gespeichert c:\programme\autoit\
    Wie führe ich dann c:\programme\autoit\autoit.chm aus

    Einmal editiert, zuletzt von Real_Bourbon (13. Juli 2006 um 14:44)

    • Offizieller Beitrag

    Unter 2000/XP kann man es so machen

    Code
    run(@ComSpec & " /C START " & $autoitdir & "autoit.chm")
  • hey

    das hab ich mit rundos blos es klappt nicht
    lol so hab ich es versucht :)

    Code
    $regautoitdir = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt\", "InstallDir")
    $autoitdir = $regautoitdir & "\"
    _RunDOS("start" & $autoitdir & "AutoIt.chm")

    habs aber jetzt :) läuft. Ich sollte mit dem Klebstoffschnüffeln aufhören

    Code
    $regautoitdir = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt\", "InstallDir")
    $autoitdir = "start " & $regautoitdir & "\"
    _RunDOS($autoitdir & "autoit.chm")

    Lesen und verstehen sind bei mir zwei paar dinge.
    Bei mir du kannst davon ausgehen das ich die Hilfe durchsiebt habe bevor ich hier um Hilfe suche.
    Hab dann ca.30 min rumgefummelt und eben ist mir die erleuchtung gekommen.

    Ahoi


    Ha gleichzeitig
    Werde deinen vorschlag auch mal testen

    Peace

    Einmal editiert, zuletzt von Real_Bourbon (13. Juli 2006 um 15:54)

    • Offizieller Beitrag

    Im 1. Beispiel fehlt nur ein Leerzeichen nach start dann funktioniert es auch.

    Code
    _RunDOS("start " & $autoitdir & "AutoIt.chm")