Bestimten Text suchen und verändern

  • Bitteschön.

    Spoiler anzeigen
    [autoit]

    $hGUI = GUICreate("")
    $edit = GUICtrlCreateEdit("Ich bin ein Text, in dem Hallo vorkommt."&@CRLF&"Hallo ist nämlich ein gängiges Wort in der deutschen Sprache."&@CRLF&"Ohne Hallo könnte sich niemand begrüßen. Hallo allesamt",20,20,300,300)
    $button = GUICtrlCreateButton("suchen",20,350)
    GUISetState()

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

    While True
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $button
    GUICtrlSetData($edit,_StringReplace(GUICtrlRead($edit),"Hallo","huhuuu",2))
    EndSwitch
    WEnd

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

    Func _StringReplace($sString,$sSubString,$sReplaceString,$iOccurence=1,$iCaseSense=0)
    ;SEuBo
    Return StringLeft($sString,StringInStr($sString,$sSubString,$iCaseSense,$iOccurence)-1)&StringReplace(StringTrimLeft(StringTrimRight($sString,StringLen($sString)-StringInStr($sString,$sSubString,$iCaseSense,$iOccurence)-StringLen($sSubString)),StringInStr($sString,$sSubString,$iCaseSense,$iOccurence)-1),$sSubString,$sReplaceString)&StringRight($sString,StringLen($sString)-StringInStr($sString,$sSubString,$iCaseSense,$iOccurence)-StringLen($sSubString))
    EndFunc

    [/autoit]
  • Danke.
    Aber jetz zur Datei.
    Mir wurde gesagt ich muss es in Binary lesen+schreiben.
    Aber wen es in Binary steht dann kann den Text garnicht mehr suchen.
    Wie krige ich es anders hin Filewrite mit Sonderzeichen zu bnutzen.

  • Also FileWrite schreibt Umlaute und auch sonderzeichen.

    Hier einfach mal ein Beispiel aus der Hilfe

    Spoiler anzeigen
    [autoit]

    $file = FileOpen("test.txt", 1)

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

    ; Check if file opened for writing OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    FileWrite($file, "Zäöh _ §E")
    FileWrite($file, "Still Line1" & @CRLF)
    FileWrite($file, "Line2")

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

    FileClose($file)

    [/autoit]

    MfG
    Der_Doc

  • Das sind einfach nur Steuerzeichen, die die Befehle dazu veranlassen abzubrechen.
    So z.B. die Anzeige in einer MsgBox usw...
    Deshalb kann man den String auch nicht mit StringRegExp bearbeiten.

    Um solche Daten schreiben zu können musst du eine Datei mit FileOpen im BinaryMode öffnen, deinen zuschreibenden Text in Binary umwandeln und in die Datei schreiben.
    Für ein Beispiel habe ich keine Zeit jetzt, außerdem wäre es vll. mal Sinnvoll Teile des Strings hier zu posten, sonst nutzt das denjenigen die dir helfen sollen wenig.

  • Ich weiß das decompilen unerwünscht wär aber ich will es ja an der exe verändern.
    Und an einer Text datei wär es auch leicht.
    Deswegen habe ich auch ein problem und frage euch :P
    Ich habe irgent wo in der Sig gelsen: Nichts ist mit AutoIt unmöglich
    Dann beweißt es mal :D

  • Der_Doc, es kann ja auch ein Programm sein, dass nicht in AutoIt geschrieben wurde. Und dort könnte man auch Texte austauschen...
    Ich finde ihr solltet einfach mal auf jemanden warten, der weis wie es geht, weil mittlerweile wird das nur ein zugespamme.

    anno2008

    • Offizieller Beitrag

    Man kann aber auch bei Binärdateien nach "Strings" suchen und ersetzen.
    Der Austauschstring muss aber die gleiche Länge haben (nicht kürzer und nicht länger).

    Spoiler anzeigen
    [autoit]


    $sPath = @ScriptDir & '\test.exe'

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

    $sSearchString = 'This program cannot be run in DOS mode'
    $sReplaceString = 'Das Programm läuft nicht im DOS-Modus '

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

    If StringLen($sSearchString) <> StringLen($sReplaceString) Then Exit MsgBox(0, 'Fehler', 'Die beiden Strings müssen die gleiche Länge haben!')
    $hFile = FileOpen($sPath, 16)
    If $hFile = -1 Then Exit MsgBox(0, 'Fehler', 'Konnte Datei nicht öffnen')
    $sFile = FileRead($hFile)
    FileClose($hFile)

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

    $iFound = StringInStr($sFile, StringMid(StringToBinary($sSearchString), 3))
    If $iFound = 0 Then Exit
    $sFile = StringReplace($sFile, $iFound, StringMid(StringToBinary($sReplaceString), 3))

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

    $hFile = FileOpen($sPath, 2 + 16)
    If $hFile = -1 Then Exit MsgBox(0, 'Fehler', 'Konnte Datei nicht öffnen')
    FileWrite($hFile, $sFile)
    FileClose($hFile)

    [/autoit]
  • So,
    du ich hatte jetzt kurz Zeit mich damit zu beschäftigen.
    Du musst wie gesagt schon im Binary-Mode lesen.

    [autoit]

    $oFile = FileOpen("deineexe.exe", 16)
    $read = FileRead($oFile)

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

    $read = BinaryToString($read) ;<-- jetzt kannst du $read bearbeiten
    ;....

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

    $oFile2 = FileOpen("deineexenahher.exe", 18)
    FileWrite($oFile2, StringToBinary($read))

    [/autoit]

    Der_Doc, man muss zwar etwas misstrauisch sein, aber man kann nicht immer direkt behaupten, dass alles was man machen will ein Bot oder sonst was illegales is.
    Wenn er das will bekommt er das eh hin und ansonsten seh ich keinen Sinn, warum man eine Exe bearbeiten sollte. Wenn man z.B. einen Updater baut und seine Exe Patchen will muss man auch genau das machen.

    /Edit:
    Oscar hat die ausführliche Lösung :)

    Einmal editiert, zuletzt von anno2008 (21. Dezember 2009 um 20:52)