Перейти на главную страничку сайта (список статей, файлы для скачивания)
Проект перевода документации AutoHotkey: перечень переведённых статей и статей в работе.
Оригинал статьи в AutoHotkey.chm: "Loop (registry)", в содержании - "Registry Management" - "Loop (registry)", v1.0.46.09.
Ник переводчика: YMP.
Настоящее имя переводчика: Юрий Попов.
Извлекает содержимое указанного раздела реестра, считывая его элементы по очереди.
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
Перейти на главную страничку сайта (список статей, файлы для скачивания)
© 2007 http://www.script-coding.com При любом использовании материалов сайта обязательна ссылка на него как на источник информации, а также сохранение целостности и авторства материалов.