Werte in die Registratur aus einer *.ini schreiben

  • Hallo,


    auslesen aus der Registratur geht ja schon nur wie bekomme ich die Werte auch wieder eingelesen ?
    Ändere die Werte in der Registratur über die " VB and VBA Program_User_*** ".
    Wenn ich fertig bin möchte ich aber wieder die originalen Werte in die Registratur zurückschreiben
    die ich vorher unter " VB and VBA Program_*** " in der ini gesichert habe.

    Des weiteren würde ich gerne die lästigen " = " in der ini wegbekommen die wohl dadurch entstehen
    das ich von 0 to 100 die Schleife laufen lasse. Habe aber auch noch keine Funktion gefunden die mir die Zeilen
    in der Registratur angibt. So etwas in der Richtung wie _FileCountLines.

    Spoiler anzeigen
    [autoit]

    If Not FileExists ("C:\Temp\test.ini") Then
    For $i = 0 to 100
    $var = RegEnumVal("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\Einstellungen", $i)
    $b = RegRead ( "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\Einstellungen", $var)
    IniWrite("C:\Temp\test.ini", "VB and VBA Program_Einstellungen", $var, $b)
    IniWrite("C:\Temp\test.ini", "VB and VBA Program_User_Einstellungen", $var, $b)
    If @error <> 0 Then ExitLoop
    Next
    For $i = 0 to 100
    $var = RegEnumVal("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\frmvideospy", $i)
    $b = RegRead ( "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\frmvideospy", $var)
    IniWrite("C:\Temp\test.ini", "VB and VBA Program_frmvideospy", $var, $b)
    IniWrite("C:\Temp\test.ini", "VB and VBA Program_User_frmvideospy", $var, $b)
    If @error <> 0 Then ExitLoop
    Next
    For $i = 0 to 100
    $var = RegEnumVal("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\frmwebcam", $i)
    $b = RegRead ( "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\frmwebcam", $var)
    IniWrite("C:\Temp\test.ini", "VB and VBA Program_frmwebcam", $var, $b)
    IniWrite("C:\Temp\test.ini", "VB and VBA Program_User_frmwebcam", $var, $b)
    If @error <> 0 Then ExitLoop
    Next
    EndIf

    [/autoit]


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

    Einmal editiert, zuletzt von oh-ha (3. Dezember 2011 um 08:55)

  • Moin,

    wegen der leeren Einträge in die INI-Datei: Die Fehlerabfrage in der Schleife muss gleich nach RegEnumVal erfolgen. ;)

    Was das zurückschreiben in die Registrierung angeht, einfach die Werte aus der INI wieder einlesen und mit RegWrite zurück schreiben.
    Oder Du baust die INI wie eine REG-Datei auf. Ist letztendlich auch nur eine INI.


    Gruß
    Greenhorn


  • Moin Greenhorn,

    habe mal die Fehlerabfrage drunter gesetzt nur erstellt der mir dann gar keine test. ini mehr.

    [autoit]

    If Not FileExists ("C:\Temp\test.ini") Then
    For $i = 0 to 100
    $var = RegEnumVal("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\Einstellungen", $i)
    If @error <> 0 Then ExitLoop
    $b = RegRead ( "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\Einstellungen", $var)
    IniWrite("C:\Temp\test.ini", "VB and VBA Program_Einstellungen", $var, $b)
    IniWrite("C:\Temp\test.ini", "VB and VBA Program_User_Einstellungen", $var, $b)
    Next
    For $i = 0 to 100
    $var = RegEnumVal("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\frmvideospy", $i)
    If @error <> 0 Then ExitLoop
    $b = RegRead ( "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\frmvideospy", $var)
    IniWrite("C:\Temp\test.ini", "VB and VBA Program_frmvideospy", $var, $b)
    IniWrite("C:\Temp\test.ini", "VB and VBA Program_User_frmvideospy", $var, $b)
    Next
    For $i = 0 to 100
    $var = RegEnumVal("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\frmwebcam", $i)
    If @error <> 0 Then ExitLoop
    $b = RegRead ( "HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\frmwebcam", $var)
    IniWrite("C:\Temp\test.ini", "VB and VBA Program_frmwebcam", $var, $b)
    IniWrite("C:\Temp\test.ini", "VB and VBA Program_User_frmwebcam", $var, $b)
    Next
    EndIf

    [/autoit]


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Lol das war es, danke dir.

    Was das andere angeht mit zurückschreiben, da bin ich noch am basteln.
    Versuche das mal in ein Array einzulesen und dann wieder in die Reg.


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

  • Hmmm das mit den zurückschreiben geht auch nicht so wie ich es mir vorstelle.

    geht nicht da mir der type fehlt

    [autoit]

    #include <Array.au3>
    $zurueck = IniReadSection("C:\Temp\test.ini", "VB and VBA Program_frmvideospy")
    For $i = 1 to $zurueck[0][0]-1
    RegWrite("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\frmvideospy", $zurueck[$i][0], $zurueck[$i][1])
    ;MsgBox(0,"",$zurueck[$i][0] & " " & "Wert = " & $zurueck[$i][1])
    If @error <> 0 Then ExitLoop
    Next

    [/autoit]


    .
    Das geht wiederum nur habe ich nicht den Type als Variable, der wird ja auch nicht von " RegRead " ausgelesen.

    [autoit]

    #include <Array.au3>
    $zurueck = IniReadSection("C:\Temp\test.ini", "VB and VBA Program_frmvideospy")
    For $i = 1 to $zurueck[0][0]-1
    RegWrite("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\frmvideospy", $zurueck[$i][0], "REG_SZ", $zurueck[$i][1])
    ;MsgBox(0,"",$zurueck[$i][0] & " " & "Wert = " & $zurueck[$i][1])
    If @error <> 0 Then ExitLoop
    Next

    [/autoit]


    Lasse ich, wie in der Hilfe angegeben den Type leer geht es auch nicht, bekomme ich eine Fehlermeldung

    [autoit]

    #include <Array.au3>
    $zurueck = IniReadSection("C:\Temp\test.ini", "VB and VBA Program_frmvideospy")
    For $i = 1 to $zurueck[0][0]-1
    RegWrite("HKEY_CURRENT_USER\Software\VB and VBA Program Settings\camspy\frmvideospy", $zurueck[$i][0], "", $zurueck[$i][1])
    ;MsgBox(0,"",$zurueck[$i][0] & " " & "Wert = " & $zurueck[$i][1])
    If @error <> 0 Then ExitLoop
    Next

    [/autoit]


    ERROR: RegWrite() called with illegal argument 3: ""

    Hat einer eine Idee wie man das machen könnte ?


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

    2 Mal editiert, zuletzt von oh-ha (2. Dezember 2011 um 11:33)

  • Du musst dir halt beim auslesen die Typen mit merken und speichern,

    Wenn du mal in die Hilfe schaust zu RegRead wirst du sehen das er in @EXTENDED den Typ zurückgibt,

    [autoit]

    ; Reg Value type Constants
    Global Const $REG_NONE = 0
    Global Const $REG_SZ = 1
    Global Const $REG_EXPAND_SZ = 2
    Global Const $REG_BINARY = 3
    Global Const $REG_DWORD = 4
    Global Const $REG_DWORD_BIG_ENDIAN = 5
    Global Const $REG_LINK = 6
    Global Const $REG_MULTI_SZ = 7
    Global Const $REG_RESOURCE_LIST = 8
    Global Const $REG_FULL_RESOURCE_DESCRIPTOR = 9
    Global Const $REG_RESOURCE_REQUIREMENTS_LIST = 10

    [/autoit]
  • Hallo Blume,

    hatte ich gemacht nur kamen dann falsche angaben dabei raus was mich auch ein wenig gewundert hatte.
    mit der -1 lief es korrekt komischer weise.

    Versuche da jetzt eh einen anderen Ansatz. Mache mir eine Art eigene *.ini wie es mir ja auch schon vorgeschlagen worden ist.
    Schaut derzeitig so aus:

    [autoit]

    $datei = FileOpen("test.txt",10)
    For $i = 1 to 100
    $var = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", $i)
    $b = RegRead ( "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", $var)
    If @EXTENDED = 0 Then
    $c = "REG_NONE"
    EndIf

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

    If @EXTENDED = 1 Then
    $c = "REG_SZ"
    EndIf

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

    If @EXTENDED = 2 Then
    $c = "REG_EXPAND_SZ"
    EndIf

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

    If @EXTENDED = 3 Then
    $c = "REG_BINARY"
    EndIf
    If @EXTENDED = 4 Then
    $c = "REG_DWORD"
    EndIf

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

    If @EXTENDED = 5 Then
    $c = "REG_DWORD_BIG_ENDIAN"
    EndIf

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

    If @EXTENDED = 6 Then
    $c = "REG_LINK"
    EndIf

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

    If @EXTENDED = 7 Then
    $c = "REG_MULTI_SZ"
    EndIf
    If @EXTENDED = 8 Then
    $c = "REG_RESOURCE_LIST"
    EndIf

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

    If @EXTENDED = 9 Then
    $c = "REG_FULL_RESOURCE_DESCRIPTOR"
    EndIf
    If @EXTENDED = 10 Then
    $c = "REG_RESOURCE_REQUIREMENTS_LIST"
    EndIf
    FileWrite($datei,"[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]" & @CRLF & "Name = " & $var & ";" & " Type = " & $c & "; " & "Wert = " & $b & @CRLF)
    If @error <> 0 Then ExitLoop
    Next
    FileClose($datei)

    [/autoit]


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

    Einmal editiert, zuletzt von oh-ha (2. Dezember 2011 um 14:18)

  • Arrg sorry BLinz habe ich nicht mitbekommen, musst du wohl geschrieben haben wo ich auch dran war.

    Jo hatte ich in der Hilfe auch gefunden, spät aber immerhin.
    Ist aber schon etwas verwunderlich das man bei RegWrite den Type angeben muss den RegRead nicht direkt ausgibt.

    Werde mir das mit der Kommandozeile mal anschauen, nur habe ich keine Ahnung ob es auch auf 64bit Systemen geht.


    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit

    Einmal editiert, zuletzt von oh-ha (2. Dezember 2011 um 14:32)

  • Kürzer (und schneller) ist es wenn du bei solchen "Massenentscheidungen" Select oder Switch nimmst:

    Spoiler anzeigen
    [autoit]

    $datei = FileOpen("test.txt",10)
    For $i = 1 to 100
    $var = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", $i)
    $b = RegRead ( "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", $var)
    Switch @EXTENDED
    Case 0
    $c = "REG_NONE"
    Case 1
    $c = "REG_SZ"
    Case 2
    $c = "REG_EXPAND_SZ"
    Case 3
    $c = "REG_BINARY"
    Case 4
    $c = "REG_DWORD"
    Case 5
    $c = "REG_DWORD_BIG_ENDIAN"
    Case 6
    $c = "REG_LINK"
    Case 7
    $c = "REG_MULTI_SZ"
    Case 8
    $c = "REG_RESOURCE_LIST"
    Case 9
    $c = "REG_FULL_RESOURCE_DESCRIPTOR"
    Case 10
    $c = "REG_RESOURCE_REQUIREMENTS_LIST"
    EndSwitch
    FileWrite($datei,"[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]" & @CRLF & "Name = " & $var & ";" & " Type = " & $c & "; " & "Wert = " & $b & @CRLF)
    If @error <> 0 Then ExitLoop
    Next
    FileClose($datei)

    [/autoit]

    Schreibt sich meist auch leichter

  • Uuuups habe ich doch glatt vergessen meine Lösung zu Posten, sorry soll nicht wieder vorkommen.

    Lese jetzt, bevor ich meine Werte in die Reg. schreibe, den @EXTENDED aus und übernehme diesen dann für das RegWrite.
    Warum man das nicht in RegRead direkt abrufen kann oder in RegWrite das weglassen kann verstehe ich aber immer noch nicht so wirklich.

    Spoiler anzeigen
    [autoit]

    $var = IniReadSection("C:\Temp\test.ini", "Internet Explorer_Main")
    If @error Then
    MsgBox(4096, "", "Es ist ein Fehler aufgetreten. Warscheinlich keine INI Datei vorhanden.")
    Else
    For $i = 1 To $var[0][0] -1
    $lesen = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main", $var[$i][0])
    Switch @EXTENDED
    Case 0
    $c = "REG_NONE"
    Case 1
    $c = "REG_SZ"
    Case 2
    $c = "REG_EXPAND_SZ"
    Case 3
    $c = "REG_BINARY"
    Case 4
    $c = "REG_DWORD"
    Case 5
    $c = "REG_DWORD_BIG_ENDIAN"
    Case 6
    $c = "REG_LINK"
    Case 7
    $c = "REG_MULTI_SZ"
    Case 8
    $c = "REG_RESOURCE_LIST"
    Case 9
    $c = "REG_FULL_RESOURCE_DESCRIPTOR"
    Case 10
    $c = "REG_RESOURCE_REQUIREMENTS_LIST"
    EndSwitch
    MsgBox(0,"blabla",$i & " " &$var[$i][0] & " " & " " & " Type = " & $c)
    RegWrite ("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main" ,$var[$i][0], $c, $var[$i][1])
    Next
    EndIf

    [/autoit]


    Auch hier musste ich wieder die " -1 " dazu nehmen, warum auch immer ???

    mfg
    oh-ha

    Es gibt drei Wahrheiten: deine Wahrheit, meine Wahrheit und die Wahrheit