".reg to .au3" - Problem

  • Salute,

    ich möchte gern .reg Dateien auslesen und in .au3, d.h. in ein AutoIt Script konvertieren.:rofl:

    Das klappt mit meiner "test.reg" Datei auch schon ganz gut, aber wenn ich nun eine andere .reg Datei konvertieren möchte, dann wird nur ein leeres "RegScript.au3" erstellt...:irre:

    Was mache ich falsch...?

    Bin noch Anfänger..., aber hier mal das Script:

    Spoiler anzeigen
    [autoit]

    ; GUI Reg2Au3 Converter
    Global $regsource
    Global $regdest

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

    #include <GuiConstants.au3>

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

    GuiCreate("Reg2Au3 Converter", 392, 316,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))

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

    $Group_1 = GuiCtrlCreateGroup("", 10, 20, 370, 150)
    $Label_1 = GuiCtrlCreateLabel("Quelldatei auswählen", 30, 50, 140, 20)
    $Input_1 = GuiCtrlCreateInput("", 30, 70, 200, 20)
    $Button_1 = GuiCtrlCreateButton("&Durchsuchen...", 260, 70, 100, 20)
    $Label_2 = GuiCtrlCreateLabel("Zieldatei auswählen", 30, 110, 120, 20)
    $Input_2 = GuiCtrlCreateInput("", 30, 130, 200, 20)
    $Button_2 = GuiCtrlCreateButton("&Durchsuchen...", 260, 130, 100, 20)

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

    $Button_OK = GuiCtrlCreateButton("&OK", 280, 280, 80, 20)

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

    GuiSetState()
    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = 0
    ContinueLoop
    Case $msg = $Button_1
    $regsource = FileOpenDialog("Registrierungsdatei wählen", @MyDocumentsDir, "(*.reg)", 1+4)
    ControlSetText("Reg2Au3 Converter", "", $Input_1, $regsource)
    Case $msg = $Button_2
    $regdest = FileSaveDialog( "Zielpfad wählen", @MyDocumentsDir, "Scripts (*.aut;*.au3)", 2, "RegScript.au3")
    ControlSetText("Reg2Au3 Converter", "", $Input_2, $regdest)
    ; option 2 = dialog remains until valid path/file selected
    If @error Then MsgBox(4096,"","Save cancelled.")
    Case $msg = $Button_OK
    Register()
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case Else
    ;;;
    EndSelect
    WEnd

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

    Exit

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

    ; Funktion .reg zu .au3
    Func Register()

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

    Local $file = FileOpen($regsource, 0)
    Local $RegScript = FileOpen($regdest, 2) ; which is similar to 2 + 8 (erase + create dir)
    Local $line, $keyname, $value, $value1, $value2

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

    ; Check if file opened for reading OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open .reg file.")
    Exit
    ElseIf $RegScript = -1 Then
    MsgBox(0, "Error", "Unable to open RegScript.au3.")
    Exit
    Else
    If $file = -1 And $RegScript = -1 Then
    MsgBox(0, "Error", "Unable to open any file.")
    Exit
    EndIf
    EndIf

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

    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    Local $sPattern, $vResult, $clip, $clip1

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

    $sPattern = "[][]"
    $vResult = StringRegExp($line, $sPattern, 1)
    If @extended Then
    $keyname = StringRegExpReplace($line, $sPattern, '"')
    FileWriteLine($RegScript, "RegWrite(" & $keyname & ")")
    EndIf
    ; Success. Pattern matched. $vResult matches @Extended
    $sPattern = "(@=)"
    $vResult = StringRegExp($line, $sPattern, 1)
    If @extended Then
    $clip = StringRegExpReplace($line, $sPattern, "")
    $value = StringRegExpReplace($clip, "\\\\", "\\", 0)
    FileWriteLine($RegScript, "RegWrite(" & $keyname & ', "", "REG_SZ", ' & $value & ")")
    EndIf
    $sPattern = '("=")'
    $vResult = StringRegExp($line, $sPattern, 1)
    If @extended Then
    $clip1 = StringRegExpReplace($line, "=", ', "REG_SZ", ')
    $value1 = StringRegExpReplace($clip1, "\\\\", "\\", 0)
    FileWriteLine($RegScript, "RegWrite(" & $keyname & "," & $value1 & ")")
    EndIf
    $sPattern = "(=dword:)"
    $vResult = StringRegExp($line, $sPattern, 1)
    If @extended Then
    $value2 = StringRegExpReplace($line, "=dword:", ', "REG_DWORD", "')
    FileWriteLine($RegScript, "RegWrite(" & $keyname & $value2 & '")')
    EndIf
    WEnd

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

    FileClose($file)
    FileClose($RegScript)

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

    EndFunc

    [/autoit]


    6 Mal editiert, zuletzt von Greenhorn (17. Januar 2007 um 18:59)

  • was soll denn unterm strich rauskommen???
    versteh das noch nicht ganz....ganz leer ist die datei nicht kommentare werden "übertragen"....

  • ich glaub mir ist grad ein geistesblitz gekommen..
    du willst ein script basteln welches eine reg datei einließt und dadraus ein autoit script erstellt...diese neu erstellte autoit script soll mit regwrite das so eben eingelesend reg dings wieder erstellen können richtig???
    hoff jetzt hab ichs kapiert....


    nocheinmal verständlich:
    reg datei(einlesen mit dem script) -> au3 script
    au3 script beinhaltet regwrite damit die regdatei wieder erstellt werden könnte

    RICHTIG??????????????
    wenn nicht :hammer:^^ ;)

  • O.K., ich möchte aus Registrierungsdateien (*.reg) die Registrierungsdaten auslesen und in ein Autoitscript einfügen..., als fertigen RegWrite(...) Befehl.

    Die Registry Einträge brauche ich um Proggies portable, also Stickware, zu gestalten.
    Daher möchte ich gerne die Registry Einträge in's AutoIt Script einbauen, damit ich keine .reg Dateien zum registrieren benutzen muss.

    In meinem Beispiel funzt es auch, aber bei anderen .reg Dateien wird halt nur 'ne leere .au3 Datei erzeugt.

    Nun weiß ich nicht wo der Fehler in meinem "Filter" ist, oder ob ich ihn anders strukturieren muss..., oder..., wie gesagt ich bin noch in der Lernphase mit AutoIt.

    Kann mir jemand 'nen Tip geben ob ich die richtige Richtung eingeschlagen habe, oder ob das ganze anders aufbauen sollte...


    Gruß

    Edit:
    snoozer

    Fast richtig, mein Bester..., bis zum Wiederherstellen der .reg Datei !

    Ich möchte die Registrierungseinträge nicht mit der .reg Datei vornehmen, sondern mit dem AutoIt Script !
    "Warum führt er die .reg Datei nicht einfach mit ShellExecute aus...?", werdet ihr euch vielleicht fragen !?
    Nun, ich möchte möglichst ohne Fremddateien auskommen, der Übersicht wegen, ...ist eigentlich auch erstmal nur 'n Versuch.

    Mein Problem ist jetzt, einen Filter zu programmieren der nur die benötigten Zeichen ins AutoIt Script kopiert..., oder eben die überflüssigen Zeichen aus dem String filtert.
    :rolleyes:


    Edit 2:
    Noch mal 'ne kleine Frage nebenbei..., wie erstelle ich einen Post hier im Board bei dem der Code versteckt ist und man ihn mit diesem Button öffnen kann ?


    @ th.meger Vielen Dank !

    Zitat

    Hi,

    in dem du

    [*Spoiler][*/Spoiler] ohne die * schreibst.

    So long,

    Mega


    4 Mal editiert, zuletzt von Greenhorn (17. Januar 2007 um 19:03)

  • Hi,
    das Problem liegt daran, dass wenn Du einen Export per Registry machst, dies im Unicodeformat gespeichert wird. FileRead kann aber nicht mit dem Unicode umgehen. Du müsstest die Files also zuerst konvertieren. Hier einmal mein Änderungsvorschlag:

    Spoiler anzeigen
    [autoit]

    ; GUI Reg2Au3 Converter
    Global $regsource
    Global $regdest


    #include <GuiConstants.au3>

    GuiCreate("Reg2Au3 Converter", 392, 316,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))

    $Group_1 = GuiCtrlCreateGroup("", 10, 20, 370, 150)
    $Label_1 = GuiCtrlCreateLabel("Quelldatei auswählen", 30, 50, 140, 20)
    $Input_1 = GuiCtrlCreateInput("", 30, 70, 200, 20)
    $Button_1 = GuiCtrlCreateButton("&Durchsuchen...", 260, 70, 100, 20)
    $Label_2 = GuiCtrlCreateLabel("Zieldatei auswählen", 30, 110, 120, 20)
    $Input_2 = GuiCtrlCreateInput("", 30, 130, 200, 20)
    $Button_2 = GuiCtrlCreateButton("&Durchsuchen...", 260, 130, 100, 20)

    $Button_OK = GuiCtrlCreateButton("&OK", 280, 280, 80, 20)

    GuiSetState()
    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = 0
    ContinueLoop
    Case $msg = $Button_1
    $regsource = FileOpenDialog("Registrierungsdatei wählen", @MyDocumentsDir, "(*.reg)", 1+4)
    ControlSetText("Reg2Au3 Converter", "", $Input_1, $regsource)
    Case $msg = $Button_2
    $regdest = FileSaveDialog( "Zielpfad wählen", @MyDocumentsDir, "Scripts (*.aut;*.au3)", 2, "RegScript.au3")
    ControlSetText("Reg2Au3 Converter", "", $Input_2, $regdest)
    ; option 2 = dialog remains until valid path/file selected
    If @error Then MsgBox(4096,"","Save cancelled.")
    Case $msg = $Button_OK
    Register()
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case Else
    ;;;
    EndSelect
    WEnd

    Exit

    ; Funktion .reg zu .au3
    Func Register()

    Local $file = FileOpen($regsource, 0)
    Local $RegScript = FileOpen($regdest, 2) ; which is similar to 2 + 8 (erase + create dir)
    Local $line, $keyname, $value, $value1, $value2


    ; Check if file opened for reading OK
    If $file = -1 Then
    MsgBox(0, "Error", "Unable to open .reg file.")
    Exit
    ElseIf $RegScript = -1 Then
    MsgBox(0, "Error", "Unable to open RegScript.au3.")
    Exit
    Else
    If $file = -1 And $RegScript = -1 Then
    MsgBox(0, "Error", "Unable to open any file.")
    Exit
    EndIf
    EndIf

    $RegASCI=StringReplace(FileGetShortName($regsource),".reg",".old")
    RunWait(@ComSpec & " /c type " & FileGetShortName($regsource) & ">" & $RegASCI,@MyDocumentsDir)
    FileCopy($RegASCI,$regsource,1)
    FileDelete($RegASCI)

    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    Local $sPattern, $vResult, $clip, $clip1

    $sPattern = "[][]"
    $vResult = StringRegExp($line, $sPattern, 1)
    If @extended Then
    $keyname = StringRegExpReplace($line, $sPattern, '"')
    FileWriteLine($RegScript, "RegWrite(" & $keyname & ")")
    EndIf
    ; Success. Pattern matched. $vResult matches @Extended
    $sPattern = "(@=)"
    $vResult = StringRegExp($line, $sPattern, 1)
    If @extended Then
    $clip = StringRegExpReplace($line, $sPattern, "")
    $value = StringRegExpReplace($clip, "\\\\", "\\", 0)
    FileWriteLine($RegScript, "RegWrite(" & $keyname & ', "", "REG_SZ", ' & $value & ")")
    EndIf
    $sPattern = '("=")'
    $vResult = StringRegExp($line, $sPattern, 1)
    If @extended Then
    $clip1 = StringRegExpReplace($line, "=", ', "REG_SZ", ')
    $value1 = StringRegExpReplace($clip1, "\\\\", "\\", 0)
    FileWriteLine($RegScript, "RegWrite(" & $keyname & "," & $value1 & ")")
    EndIf
    $sPattern = "(=dword:)"
    $vResult = StringRegExp($line, $sPattern, 1)
    If @extended Then
    $value2 = StringRegExpReplace($line, "=dword:", ', "REG_DWORD", "')
    FileWriteLine($RegScript, "RegWrite(" & $keyname & $value2 & '")')
    EndIf
    WEnd

    FileClose($file)
    FileClose($RegScript)



    EndFunc

    [/autoit]

    MfG
    eddy_erpel

    Einmal editiert, zuletzt von Eddy_Erpel (18. Januar 2007 um 10:58)

  • 1ooo Dank, Eddy ! Ich werd's gleich einmal ausprobieren... :D

    ...to be continued...


    Edit:
    Jau, das war's... :klatschen:, da wäre ich von allein glaube ich nie drauf gekommen :hammer: !

    Muchas Gracias compadre !


    Gruß

    p.s. sollte ich das Script einigermaßen Erträglich zum Laufen bringen, werde ich es noch mal hier reinstellen...


    2 Mal editiert, zuletzt von Greenhorn (18. Januar 2007 um 18:49)