检索指定的注册表子键的内容, 每次一个项目.
Loop Reg KeyName , Mode
类型: 字符串
注册表键的全名, 例如 "HKLM\Software\SomeApplication".
"HKLM\Software\SomeApplication"
必须以 HKEY_LOCAL_MACHINE(或 HKLM), HKEY_USERS(或 HKLM), HKEY_CURRENT_USER(或 HKLM), HKEY_CLASSES_ROOT(或 HKLM) 或 HKEY_CURRENT_CONFIG(或 HKLM) 开始.
要访问远程注册表, 请在前面加上计算机名和反斜杠, 例如 "\\workstation01\HKLM".
"\\workstation01\HKLM"
如果为空或省略, 则只包含值且不递归子键. 否则, 指定一个或多个下列字母:
当您想对注册表值或子键集合中的项逐个进行操作时, 注册表循环很有用. 值和子键以逆序获取(自下而上), 这样在循环中使用 RegDelete 和 RegDeleteKey 不会扰乱循环自身.
下列变量存在于任何注册表循环中. 如果一个内层注册表循环包含在一个外层注册表循环中, 那么最内层循环的注册表项将具有优先权:
在注册表循环中使用下列命令时, 可以以一种简化的方式来操作当前获取项:
Value := RegRead()
RegWrite Value
RegWrite
RegDelete
RegDeleteKey
RegCreateKey
访问远程注册表时(通过上面描述的 KeyName 参数), 需要注意以下事项:
可以选择使用 One True Brace(OTB) 样式, 它允许左大括号出现在同一行而不是下面. 例如: Loop Reg "HKLM\Software\AutoHotkey", "V" {.
Loop Reg "HKLM\Software\AutoHotkey", "V" {
请参阅 Loop 了解关于区块, Break, Continue 和 A_Index 变量(其存在于各种类型的循环中) 的相关信息.
循环后面可以有一个可选的 Else 语句, 如果没有找到指定类型的注册表项(即循环的迭代次数为零), 则执行 Else 语句.
Loop, Break, Continue, 区块, RegRead, RegWrite, RegDelete, RegDeleteKey, SetRegView
检索指定注册表子键的内容, 每次检索一项.
Loop Reg, "HKEY_LOCAL_MACHINE\Software\SomeApplication" MsgBox A_LoopRegName
删除用户输入的 Internet Explorer 的 URL 历史.
Loop Reg, "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs" RegDelete
有效的测试脚本.
Loop Reg, "HKCU\Software\Microsoft\Windows", "R KV" ; 递归检索键和值. { if A_LoopRegType = "key" value := "" else { try value := RegRead() catch value := "*error*" } Result := MsgBox(A_LoopRegName " = " value " (" A_LoopRegType ")`n`nContinue?",, "y/n") } Until Result = "No"
用于在整个注册表中递归搜索特定值.
RegSearch("Notepad") RegSearch(Target) { Loop Reg, "HKEY_LOCAL_MACHINE", "KVR" { if !CheckThisRegItem() ; 这里告知我们要停止搜索. return } Loop Reg, "HKEY_USERS", "KVR" { if !CheckThisRegItem() ; 这里告知我们要停止搜索. return } Loop Reg, "HKEY_CURRENT_CONFIG", "KVR" { if !CheckThisRegItem() ; 这里告知我们要停止搜索. return } ; 请注意: 我认为如果已经搜索了 HKEY_USERS, 那么可以不必搜索 HKEY_CURRENT_USER. ; 同样地, HKEY_CLASSES_ROOT 提供了 ; HKEY_LOCAL_MACHINE 和 HKEY_CURRENT_USER 键的集合视图, 所以完全搜索这三个键是没有必要的. CheckThisRegItem() { if A_LoopRegType = "KEY" ; 如果您也想检查键名, 那么移除这两行. return true try RegValue := RegRead() catch return true if InStr(RegValue, Target) { Result := MsgBox( ( "The following match was found: " A_LoopRegKey "\" A_LoopRegName " Value = " RegValue " Continue?" ),, "y/n") if Result = "No" return false ; 告知我们的调用者停止搜索. } return true } }