Ip Aktualsierung funktionieert nicht

  • Also eine einfaches Zurücksetzen der Variable %IP an einer bestimmten Stelle tut es nicht? Im Übrigen hatte ich die Variablen anfänglich auf Global, ich habe halt schon oft Pferde kotzen sehen, und siehe da es funktionierte plötzlich, obwohl vielleicht unlogisch...

  • Wenn du meine Änderung noch drinne hast, finde ich es nicht unlogisch.

    Denn, nun wird geprüft ob du wirklich einen String zurück bekommst, ansonsten konnte er es nicht auslesen = keine Verbindung.

  • HAllo MOmbas, welche Änderung meinst du konkret, diese hier?


    Code
    ;Zeile 27/28:
    Local $sHost= "localhost" ;Außerhalb einer Funktion deklariert, also muss hier Global stehen!
    Local $Gateway, $nMsg     ;Außerhalb einer Funktion deklariert, also muss hier Global stehen!

    also alles auf global setzen?


    Kleiner Zwischenstand:

    #

  • Nein, ich meine diese hier (hier fehlt immer noch das Auskommentieren in Zeile 103, siehe unten). Und pack mal das Return hinter die if Abfrage (bzw. das kann eigentlich weg, da du nichts zurück gibst)), das habe ich versehentlich mit rein kopiert.:


    Und ob du wirklich alle !50! Millisekunden die Abfrage laufen lassen willst, solltest du dir echt überlegen.

    Das bedeutet, das diese Abfrage 20mal je Sekunde läuft und ist daher total überdimensioniert. Die Default 250ms sind schon in Ordnung, wobei auch 500ms gehen würden.

  • Mal ein Tipp für den Einsatz von Adlib-Funktionen.

    Es kann immer mal passieren, dass du die Aufrufsequenz etwas zu häufig gewählt hast und die Funktion dann erneut aufgerufen wird, obwohl sie vom ersten Aufruf noch nicht fertig ist.

    Deshalb angewöhnen bei kurzen Aufrufintervallen:

    AutoIt
    Func _myAdlib()
        AdlibUnregister('myAdlib')       ; Adlibfunktion bei Eintritt in die Funktion deregistrieren
    
        ; ... was zu tun ist in der Funktion
    
        AdlibRegister('myAdlib')         ; Bei Verlassen der Funktion erneut registrieren
    EndFunc



    Systeminfos hole ich mir gerne mit Powershell:

  • So habe die Zeile jetzt auskommentiert, und auch die Frquenz hochgesetzt, immer noch Fehlanzeige, scheint doch sehr komplex zu sein das Problem


    Um noch mal auf meine Frage zurückzukommen, spricht denn was dagegen, die Variable $IP beim Eintritt in die Funktion zurückzusetzen?

  • Tipp: Bau dir zu Testzwecken ein manuelles Auslesen (auf einen Button, der dann deine Funktion aufruft (inkl. einer Ausgabe in einer MsgBox ($objAdapter.IPAddress(0)) oder so und ohne die Adlib registrierung) wenn du ihn drückst).

    Dann schaut du was er dir ausgibt, nachdem du das Kabel gesteckt hast und nochmal nachdem du es gezogen hast.

    Du musst nun step by Step das Problem finden.

  • Moin,

    wie schon gesagt, wenn keine IP-Adresse ermittelt wird, passiert meiner Meinung nach gar nichts.


    Versuch mal das:

    Wenn der Adapter beim Verbindungsverlust die letzte IP-Adresse hält, nützt das allerdings auch nicht.

  • Velted Ob du das nun mit Return rausspringen und ansonsten das letzte Guictrlsetdata ausführst oder das mit dem else block oben machst (wie es in meiner Änderung steht) ist vollkommen egal und eher Geschmackssache (ich mag lieber klare Else definitionen). Aber eine Sache fällt mir beim Schreiben durchaus auf: Für alle anderen "Else" Fälle gibt es keine Definition in meiner Variante und somit keine Rücksetzung, daher:

    casi4712 : Entweder du nimmst die Variante von Velted oder mach es so:

  • Ich würde empfehlen, dass ganze in eine Funktion auszulagern. Das macht es übersichtlicher und einfacher zu nutzen.

    Es kann also ein Array mit IP/Gateway gesucht werden oder nur getestet werden, ob eines vorhanden ist.

    Ich hab auch das WMI-Object static gemacht (Static $objWMIService), da das Objekt nur beim ersten mal erfolgreich erstellt wurde und ab dem zweiten Call fehlschlug.

    Scheinbar kann man nicht mehrere Objekte davon in einem Programm erstellen/nutzen, dementsprechend hab ich mit static dafür gesorgt, dass es nur einmal erstellt wird und nicht öfter (vmtl. muss man eigentlich nen close call an dem Objekt machen oder so).

  • Bingo Velted: Jetzt funktioniert es so wie es soll, und macht auch Sinn so. Auch Mombas und allen anderen einen recht herzlichen Dank. Die Änderung aus Beitrag 52 hatte ich ja bereits eingearbeitet. Ich immer mit meinen Zangengeburten...



    lg und einen schönen Feierabend



    Chris

  • casi4712 : Das Problem hierbei war schlicht und einfach: Du hast viele If-Bedingungen aber nie den "not" bzw. "else" Fall bearbeitet. Wenn du den Stecker ziehst ist das Ergebnis wohl kein Objekt und du springst somit früher raus, wofür es keine Behandlung gab, in allen anderen Fällen jedoch funktionierte.


    Versuch mal immer auch den "Else" Fall abzuarbeiten. Wenn de rcode steht kannst du immer noch schauen ob du diese besser zusammen fassen kannst (was hier bei Velted und meiner letzten Variante der Fall ist). Dann stolperst du weniger.

  • Noch eine Idee:

    Versuche doch mal dein Skript an das Event-Log zu koppeln. Ist natürlich nur dann sinnvoll, wenn bei jedem deiner möglichen Fälle auch ein Logeintrag erfolgt. Dazu findest du in <Ereignisanzeige><Windows-Protokolle><System> alle relevanten Einträge. Einen betreffenden markieren, "Aktion" - "Aufgabe an dieses Ereignis anfügen..." auswählen und damit dein Skript zum IP-Check immer einmalig bei Auftreten des Ereignisses starten.