StringReplace zu viel für Autoit?

  • Hallo,

    ich habe ein Skript erstellt, welches die Binärdaten zweier .exe Dateien ausließt und den Unterschied herausgeben soll.

    Leider schafft Autoit es nicht mit StringReplace, wohl weil es zuviel für ihn ist.

    Im Anhang habe ich mal die beiden .exe Dateien ( 2 Messageboxen, eine ohne Text , eine mit Text ) und die .au3 hineingepackt.

    Wäre nett, wenn jemand sich dies mal anschauen könnte und mir sagen könnte, was damit los ist.

    Gruß,

    Julien

  • Also StringReplace funktioniert so:Text suchen -> gefunden(?) -> ersätzen
    aber wenn es 2 verschiedene Exe dateien sind, sind beide codes ganz anders und daher kann StringReplace den code der 1 exe datei nicht in den code der 2 exe datei finden.
    also z.B

    [autoit]

    StringReplace("Hallo du","du","es")

    [/autoit]


    die ausgabe sollte "Hallo es" sein
    ---

    [autoit]

    StringReplace("String","Wonach soll gesucht werden","gefundenes ersätzen")

    [/autoit]

    Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

    Spoiler anzeigen

    Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
    aber ich versuche wenigstens zu helfen :rolleyes:

    Einmal editiert, zuletzt von xXxProGamerxXx (21. März 2012 um 13:10)

  • Ja, aus dem Grund müsste es auch funktionieren.

    Wie hier :

    Spoiler anzeigen
    [autoit]

    $Text1 = "Dies ist ein Test 21"
    $Text2 = "Dies ist ein Test 2"

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

    MsgBox(64,"Test",StringReplace($Text1,$Text2,""))

    [/autoit]

    Funzt aber nicht bei den Binärcodes.

  • Spoiler anzeigen
    [autoit]


    $Text1 = "Dies ist ein 21 Test"
    $Text2 = "Dies ist ein 2 Test"

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

    MsgBox(64,"",StringInStr($Text1,$Text2)); Ist Text2 in Text1? = 0 = nein
    MsgBox(64, "Test", StringReplace($Text1, $Text2, "")); sucht Text2 in Text1 und wird durch "" ersetzt, aber nur wenn er den String findet, kann er ihn ersetzen.

    [/autoit]
  • ... das hilft mir auch nicht weiter, so wie ich es oben im Anhang habe, funktioniert es nicht, aber es müsste funktionieren !

  • Zwei .exe Dateien zu vergleichen ist schon von daher schwierig, weil wenn ich vorne ein Byte ändere liegen alle nachfolgenden Bytes an anderen Positionen.
    d.h. Man muss ein Offset einbauen und die .exe zeichenweise durchgehen. Und immer wenn ein Zeichen nicht stimmt muss überprüft werden ob es weiter hinten eventuell weiter geht. Ansonsten kann man in einer großen Datei das erste Byte löschen und hat keine Übereinstimmungen mehr.

    Etwas komplexer als mit Stringreplace ist das bei sowas schon.

    lg
    M

  • @Julien StringReplace kann das was du damit vorhaben willst nicht...
    wenn du mit ein programm von einer bereits bestehende exe den msgbox Text ändern willst
    dann kannst du Parameter beim Starten übergeben z.B
    Script1: 1.exe:

    [autoit]


    If $Cmdline[0] >= 2 then Msgbox(64,$cmdline[1],$cmdline[2])

    [/autoit]


    Script2: 2.exe:

    [autoit]

    Run(@scriptdir&"\1.exe Titel Text")

    [/autoit]

    Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

    Spoiler anzeigen

    Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
    aber ich versuche wenigstens zu helfen :rolleyes:

  • [autoit]


    $parameter = "Titel Text"
    Run(@scriptdir&"\1.exe "&$Parameter)

    [/autoit]


    einfach mal ausführen

    Sind TV-Quizfragen zu einfach? A) Ja B) Harry Potter

    Spoiler anzeigen

    Ich gebe zu dieser Post hat wahrscheinlich nicht viel geholfen,
    aber ich versuche wenigstens zu helfen :rolleyes: