Tomtom Navi prüfen ob Netzwerk aktiv ist

  • Dann würde ich in der Hilfe zumimdest einen Hinweis darauf erwarten, dass weitere flags möglich sind.
    Und in der Beschreibung der Makros sollte entweder ein bestehender Unterschied besser beschrieben oder darauf hingewiesen werden, dass z.B. @SW_Maximize und @SW_ShowMaximized den selben Effekt haben.


    Oder bin ich da zu pingelig :/

  • Interessant. In der Hilfe steht aber nix von @SW_SHOWMINIMIZED. Sollten wir die Hilfe aktualisieren?

    Hehe... ne, wie ich soeben getestet habe, ist es eh egal, was ich bei Run angebe, es wird ignoriert.

    https://docs.microsoft.com/en-…ser/nf-winuser-showwindow


    Das hier habe ich als Show.exe kompiliert:

    AutoIt
    GUICreate('Test_SW')
    GUISetState() ; @SW_SHOW = Shows a previously hidden window (default)
    Do
    Sleep(100)
    Until GUIGetMsg() = -3


    Und hiermit habe ich die Show.exe gestartet:

    AutoIt
    Run('m:\AutoIt\Test\Show.exe', '', @SW_HIDE) ; @SW_MINIMIZE, @SW_HIDE bringt nicht, es ist egal was man da setzt!
    WinSetState(WinWait('Test_SW', '', 5),'', @SW_MINIMIZE) ; das funktioniert!
    ;~ WinSetState(WinWait('Test_SW', '', 5),'', 11) ; funktioniert auch! - @SW_FORCEMINIMIZE = 11 (kennt AutoIt nicht!)

    Es geht also doch nicht ohne ein WinSetState... ergo falsch gedacht und du hattest recht.

  • Hab noch mal etwas rumgespielt.
    Die Flags von Run funktionieren nur für Programme die als CUI compiliert sind. (#AutoIt3Wrapper_Change2CUI=Y).
    Sieht so aus, als ob die Flags für DOS-Fenster gelten, das von Run angezeigt wird.

  • [...] es ist eh egal, was ich bei Run angebe, es wird ignoriert.

    Ja, selbst eine Show.exe, die nur aus MsgBox(0, "Test", "3 Sekungen warten", 3) besteht, ignoriert z.B. Run(..., @SW_HIDE).

    Sieht so aus, als ob die Flags für DOS-Fenster gelten, das von Run angezeigt wird.

    Ob das nur für "DOS-Fenster" gilt, bin ich mir nicht ganz sicher.

    Beispiel :

    Die angehängte ZIP in ein Testverzeichnis kopieren und entpacken.

    Zusätzlich eine Datei dort 'reinkopieren, die ca. 100 MB groß ist (damit man auch etwas sieht;)).

    Sowohl die 7zG.exe = standalone 7Zip-Modul mit GUI als auch die 7za.exe = standalone 7Zip-Modul ohne GUI reagieren auf die @SW_*-Flags. Einfach etwas herumspielen.

    Liegt möglicherweise aber an der Programmierung der 7zG.exe :/.


    Gruß Musashi

    Dateien

    • Test7Zip.zip

      (1,16 MB, 15 Mal heruntergeladen, zuletzt: )

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."


  • Hallo ihr Experten,

    hab mich mal ein bisschen mit Array beschäftigt.

    Komme aber nicht ganz Klar:

    XML String:

    <countryCode>DE</countryCode>

    <country>Deutschland</country>

    <countryCodeISO3>DEU</countryCodeISO3>

    <freeformAddress>Musterstraße 4, 01234 Muster</freeformAddress>

    <localName>Musterhausen</localName>

    </address>

    <position>

    <lat>49.90707</lat>

    <lon>7.81838</lon>

    </position>

    <viewport>

    <topLeftPoint>


    Hier möchte ich den Wert lat und lon in Variable speichern.

    Mein Script:

    $temp = StringSplit($strXML,@CRLF) ; wandelt quellcode String in Array

    _ArrayDisplay($temp) ; kompletter Quellcode

    $startpos = _ArraySearch($temp,"<position>",0,0,0,1) ; hier gehts los

    $endpos = _ArraySearch($temp, '<viewport>',0,0,0,1) - 1 ; 1 Feld vor dem Treffer ist das letzte das uns interessiert

    ;MsgBox(0,"",$startpos & " bis " & $endpos)

    For $i = $startpos to $endpos

    ;$curUrl= _StringBetween($temp[$i] ,'<lat>',"</lat") ; für jedes Array Feld des Bereiches der uns interessiert nehmen wir den Teil des Strings de wir suchen

    $curUrl= _StringBetween($temp[$i] ,'<lon>',"</lon")

    if $curUrl = 0 Then ; wenn die Suche fehlerhaft war machen wir mit dem nächsten Feld weiter

    ContinueLoop

    Else

    _ArrayAdd($aLat,$curUrl[0]) ; suche war erfolgreich also speichern wir den Teilstring in unser Ergebnis Array

    $aLat[0] += 1 ; kann man auch weglassen, erhöht den Zähler des 0ten Array eintrags um 1, damit man kein ubound benötigt um die Arraygröße zu ermitteln

    EndIf

    Next

    _ArrayDisplay($aLat)


    For $i = $startpos to $endpos

    $curUrl= _StringBetween($temp[$i] ,'<lat>',"</lat") ; für jedes Array Feld des Bereiches der uns interessiert nehmen wir den Teil des Strings de wir suchen

    $curUrl= _StringBetween($temp[$i] ,'<lon>',"</lon")

    if $curUrl = 0 Then ; wenn die Suche fehlerhaft war machen wir mit dem nächsten Feld weiter

    ContinueLoop

    Else

    _ArrayAdd($aLon,$curUrl[0]) ; suche war erfolgreich also speichern wir den Teilstring in unser Ergebnis Array

    $aLon[0] += 1 ; kann man auch weglassen, erhöht den Zähler des 0ten Array eintrags um 1, damit man kein ubound benötigt um die Arraygröße zu ermitteln

    EndIf

    Next

    _ArrayDisplay($aLon)


    Ich bekomme entweder lat oder lon einzeln aber nicht beide auf einmal.

    Könnt ihr mir bitte helfen.

    Hab mir die englische Wiki übersetzt komme aber trotzdem nicht ganz klar.

    Gruß Windi

  • Mein Script:

    Hallo Windi ,

    Tipp : Verwende zum posten (d)eines Skriptes das Code-Icon </> aus dem Beitragsheader :

    Das Skript ist so auch nicht vollständig, da z.B. #include <Array.au3> fehlt.


    Gruß Musashi

    Bilder

    • CodeIcon.jpg

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."


  • C
    #include <String.au3>
    #Include <INet.au3>
    #include <array.au3>


    steht natürlich als 1. hab nur die sensiblen Daten rausgenommen und es vergessen zu kopieren.

    Danke für den Tip!

    Gruß Windi

  • Er zeigt mir aber trotzdem nur 1 Wert an.


  • $curUrl= _StringBetween($temp[$i] ,'<lat>',"</lat") ; für jedes Array Feld des Bereiches der uns interessiert nehmen wir den Teil des Strings de wir suchen
    $curUrl= _StringBetween($temp[$i] ,'<lon>',"</lon")

    Du speicherst beide Ergebnisse immer noch in derselben Variable !

    Könntest Du bitte mal eine XML-Datei posten, die mehrere Blöcke mit <lat>49.90707</lat> und <lon>7.81838</lon> enthält (sensible Daten ersetzen).

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."


  • Hier noch ein Bsp.:

  • Nicht meine erste Wahl, aber es folgt Deiner Skriptlogik ;) :


    EDIT : Bitnugger war Sekunden schneller und hat es so gelöst, wie auch ich es für sinnvoller halte.

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."


  • Ich verstehe das nicht... habe mein obiges Bsp. etwas geändert, doch so werden mir im Array leere Zeilen (Chr(0) in Row 1 und Row 4) angezeigt. Wenn ich aber hier schaue, sollte das nicht der Fall sein.

  • Ich habe folgendes geändert von Bitnugger dann läuft es.


    Braucht man das?


    Code
    $aSource = StringSplit($strXML, @CRLF, $STR_ENTIRESPLIT) ; wandelt quellcode String in Array
    geändert in:
    $aSource = StringSplit($strXML, @CRLF) ; wandelt quellcode String in Array
  • Ich habe folgendes geändert von Bitnugger dann läuft es.

    Das war nicht von mir, sondern von Musashi.


    Das $STR_ENTIRESPLIT sorgt dafür, dass die @CRLF, die ja aus zwei Zeichen bestehen, wie eines behandelt wird. Lässt du das $STR_ENTIRESPLIT weg, wird bei @CR und bei @LF gesplittet. Da es bei dir nicht funktioniert, kann es gut sein, dass du in der Variable $strXML gemischte Zeilenumbrüche hast... also mal @CRLF, mal nur @LF oder @CR... denn bei mir funktioniert das Script von ihm.

  • Windi


    Wie Bitnugger bereits erklärt hat sorgt $STR_ENTIRESPLIT dafür, dass @CRLF wie ein Zeichen behandelt wird. Lässt du das $STR_ENTIRESPLIT weg, wird bei @CR und bei @LF gesplittet. Da Du, wie er sicher richtig vermutet, in der Variable $strXML gemischte Zeilenumbrüche hast, kannst Du diese wie folgt einheitlich mit @CRLF ersetzen :

    AutoIt
    ...
    $strXML = StringRegExpReplace($strXML, "(?m)(\R)+", @CRLF)
    $aSource = StringSplit($strXML, @CRLF, $STR_ENTIRESPLIT) ; wandelt quellcode String in Array
    ...

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."