Нужна помощь в написании скрипта? Close

Вы можете задать любой вопрос по программе Autohotkey в нашей группе Вконтакте. Если решение требует более высокой квалификации- можно обратиться непосредственно ко мне.

ВконтактеГруппа Вконтакте Электронная почтаЭлектронная почта Личная страницаСимаков Яков ВК
home icon Все разделы
comunity icon Нужна помощь?

Loop (registry) -Autohotkey

Извлекает содержимое указанного раздела реестра, считывая его элементы по очереди.

Loop, RootKey [, Key, IncludeSubkeys?, Recurse?]

Параметры

RootKey Имя корневого раздела. Возможные значения: HKEY_LOCAL_MACHINE (или HKLM), HKEY_USERS (или HKU), HKEY_CURRENT_USER (или HKCU), HKEY_CLASSES_ROOT (или HKCR), HKEY_CURRENT_CONFIG (или HKCC).

Для доступа к удалённому реестру укажите вначале имя компьютера с двоеточием на конце, как в этом примере: \\workstation01:HKEY_LOCAL_MACHINE
Key Имя раздела (например, Software\SomeApplication). Если опущено или пустое, будет считано содержимое корневого раздела.
IncludeSubkeys? 0 (по умолчанию) Подразделы указанного раздела не читаются (только параметры).
1 Читаются все параметры и подразделы.
2 Читаются только подразделы (не параметры).
Recurse? 0 (по умолчанию) Рекурсия в подразделы не выполняется.
1 Рекурсия выполняется, извлекаются все параметры и подразделы внутри данных подразделов.

Примечания

Реестровый цикл полезен, когда вы хотите работать с множеством параметров или разделов, обрабатывая их по очереди. Параметры и разделы извлекаются в обратном порядке (снизу вверх), чтобы можно было использовать RegDelete внутри цикла, не нарушая его работы.

Нижеследующие переменные существуют в любом реестровом цикле. Если внутри такого цикла есть другой реестровый цикл, переменные внутреннего цикла будут иметь преимущество.


A_LoopRegName Имя текущего считанного элемента, которое может быть либо именем параметра, либо именем подраздела. Параметры, которые в редакторе реестра Windows (regedit.exe) показываются как "(По умолчанию)", читаются, если им присвоено какое-то значение, но A_LoopRegName будет для них пустой.
A_LoopRegType Тип текущего считанного элемента. Может быть одним из следующих слов: KEY (раздел), 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 (вероятно, редкость на большинстве компьютеров с Windows). Если тип неизвестен, переменная будет пустой.
A_LoopRegKey Имя корневого раздела, куда осуществляется доступ (HKEY_LOCAL_MACHINE, HKEY_USERS, HKEY_CURRENT_USER, HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG). При доступе к удалённому реестру имя компьютера сюда не включается.
A_LoopRegSubKey Имя текущего подраздела. Совпадает со значением параметра Key, если в параметре Recurse не было задано рекурсивное чтение подразделов. В последнем случае в переменной будет полный путь к считанному элементу, не включающий имя корневого раздела. Например: Software\SomeApplication\My SubKey
A_LoopRegTimeModified Время последнего изменения текущего подраздела или любого из его параметров. Формат: YYYYMMDDHH24MISS. Эта переменная пуста, если текущий считанный элемент не является разделом (т.е. A_LoopRegType не равна KEY) или если операционная система - Win9x (т.к. Win9x не отслеживает эту информацию).

При использовании внутри реестрового цикла нижеследующие команды могут применяться в упрощённом варианте, чтобы показать, что действие должно совершаться над текущим элементом.


RegRead, OutputVar Читает текущий элемент. Если это раздел, ErrorLevel будет установлен в 1, и OutputVar будет пустой.
RegWrite [, Value] Пишет в текущий элемент. Если значение для Value не задано, в текущий параметр реестра будет записан 0 или пустая строка, в зависимости от типа параметра. Если текущий элемент - раздел, ErrorLevel устанавливается в 1 и больше ничего не делается.
RegDelete Удаляет текущий элемент. Если это раздел, он удаляется вместе со всеми подразделами и параметрами внутри него.

Осуществляя доступ к удалённому реестру (через параметр RootKey, описанный выше), имейте в виду следующее.

Смотрите описание команды Loop относительно блоков кода, команд Break, Continue и переменной A_Index (которая существует во всех типах циклов).

Примеры

; Пример 1. Удаление истории набранных пользователем адресов в Internet Explorer. Loop, HKEY_CURRENT_USER, Software\Microsoft\Internet Explorer\TypedURLs RegDelete ; Пример 2. Тестовый скрипт. Loop, HKEY_CURRENT_USER, Software\Microsoft\Windows, 1, 1 { if a_LoopRegType = key value = else { RegRead, value if ErrorLevel value = *Ошибка* } MsgBox, 4, , %a_LoopRegName% = %value% (%a_LoopRegType%)`n`nПродолжить? IfMsgBox, NO, break } ; Пример 3. Рекурсивный поиск по всему реестру заданного параметра/параметров. SetBatchLines -1 ; Заставляет поиск идти на максимальной скорости. RegSearchTarget = Notepad ; Сообщает подпрограмме, что нужно искать. Gosub, RegSearch return RegSearch: ContinueRegSearch = y Loop, HKEY_LOCAL_MACHINE, , 1, 1 { Gosub, CheckThisRegItem if ContinueRegSearch = n ; Означает остановку поиска. return } Loop, HKEY_USERS, , 1, 1 { Gosub, CheckThisRegItem if ContinueRegSearch = n ; Означает остановку поиска. return } Loop, HKEY_CURRENT_CONFIG, , 1, 1 { Gosub, CheckThisRegItem if ContinueRegSearch = n ; Означает остановку поиска. return } ; Замечание: я считаю, что не нужно искать в HKEY_CURRENT_USER, если проводится поиск ; в HKEY_USERS. То же может быть верно для HKEY_CLASSES_ROOT, если проводится поиск ; в HKEY_LOCAL_MACHINE. return CheckThisRegItem: if A_LoopRegType = KEY ; Удалите эти две строки, если вы хотите просматривать также имена разделов. return RegRead, RegValue if ErrorLevel return IfInString, RegValue, %RegSearchTarget% { MsgBox, 4, , ( Найдено следующее совпадение: `n%A_LoopRegKey%\%A_LoopRegSubKey%\%A_LoopRegName%`nЗначение = %RegValue%`n`nПродолжить? ) IfMsgBox, No ContinueRegSearch = n ; Указывает вызвавшему коду остановить поиск. } return
Автор перевода: YMP
Настоящее имя переводчика: Юрий Попов
Источник: http://www.script-coding.com/AutoHotkey/LoopRegistry.html
Под редакцией ahk-wiki.ru от 21.08.19