Gezielte Regedit-Werte auslesen

  • Zweck: Man weiß, dass ein oder mehrere Schlüssel Werte enthalten, die man auslesen möchte. Das Problem ist aber, dass jeder Schlüssel einmalig ist, man kennt nur seine Struktur.
    Z.B. Will ich von Outlook Express den Speicherort der Mails erfahren. Dieser befindet sich unter
    HKEY_CURRENT_USER\Identities\{04353495-3245234ABS-435}\software\microsoft\outlook express\5.0\store root
    Um alle Identitäten herauszubekommen, verwendet man nun einfach

    Code
    _regfilter('HKEY_CURRENT_USER\Identities', '{*.?}')


    1. Parameter: Schlüssel, von wo aus gesucht werden soll
    2. Parameter: Regulärer Suchausdruck
    3. Parameter (optional): Maximale Trefferzahl (default 1)
    4. Parameter (optional): Menge an möglicher unwichtiger Schlüssel (default 0)
    Es wird als Array zurückgegeben, wobei das erste Index die Anzahl der Treffer enthält. Sollte der Schlüssel ungültig sein, so wird @error auf 1 gesetzt.

    Code
    Func _regfilter($current_key, $regex, $maxAnz = 1, $joker_key = 0) $joker_key += $maxAnz Local $valid_key[$maxAnz+1], $j = 1 RegRead($current_key, '') ; Schlüsselexistenzprüfung If @error <> -1 Then Return SetError(1) For $i = 1 To $joker_key If StringRegExp(RegEnumKey($current_key, $i), $regex) And $j <= $maxAnz Then ; Schlüssel gefunden und Begrenzung auf maxAnz $valid_key[$j] = RegEnumKey($current_key, $i) $j += 1 EndIfNext$valid_key[0] = $j-1 ; Menge gültige Schlüssel ReDim $valid_key[$j] Return $valid_keyEndFunc


    Have fun :rock:

    2 Mal editiert, zuletzt von mille86 (10. Oktober 2009 um 06:39)

  • [autoit]

    Func _regfilter($current_key, $regex, $maxAnz = 1, $joker_key = 0)
    $joker_key += $maxAnz
    Local $valid_key[$maxAnz + 1], $j = 1
    RegRead($current_key, '') ; Schlüsselexistenzprüfung
    If @error <> -1 Then Return SetError(1)
    For $i = 1 To $joker_key
    If StringRegExp(RegEnumKey($current_key, $i), $regex) And $j <= $maxAnz Then ; Schlüssel gefunden und Begrenzung auf maxAnz
    $valid_key[$j] = RegEnumKey($current_key, $i)
    $j += 1
    EndIf
    Next
    $valid_key[0] = $j - 1 ; Menge gültige Schlüssel
    ReDim $valid_key[$j]
    Return $valid_key
    EndFunc ;==>_regfilter

    [/autoit]
  • Danke understood, jetzt weiß ich auch wie es mit der Syntax geht.
    EDIT: Hier noch eine optimierte Version

    [autoit]

    Func _findkey($current_key, $regex, $maxAnz = 1, $joker_key = 0, $next_key = '')
    RegRead($current_key, '') ; Schlüsselexistenzprüfung
    If @error <> -1 Then Return SetError(1)
    $joker_key += $maxAnz
    Local $valid_key[$maxAnz + 1], $j = 1
    For $i = 1 To $joker_key
    If StringRegExp(RegEnumKey($current_key, $i), $regex) And $j <= $maxAnz Then ; Schlüssel gefunden und Begrenzung auf maxAnz
    $valid_key[$j] = $current_key & '\' & RegEnumKey($current_key, $i) & '\' & $next_key ; !unsauber!
    $j += 1
    EndIf
    Next
    $valid_key[0] = $j - 1 ; Menge gültige Schlüssel
    ReDim $valid_key[$j]
    Return $valid_key
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von mille86 (11. Oktober 2009 um 23:04)