RegWrite - Wie mehrere Keys gleichzeitig importieren?

  • Hallo Leute,

    habe mich mal aus Interesse hier angemeldet, weil ich mich mit AutoIt seit kurzer Zeit beschäftige. Doch wie das immer so am Anfang ist gibt es hier und da Probleme und Fragen.

    Also: Kurze Frage zur Funktion RegWrite. Ist es irgendwie möglich mehrere Schlüssel z.B. mit einer Schleife in die Registry zu schreiben? Versucht habe ich es, funktioniert hat es allerdings nicht. Anscheinend lässt diese Funktion als Parameter nur Strings zu. Lässt sich das irgendwie vereinfachen? Andauern RegWrite zu schreiben und jeden einzelnen Key einzufügen ist irgendwie umständlich?! Regedit wäre die einzige Möglichkeit die mir noch einfallen würde. Aber lässt sich das nicht komplett mit AutoIt lösen?

    Achso ...bevor ihr mich erschlagt. Die Suche hatte ich mal hier angeschmissen, konnte aber nichts richtig finden.

    Gruß Place-T

    Einmal editiert, zuletzt von Place-T (1. Mai 2007 um 17:23)

    • Offizieller Beitrag

    Hier ein Bsp.

    Spoiler anzeigen
    [autoit]

    Dim $arRegWrite[3][4]
    $arRegWrite[0][0] = "HKLM"
    $arRegWrite[0][1] = "VALUENAME_1"
    $arRegWrite[0][2] = "REG_SZ"
    $arRegWrite[0][3] = "VALUE_1"
    $arRegWrite[1][0] = "HKCU"
    $arRegWrite[1][1] = "VALUENAME_2"
    $arRegWrite[1][2] = "REG_SZ"
    $arRegWrite[1][3] = "VALUE_2"
    $arRegWrite[2][0] = "HKCU"
    $arRegWrite[2][1] = "VALUENAME_3"
    $arRegWrite[2][2] = "REG_SZ"
    $arRegWrite[2][3] = "VALUE_3"

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

    For $i = 0 To UBound($arRegWrite,1)
    _Write2Reg( $arRegWrite[$i][0], $arRegWrite[$i][1], $arRegWrite[$i][2], $arRegWrite[$i][3] )
    Next

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

    Func _Write2Reg($keyname, $valuename, $type, $value)
    RegWrite($keyname, $valuename, $type, $value)
    EndFunc

    [/autoit]
  • Also folgendes habe ich mal versucht:

    Spoiler anzeigen
    [autoit]

    $regKeys[9]
    $regKeys[0] = "HKEY_LOCAL_MACHINE\Schlüssel"
    $regKeys[1] = "HKEY_LOCAL_MACHINE\Schlüssel"
    $regKeys[2] = "HKEY_LOCAL_MACHINE\Schlüssel\Untereschlüssel"
    $regKeys[3] = "HKEY_LOCAL_MACHINE\Schlüssel"
    $regKeys[4] = "HKEY_LOCAL_MACHINE\Schlüssel"
    $regKeys[5] = "HKEY_LOCAL_MACHINE\Schlüssel"
    $regKeys[6] = "HKEY_LOCAL_MACHINE\Schlüssel"
    $regKeys[7] = "HKEY_LOCAL_MACHINE\Schlüssel"
    $regKeys[8] = "HKEY_LOCAL_MACHINE\Schlüssel\Noch ein Unterschlüssel"

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

    Dim $i = 0
    While $i <= 8
    RegWrite($regKeys[$i])
    $i = $i + 1
    WEnd

    [/autoit]

    Aber irgendwie funktioniert das nicht. Wo ist da mein Denkfehler?

    Einmal editiert, zuletzt von Place-T (1. Mai 2007 um 17:57)

  • Hm ... gut. Eine Frage hab ich allerdings noch. Wie würdet ihr am besten mehrere Schlüssel in die Registry schreiben? Mit dem Array ist das zwar alles schön und gut, wenn ich wenige Keys habe. Aber was wenn ich mehrere Dutzend habe? Alle von Hand so einzutragen ist auch sehr umständlich. Ich dachte deshalb schon an ein Skript welches mir eben dieses Array mit allen Schlüsseln erstellt. Aber so richtig weiß ich da auch nicht weiter! Oder villeicht eine Datei auslesen und von dieser in die Registry eintragen?

    Danke für eure Tipps und Hilfestellungen ;)

    • Offizieller Beitrag

    Hi!

    Mit _FileReadToArray() bringst du eine Datei einfach in ein Array (jede Zeile ein Element). Aber so ganz verstehe ich dein Problem noch nicht, muss ich sagen. Klar ist das etwas Aufwand, viele Schlüssel eintragen zu lassen, aber das macht man ja nicht jeden Tag oder was ist dein Ziel?

    peethebee

  • Gut. Jetzt funktioniert es. Mit dieser Methode ist es doch etwas bequemer.

    In vielen Einstiegslektüren zu veschiedenen Sprachen kam immer wieder vor, dass Programmierer faul seien. :D Und so eine frickelei ist mir zu blöd. :]
    Nichtmal $i++ gibt es in AutoIt ... :O Aber trotzdem ne tolle und nützliche Skriptsprache.

    Vielen Dank für eure Hilfe!

  • Hallo,

    ich muss mich doch nochmal melden. Irgendwie will es einfach nicht funktionieren.

    Die Funktion _FileReadToArray() liest zwar alle Einträge brav aus, aber irgendwie gibt es da jedesmal Probleme. Ich erstelle also dieses Array:

    [autoit]

    If Not _FileReadToArray("regKeys.txt", $ArrayKeys) Then
    $keyRead = False
    EndIf

    [/autoit]

    Nun will ich mit einer Schleife alle Werte dieses Arrays verwenden, um sie mit RegDelete zu löschen.

    [autoit]

    For $i = 0 To UBound($ArrayKeys)
    $regDelete = RegDelete($ArrayKeys[$i])
    Next

    [/autoit]

    Doch es passiert nix! Das Skript läuft durch und das wars. Jetzt habe ich mal veruscht von Hand ein Array zu erstellen und es dann mit einer weiteren Schleife zu machen.

    [autoit]

    Dim $key[7]
    $key[0] = "HKEY_CURRENT_USER\Software\Microsoft\LoeschMich"
    $key[1] = "HKEY_CURRENT_USER\Software\Microsoft\LoeschMich"
    $key[2] = "HKEY_CURRENT_USER\Software\Microsoft\LoeschMich"
    $key[3] = "HKEY_CURRENT_USER\Software\Microsoft\LoeschMich"
    $key[4] = "HKEY_CURRENT_USER\Software\MichAuch"
    $key[5] = "HKEY_CURRENT_USER\Software\Microsoft\LoeschMich"
    $key[6] = "HKEY_CURRENT_USER\Software\LoeschMich"

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

    For $i = 0 To UBound($key)
    $regDelete = RegDelete($key[$i])
    Next

    [/autoit]

    Doch auch da tut sich nichts. Außerdem erhalte ich bei beiden Varianten immer folgenden Fehler ...

    ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $regDelete = RegDelete($key[$i])
    $regDelete = RegDelete(^ ERROR

    Leider weiß ich nicht warum andauernd diese Meldung kommt. Die kann ich mir nicht so richtig erklären. Nunja, hoffe es weiß einer Rat!

    Gruß Place-T

    Einmal editiert, zuletzt von Place-T (4. Mai 2007 um 14:25)

  • Ihr seid ja schnell ... :) Also ich glaube in keinem anderen deutschsprachigem Board bekommt man so schnell Hilfe.

    Dass in [0] die Anzahl der eingelesenen Zeilen steht, habe ich gestern nach etwas Verwirrung herausgefunden. Hätte ja mal in der Funktionsreferenz erwähnt werden können. ;)

    Nur eine Erkärung bräuchte ich noch. Warum UBound(*) -1 ? Die Funktion ermittelt die Größe eines Arrays. Sagen wir mal 20. Und dann -1 ?

    Jetzt funktioniert es aber schonmal. Danke euch!