Loop (Registry)

Ruft die Inhalte eines bestimmten Registry-Unterschlüssels nacheinander ab.

Neue Syntax [v1.1.21+]

Loop, Reg, SchlüsselName , Modus

Parameter

Reg

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

SchlüsselName

Der vollständige Name des Registry-Schlüssels, z.B. HKLM\Software\BeliebigeApp.

Der Name muss entweder mit 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) beginnen.

Um auf eine Remote-Registry zuzugreifen, stellen Sie den Computernamen und einen Doppelpunkt (oder in [v1.1.21+] einen umgekehrten Schrägstrich) voran, z.B. \\workstation01\HKLM.

Modus

Wenn leer oder weggelassen, werden nur Werte einbezogen und Unterschlüssel nicht rekursiv durchwandert. Andernfalls geben Sie einen oder mehrere der folgenden Buchstaben an:

Alte Syntax

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

Loop, RootSchlüssel , Schlüssel, UnterschlüsselEinbeziehen, Rekursiv

Parameter

RootSchlüssel

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 auf eine Remote-Registry zuzugreifen, stellen Sie den Computernamen und einen Doppelpunkt (oder in [v1.1.21+] einen umgekehrten Schrägstrich) voran, z.B. \\workstation01\HKLM.

Key

Name des Schlüssels, z.B. Software\BeliebigeApp. Wenn leer oder weggelassen, werden die Inhalte von RootSchlüssel abgerufen.

UnterschlüsselEinbeziehen

Wenn leer oder weggelassen, wird standardmäßig 0 verwendet. Andernfalls geben Sie eine der folgenden Ziffern an:

Rekursiv

Wenn leer oder weggelassen, wird standardmäßig 0 verwendet. Andernfalls geben Sie eine der folgenden Ziffern an:

Bemerkungen

Eine Registry-Schleife ist nützlich, wenn mehrere Werte oder Unterschlüssel in der Registry nacheinander abgearbeitet werden sollen. Die Werte und Unterschlüssel werden in umgekehrter Reihenfolge (von unten nach oben) abgerufen, so dass RegDelete innerhalb der Schleife verwendet werden kann, ohne die Schleife zu unterbrechen.

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

Variable Beschreibung
A_LoopRegName Name des aktuell abgerufenen Elements, was entweder der Name eines Wertes oder der Name eines Unterschlüssels sein kann. Wertenamen, die im Registry-Editor als "(Standard)" dargestellt werden, werden abgerufen, wenn ihnen ein Wert zugewiesen wurde - A_LoopRegName selbst wird aber leer sein.
A_LoopRegType Typ des aktuell abgerufenen Elements, was eines der folgenden Wörter sein kann: KEY (d.h. das aktuell abgerufene Element ist ein Unterschlüssel, kein 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 (kommt eher selten vor). Diese Variable ist leer, wenn das aktuell abgerufene Element von unbekanntem Typ ist.
A_LoopRegKey Name des Root-Schlüssels, auf den gerade zugegriffen wird (HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_USER, HKEY_CLASSES_ROOT oder HKEY_CURRENT_CONFIG). Bei einem Remote-Registry-Zugriff wird dieser Wert nicht den Computernamen enthalten.
A_LoopRegSubKey Name des aktuellen Unterschlüssels. Dies entspricht dem Schlüssel-Parameter, es sei denn, der Rekursiv-Parameter wird zum rekursiven Durchwandern anderer Unterschlüssel verwendet, dann wird es der vollständige Pfad des aktuell abgerufenen Elements ohne Root-Schlüssel sein. Zum Beispiel: Software\BeliebigeApp\MeinUnterschlüssel
A_LoopRegTimeModified Der Zeitpunkt, wann der aktuelle Unterschlüssel oder einer seiner Werte zuletzt geändert wurde. YYYYMMDDHH24MISS-Format. Diese Variable ist leer, wenn das aktuell abgerufene Element kein Unterschlüssel ist (also wenn A_LoopRegType nicht das Wort KEY ist).

Innerhalb einer Registry-Schleife können die folgenden Befehle in vereinfachter Form verwendet werden, um anzugeben, dass sie mit dem aktuell abgerufenen Element arbeiten sollen:

Syntax Beschreibung
RegRead, AusgabeVar Liest das aktuelle Element. Wenn das aktuelle Element ein Schlüssel ist, wird ErrorLevel auf 1 gesetzt und AusgabeVar leer gemacht.
RegWrite, Wert
RegWrite
Schreibt in das aktuelle Element. Wenn Wert weggelassen wird, wird das Element je nach Typ auf 0 gesetzt oder leer gemacht. Wenn das aktuelle Element ein Schlüssel ist, wird ErrorLevel auf 1 gesetzt und keine weitere Aktion ausgeführt.
RegDelete Löscht das aktuelle Element. Wenn das aktuelle Element ein Schlüssel ist, wird dieser zusammen mit seinen Unterschlüsseln und Werten gelöscht.

Beim Zugriff auf eine Remote-Registry (über den RootSchlüssel- oder SchlüsselName-Parameter, wie oben beschrieben) müssen Sie Folgendes beachten:

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

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

Beispiele

Neue Syntax vs. alte Syntax.

Trotz unterschiedlicher Syntax haben beide Beispiele den gleichen Effekt: Sie rufen die Inhalte eines bestimmten Registry-Unterschlüssels nacheinander ab.

Loop, Reg, HKEY_LOCAL_MACHINE\Software\BeliebigeApp
    MsgBox %A_LoopRegName%
Loop, HKEY_LOCAL_MACHINE, Software\BeliebigeApp
    MsgBox %A_LoopRegName%

Löscht den Link-Verlauf des Internet Explorers.

Loop, Reg, 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  ; Die Operation so schnell wie möglich ausführen.
RegSucheZiel := "Notepad"  ; Der Subroutine mitteilen, was gesucht werden soll.
Gosub, RegSuche
return

RegSuche:
RegSucheFortfahren := true
Loop, Reg, HKEY_LOCAL_MACHINE, KVR
{
    Gosub, RegElementPrüfen
    if not RegSucheFortfahren ; Suche stoppen.
        return
}
Loop, Reg, HKEY_USERS, KVR
{
    Gosub, RegElementPrüfen
    if not RegSucheFortfahren ; Suche stoppen.
        return
}
Loop, Reg, HKEY_CURRENT_CONFIG, KVR
{
    Gosub, RegElementPrüfen
    if not RegSucheFortfahren ; Suche stoppen.
        return
}
; Hinweis: Ich glaube nicht, dass HKEY_CURRENT_USER durchsucht werden muss,
; wenn HKEY_USERS durchsucht wird. Dasselbe könnte auch für HKEY_CLASSES_ROOT
; gelten, wenn HKEY_LOCAL_MACHINE durchsucht wird.
return

RegElementPrüfen:
if (A_LoopRegType = "KEY")  ; Dies entfernen, um auch Schlüsselnamen zu prüfen.
    return
RegRead, RegWert
if ErrorLevel
    return
if InStr(RegWert, RegSucheZiel)
{
    MsgBox, 4, , Es wurde Folgendes gefunden:`n%A_LoopRegKey%\%A_LoopRegSubKey%\%A_LoopRegName%`nWert = %RegWert%`n`nWeiter?
    IfMsgBox, No
        RegSucheFortfahren := false  ; Aufrufer mitteilen, die Suche zu stoppen.
}
return