Registry auslesen, und schreiben

  • Hallo zusammen

    Ich muss in Excel ein Addin hinzufügen, auf mehreren PCs, und versuche das mit Auto-IT zu lösen. Das problem ist, das auf den PCs eine unterschiedliche Anzahl von Addins installiert ist, so dass ich mal mit OPEN bis zu OPEN12 rechnen muss.

    Anbei der Registry-Ausschnitt

    Registryauslesen,

    [HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options]
    "OPEN"="/R \"C:\\Program Files\\Microsoft Office\\OFFICE11\\Library\\Analysis\\ANALYS32.XLL\""
    "OPEN1"="/A \"addIn.ExcelWrapper.DataFunctions\""
    "OPEN2"="/A \"AddIn.ExcelWrapper.MathFunctions\""

    In diesem Beispiel wäre es OPEN1 und OPEN2, welches ich schreiben muss, weil es schon ein OPEN gibt.

    Ganz stumpfsinnig könnte ich nun mit

    If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options", "OPEN")
    Then
    If If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options", "OPEN1")
    Then


    oder so ähnlich vorgehen, aber elegant sieht anders aus :huh:

    Ich hoffe jemand findet schnell Zeit für ein paar Zeilen.

  • Hab aktuell kein Excel, aber lt deiner Beschreibung sollte das so funktionieren

    [autoit]

    For $i = 0 to 100
    If $i=0 then $i=""
    If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options", "OPEN"&$i)="" then
    msgbox(0,0,"Open"&$i&" ist frei für den nächsten Wert!") ;auskommentieren wenn es funktioniert
    ;hier das plugin installieren
    endif
    next

    [/autoit]
  • [autoit]

    For $i = 0 to 12 Step +1
    If $i = 0 then
    $i = ""
    EndIf

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

    If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options", "OPEN"&$i)
    Then

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

    ;Deine Anweisung

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

    EndIf
    Next

    [/autoit]

    Vielleicht? :D


    //Edit: Zu langsam Mist ^^

  • Herzlichen Dank euch beiden, diese Zeilen hab ich übernommen :)

    Wie könnte ich noch einbauen, dass er abbricht wenn ExcelWrapper in diesen Keys schon vorkommt?

    [autoit]

    For $i = 1 To 100
    $var = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options\", $i)
    If @error <> 0 Then ExitLoop
    If StringInStr($var, "ExcelWrapper ") <> 0 Then
    MsgBox(4096, "Wert gefunden #" & $i & " auskommentieren solbalds läuft", $var)
    EndIf
    Next

    [/autoit]

    Ist irgendwie falsch, weil nur die Keys, aber nicht die Werte rauskommen 8| ?(

    Einmal editiert, zuletzt von Surfy (3. Dezember 2009 um 14:55)

  • Hi,

    If StringInStr(RegRead ("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options", $var), "ExcelWrapper ") <> 0

    ;-))
    Stefan

  • Spoiler anzeigen
    [autoit]

    For $i = 1 To 100
    $var = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options\", "OPEN"&$i)
    ; If @error <> 0 Then ExitLoop
    If StringInStr(RegRead ("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options", $var), "ExcelWrapper") <> 0 Then
    MsgBox(4096, "Value Name #" & $i & " under in AutoIt3 key", $var)
    EndIf
    Next

    $freierwert=0
    For $i = 0 to 100
    If $i=0 then $i=""
    If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options", "OPEN"&$i)="" then
    msgbox(0,0,"Open"&$i&" ist frei für den nächsten Wert!") ;auskommentieren wenn es funktioniert
    $freierwert="Open"&$i
    ;hier das plugin installieren
    endif
    next

    [/autoit]


    Leider geht es so noch nicht :pinch:

  • Mach mal statt

    [autoit]

    $var = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options\", "OPEN"&$i)

    [/autoit][autoit]

    $var = RegEnumVal("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options\", $i)

    [/autoit]


    Und lies dir die Hilfe zu RegEnumVal durch...

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Hi,
    was ich mich gerade frage, was passiert mit deinstallierten Addins? Ich glaube kaum, daß die Addins die kompletten Einträge umschreiben wenn mittendrin eines der Addins deinstalliert wird. D.h. es könnten "Lücken" auftreten. Eigentlich kein Problem, aber da war ja noch die Frage nach dem ExcelWrapper.
    Also müsste es entweder zwei getrennte Schleifen geben, eine scannt nach dem ExcelWrapper und die andere danach nach der nächste "Lücke" oder man merkt sich die nächste Lücke und setzt ein Wrapperflag, daß ganz zum Schluß ausgewertet wird.

    [autoit]

    $openflag=-1
    $wrapperflag=-1

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

    For $i = 0 to 100 ;alle einträge prüfen
    If $i=0 then $i=""
    If RegRead("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options", "OPEN"&$i)="" then
    ;msgbox(0,0,"Open"&$i&" ist frei für den nächsten Wert!") ;auskommentieren wenn es funktioniert
    if $openflag=-1 then $openflag=$i ;die erste "Fundstelle" merken
    endif
    if StringInStr(Regenumval ("HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Options", $i), "ExcelWrapper ") <> 0 then $wrapperflag=1
    next

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

    if $wrapperflag=-1 then ;kei Wrapper vorhanden, dann Addin installieren an die erste gefundene "Lücke"
    ;installiere ADDIN mit Nummer $openflag
    msgbox(0,"Installiere Addin nach:","Open"&$openflag)
    Else
    consolewrite ("ExcelWrapper vorhanden!"& @CRLF )
    endif

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