Loop (Registry)

Ruft die Inhalte eines bestimmten Registry-Subkeys einzeln ab.

Neue Syntax [v1.1.21+]

Loop, Reg, KeyName , Modus

Parameter

Reg

Das direkt geschriebene Wort Reg (nicht Groß-/Kleinschreibung-sensitiv). Dieser Parameter darf weder eine Variable noch ein Ausdruck sein.

KeyName

Der vollständige Name des Registry-Keys wie z. B. HKLM\Software oder %KompletterPfadDesKeys%.

Der Name muss entweder mit HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_USER, HKEY_CLASSES_ROOT oder HKEY_CURRENT_CONFIG beginnen (oder jeweils die Abkürzung, wie z. B. HKLM). Um Zugriff auf eine Remote-Registry zu erhalten, setzen Sie wie folgt den Computernamen und einen Doppelpunkt davor: \\workstation01:HKEY_LOCAL_MACHINE

Modus

Wenn dieser Parameter weggelassen wird oder leer ist, werden nur Werte einbezogen und Subkeys nicht rekursiv durchwandert. Ansonsten können Sie einen oder mehrere der folgenden Buchstaben angeben:

Alte Syntax

Veraltet: Diese Syntax ist nicht für neue Skripte empfohlen. Verwenden Sie stattdessen die neue Syntax.

Loop, RootKey , Key, SubkeysEinbeziehen?, Rekursiv?

Parameter

RootKey

Muss entweder HKEY_LOCAL_MACHINE (oder HKLM), HKEY_USERS (oder HKU), HKEY_CURRENT_USER (oder HKCU), HKEY_CLASSES_ROOT (oder HKCR) oder HKEY_CURRENT_CONFIG (oder HKCC) sein.

Um Zugriff auf eine Remote-Registry zu erhalten, setzen Sie wie folgt den Computernamen und einen Doppelpunkt davor: \\workstation01:HKEY_LOCAL_MACHINE

Key

Name des Keys (z. B. Software\BeliebigeAnwendung). Wenn dieser Parameter weggelassen wird oder leer ist, werden der Inhalt von RootKey abgerufen.

SubkeysEinbeziehen?

Wenn dieser Parameter weggelassen wird oder leer ist, wird standardmäßig 0 (nur Werte werden abgerufen) verwendet. Ansonsten können Sie eine der folgenden Ziffern angeben:

Rekursiv?

Wenn dieser Parameter weggelassen wird oder leer ist, wird standardmäßig 0 (Subkeys werden nicht rekursiv durchwandert) verwendet. Ansonsten können Sie eine der folgenden Ziffern angeben:

Bemerkungen

Eine Registry-Schleife ist nützlich, wenn Sie mehrere Werte und Subkeys einzeln abarbeiten wollen. Die Werte und Subkeys werden in umgekehrter Reihenfolge abgerufen (von unten nach oben), so dass RegDelete innerhalb der Schleife verwendet werden kann, ohne sie unterbrechen zu müssen.

Die folgenden Variablen sind nur in einer Registry-Schleife von Bedeutung. Wenn eine innere Registry-Schleife von einer äußeren Registry-Schleife umschlossen ist, wird der Eintrag von der innersten Schleife Vorrang haben:

Variable Beschreibung
A_LoopRegName Name des aktuell abgerufenen Eintrags, der entweder ein Wertname oder der Name eines Subkeys sein kann. Wertenamen, die im Registry-Editor als "(Standard)" dargestellt werden, werden abgerufen, sofern ihnen ein Wert zugewiesen wurde - A_LoopRegName selbst wird aber leer sein.
A_LoopRegType Typ des aktuell abgerufenen Eintrags, der eines der folgenden Wörter sein kann: KEY (der aktuell abgerufene Eintrag ist also ein Subkey, nicht ein Wert), REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ, REG_DWORD, REG_QWORD, REG_BINARY, REG_LINK, REG_RESOURCE_LIST, REG_FULL_RESOURCE_DESCRIPTOR, REG_RESOURCE_REQUIREMENTS_LIST, REG_DWORD_BIG_ENDIAN (wahrscheinlich selten in den meisten Betriebssystemen). Diese wird Variable leer sein, wenn der aktuell abgerufene Eintrag unbekannten Typs ist.
A_LoopRegKey Name des zurzeit verwendeten Rootkeys (HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_USER, HKEY_CLASSES_ROOT oder HKEY_CURRENT_CONFIG). Beim Zugriff auf eine Remote-Registry wird dieser Wert nicht den Namen des Computers enthalten.
A_LoopRegSubKey Name des aktuellen Subkeys. Der Inhalt dieser Variable ist identisch zum Key-Parameter, es sei denn, der Rekursiv-Parameter wird zum rekursiven Durchsuchen anderer Subkeys verwendet. In diesem Fall wird es der vollständige Pfad des aktuell abgerufenen Eintrags sein, ohne Rootkey. Zum Beispiel: Software\BeliebigeAnwendung\MeinSubKey
A_LoopRegTimeModified Der Zeitpunkt, wann der aktuelle Subkey oder einer seiner Werte zuletzt modifiziert wurde. YYYYMMDDHH24MISS-Format. Diese Variable wird leer sein, wenn der aktuell abgerufene Eintrag kein Subkey ist (also wenn A_LoopRegType nicht das Wort KEY ist).

Innerhalb einer Registry-Schleife können bei folgenden Befehlen die Parameter weggelassen werden, um zu kennzeichnen, dass der aktuell ermittelte Eintrag abgearbeitet werden soll:

Syntax Beschreibung
RegRead, AusgabeVar Liest den aktuellen Eintrag. Wenn der aktuelle Eintrag ein Key ist, wird ErrorLevel auf 1 gesetzt und AusgabeVar leer gemacht.
RegWrite, Wert
RegWrite
Schreibt in den aktuellen Eintrag. Lässt man Wert weg, wird der Eintrag je nach Typ auf 0 gesetzt oder leer gemacht. Wenn der aktuelle Eintrag ein Key ist, wird ErrorLevel auf 1 gesetzt und keine weiteren Aktionen durchgeführt.
RegDelete Löscht den aktuellen Eintrag. Wenn der aktuelle Eintrag ein Key ist, wird er gelöscht, zusammen mit seinen Subkeys und Werten.

Beim Zugriff auf eine Remote-Registry (über den RootKey- oder KeyName-Parameter, wie oben beschrieben) gelten folgende Hinweise:

Auf der Loop-Seite finden Sie Informationen zu Blöcken, Break, Continue und A_Index (sie können in jeder Schleifenvariante verwendet werden).

Loop, Break, Continue, Blöcke, RegRead, RegWrite, RegDelete, SetRegView

Beispiele

Löscht den Link-Verlauf des Internet Explorer.

Loop, HKEY_CURRENT_USER, Software\Microsoft\Internet Explorer\TypedURLs
    RegDelete

Ein funktionierendes Testskript.

Loop, Reg, HKEY_CURRENT_USER\Software\Microsoft\Windows, KVR
{
    if (A_LoopRegType = "key")
        Wert := ""
    else
    {
        RegRead, Wert
        if ErrorLevel
            Wert := "*error*"
    }
    MsgBox, 4, , %A_LoopRegType% = %Wert% (%A_LoopRegType%)`n`nWeiter?
    IfMsgBox, NO, break
}

Sucht rekursiv in der gesamten Registry nach bestimmten Werten.

SetBatchLines -1  ; Führt die Operation mit maximaler Geschwindigkeit aus.
RegSuchziel := "Notepad"  ; Teilt der Subroutine mit, was gesucht werden soll.
Gosub, RegSuche
return

RegSuche:
RegSucheFortfahren := true
Loop, Reg, HKEY_LOCAL_MACHINE, KVR
{
    Gosub, RegEintragUntersuchen
    if not RegSucheFortfahren ; Teilt uns mit, dass sie gestoppt werden soll.
        return
}
Loop, Reg, HKEY_USERS, KVR
{
    Gosub, RegEintragUntersuchen
    if not RegSucheFortfahren ; Teilt uns mit, dass sie gestoppt werden soll.
        return
}
Loop, Reg, HKEY_CURRENT_CONFIG, KVR
{
    Gosub, RegEintragUntersuchen
    if not RegSucheFortfahren ; Teilt uns mit, dass sie gestoppt werden soll.
        return
}
; Hinweis: Ich glaube, dass HKEY_CURRENT_USER nicht durchsucht werden muss,
; wenn HKEY_USERS durchsucht wird.  Das gleiche könnte auch für HKEY_CLASSES_ROOT gelten,
; wenn HKEY_LOCAL_MACHINE durchsucht wird.
return

RegEintragUntersuchen:
if (A_LoopRegType = "KEY")  ; Entfernen Sie diese zwei Zeilen, wenn Sie die Key-Namen auch überprüfen lassen wollen.
    return
RegRead, RegWert
if ErrorLevel
    return
if InStr(RegWert, RegSuchziel)
{
    MsgBox, 4, , Der folgende Treffer wurde gefunden:`n%A_LoopRegKey%\%A_LoopRegSubKey%\%A_LoopRegName%`nWert = %RegWert%`n`nWeiter?
    IfMsgBox, No
        RegSucheFortfahren := false  ; Teilt unserem Aufrufer mit, die Suche zu stoppen.
}
return