- Создание reg-файлов. Синтаксис редактирования записей реестра
- Содержание статьи:
- Создание reg-файлов для правки реестра
- Синтаксис reg-файлов
- Добавление ключей в реестр через reg-файл
- Изменение нескольких веток реестра в одном reg-файле
- Удаление веток реестра reg-файлом
- Бонус. Восстановление ассоциаций ярлыков и файлов
- Registry Table
- Columns
- Remarks
- Structure of the Registry
Создание reg-файлов. Синтаксис редактирования записей реестра
Редактирование системного реестра Windows — полезное умение в руках каждого пользователя. В статье Изменение параметров cистемного реестра Windows мы познакомились с самим реестром, его структурой и рассмотрели примеры с изменениями параметров его ключей. Сегодня мы поговорим о том, как автоматизировать процесс правки реестра и сделать его удобнее и быстрее.
Содержание статьи:
Создание reg-файлов для правки реестра
Ручное изменение ключей реестра приемлемо в том случае, когда вам необходимо разово произвести ту или иную настройку. Но если нам нужно повторять одну настройку с определённой периодичностью или задать нужные параметры на нескольких компьютерах, то возникает необходимость в упрощении процесса правки данной базы настроек системы.
Для автоматизации процесса редактирования реестра служат специальные файлы со своим синтаксисом и расширением *.reg. В вышеупомянутой записи о знакомстве с реестром Windows мы уже сталкивались с подобными файлами при создании резервной копии веток реестра и восстановлении их из бэкапа. Но такие рег-файлы можно писать и самому, если придерживаться определённых правил.
Синтаксис reg-файлов
Для примера мы поменяем клавиши смены языка ввода с Alt + Shift на Ctrl + Shift.
На интересует ветка реестра
И ключи Hotkey , Language Hotkey и Layout Hotkey , которые имеют значения по умолчанию 1 , 1 и 2 , соответственно.
Для изменения сочетания клавиш нам нужно будет присвоить им новые значения » Hotkey «=» 2 «, » Language Hotkey «=» 2 «, » Layout Hotkey «=» 3 «
Итак, для создания reg-файла открываем текстовый редактор, например, Блокнот Windows. Вставляем в окно редактора следующий код:
Windows Registry Editor Version 5.00 — это строка приветствия системы, позволяющая Windows определить, какого типа файл был запущен. Обязательна в начале всех reg-файлов, прописывается один раз.
;Переключение языка по левым Ctrl + Shift — строка комментария. Любая строка файла изменения реестра, начинающаяся точкой с запятой, не будет исполняться системой, служит для пояснительных записей. Комментарии прописываются сколько угодно раз.
[HKEY_CURRENT_USER\Keyboard Layout\Toggle] — куст реестра, в котором будут производиться изменения. О множественных записях подробно отметим чуть ниже.
«Hotkey»=»2», «Language Hotkey»=»2», «Layout Hotkey»=»3» — ключи реестра, расположенные в обрабатываемой ветке, и задаваемые им параметры. Каждый ключ с новой строки.
После этого жмём в меню текстового редактора на кнопку Файл , выбираем пункт Сохранить как , в строке Тип файла выбираем Все файлы , а в строке Имя файла задаём название, в конце которого ставим точку и дописываем расширение .reg.
Готовые файлы реестра для настройки сочетания клавиш смены языка можно скачать ниже:
Смена языка по Alt + Shift: language_alt_shift
Смена языка по Ctrl + Shift: language_ctrl_shift
Добавление ключей в реестр через reg-файл
Пример выше изменяет параметры существующих ключей . Но бывают ситуации, когда нам нужно добавить ключ, которого нет в реестре на данный момент. Напомним, что в статье о реестре Windows, упомянутой в начале данной записи, мы выделяли один момент:
В первую очередь отметим, что некоторые ключи имеют дефолтные значения . Это значит, что даже если конкретный ключ отсутствует в своей ветке, система будет вести себя, будто ему присвоен параметр по умолчанию.
Например, код reg-файла, позволяющего отключить автоматическую перезагрузку компьютера в случае появления синего экрана BSOD , будет выглядеть следующим образом:
где dword: — это тип данных добавляемого ключа реестра.
Готовый файл, отключающий перезагрузку Windows при падении системы в BSOD, можно скачать здесь: bsod_reboot_off
Изменение нескольких веток реестра в одном reg-файле
Если же нам необходимо изменить одним файлом ключи, расположенные в различных кустах реестра Windows, то совсем не обязательно на каждую ветку создавать отдельный файл. Для этого нам достаточно после описания параметров первой ветки добавить настройку следующей ветки с новой строки.
Для примера, приведём код, позволяющий отключить автозапуск со съёмных носителей и подключаемых устройств :
Записи настроек текущего пользователя здесь добавлены для верности, при необходимости можно вставить в создаваемый reg-файл только нужные строки.
Готовый reg-файл для отключения автозапуска со съёмных носителей можно скачать отсюда: autorun_off
Удаление веток реестра reg-файлом
Выше мы рассмотрели синтаксис registry-файлов для добавления и изменения параметров . Но как писать файл, если нам надо удалить хвосты в реестре , допустим, после деинсталляции программы.
Пример конкретных программ рассматривать не будем, а решим задачу по удалению из окна Проводника на вкладке Мой компьютер лишних папок: Видео, Документы, Загрузки, Изображения, Музыка, Рабочий стол
Пишем reg-файл, в котором перед каждой веткой для удаления ставим минус:
И по традиции готовый файл редактирования реестра: folders_remove
Бонус. Восстановление ассоциаций ярлыков и файлов
После вирусной атаки на компьютер иногда случается так, что при попытке запуска определённого типа файлов стартует не предназначенная для этого программа. Если с нарушением ассоциаций медиафайлов и документов легко справиться при помощи контекстного меню Открыть с помощью, то исправление нарушения запуска ярлыков и программ требует вмешательства в настройки системы.
Однако, испорченные ассоциации файлов легко исправить при помощи подходящих reg-файлов, восстанавливающих настройки Windows к исходным значениям. Ниже вы можете скачать нужный вам файл реанимации реестра.
Восстановление ассоциаций exe-файлов (исполнительных файлов, программ): exe-associations-fix
Восстановление ассоциаций lnk-файлов (ярлыков): lnk-associations-fix
Восстановление ассоциаций всех файлов (включая lnk и exe): all-associations-fix
Сегодня мы поговорили о том, что редактировать реестр Windows можно не только вручную, но и посредством reg-файлов. Добавление, редактирование, копирование и удаление данных реестра возможно и с помощью bat-файлов, о синтаксисе которых мы говорили в теме Пакетные файлы (bat, батники) Windows, но этот вопрос выходит за рамки обсуждения данной статьи и рассмотрен отдельно в публикации Редактирование реестра Windows из командной строки, bat-файлы
Registry Table
The Registry table holds the registry information that the application needs to set in the system registry.
The Registry table has the following columns.
Column | Type | Key | Nullable |
---|---|---|---|
Registry | Identifier | Y | N |
Root | Integer | N | N |
Key | RegPath | N | N |
Name | Formatted | N | Y |
Value | Formatted | N | Y |
Component_ | Identifier | N | N |
Columns
Primary key used to identify a registry record.
The predefined root key for the registry value. Enter a value of -1 in this field to make the root key dependent on the type of installation. Enter one of the other values in the following table to force the registry value to be written under a particular root key.
Constant | Hexadecimal | Decimal | Root key |
---|---|---|---|
(none) | — 0x001 | -1 | If this is a per-user installation, the registry value is written under HKEY_CURRENT_USER. If this is a per-machine installation, the registry value is written under HKEY_LOCAL_MACHINE. Note that a per-machine installation is specified by setting the ALLUSERS property to 1. |
msidbRegistryRootClassesRoot | 0x000 | 0 | HKEY_CLASSES_ROOTThe installer writes or removes the value from the HKCU\Software\Classes hive during installation in the per-user installation context. The installer writes or removes the value from the HKLM\Software\Classes hive during per-machine installations. |
msidbRegistryRootCurrentUser | 0x001 | 1 | HKEY_CURRENT_USER |
msidbRegistryRootLocalMachine | 0x002 | 2 | HKEY_LOCAL_MACHINE |
msidbRegistryRootUsers | 0x003 | 3 | HKEY_USERS |
Note that it is recommended that registry entries written to the HKCU hive reference a component having the RegistryKeyPath bit set in the Attributes column of the Component table. This ensures that the installer writes the necessary registry entries when there are multiple users on the same computer.
The localizable key for the registry value.
This column contains the registry value name (localizable). If this is Null, then the data entered into the Value column are written to the default registry key.
If the Value column is Null, then the strings shown in the following table in the Name column have special significance.
String | Meaning |
---|---|
+ | The key is to be created, if absent, when the component is installed. |
— | The key is to be deleted, if present, with all of its values and subkeys, when the component is uninstalled. |
* | The key is to be created, if absent, when the component is installed. Additionally, the key is to be deleted, if present, with all of its values and subkeys, when the component is uninstalled. |
Note that the RemoveRegistry table must be used if an installed registry key is to be deleted, with its values and subkeys, when the component is installed.
This column is the localizable registry value. The field is Formatted. If the value is attached to one of the following prefixes (i.e. #%value) then the value is interpreted as described in the table. Note that each prefix begins with a number sign (#). If the value begins with two or more consecutive number signs (#), the first # is ignored and value is interpreted and stored as a string.
Prefix | Meaning |
---|---|
#x | The value is interpreted and stored as a hexadecimal value (REG_BINARY). |
#% | The value is interpreted and stored as an expandable string (REG_EXPAND_SZ). |
# | The value is interpreted and stored as an integer (REG_DWORD). |
- If the value contains the sequence tilde [
], then the value is interpreted as a Null-delimited list of strings (REG_MULTI_SZ). For example, to specify a list containing the three strings a, b and c, use «a[
]c».
The sequence [
] within the value separates the individual strings and is interpreted and stored as a Null character.
If a [
] precedes the string list, the strings are to be appended to any existing registry value strings. If an appending string already occurs in the registry value, the original occurrence of the string is removed.
If a [
] follows the end of the string list, the strings are to be prepended to any existing registry value strings. If a prepending string already occurs in the registry value, the original occurrence of the string is removed.
If a [
] is at both the beginning and the end or at neither the beginning nor the end of the string list, the strings are to replace any existing registry value strings.
External key into the first column of the Component table referencing the component that controls the installation of the registry value.
Remarks
The WriteRegistryValues and RemoveRegistryValues actions in sequence tables process the information in this table. For information about using sequence tables, see Using a Sequence Table.
The registry information is written out to the system registry when the corresponding component has been selected to be installed locally or run from source.
Note that the installer removes a registry key after removing the last value or subkey under the key. To prevent an empty registry key from being removed when uninstalling, write a dummy value under the key you need to keep and enter + in the Name column. If * is in the Name column, the key is deleted, with all of its values and subkeys, when the component is removed.
A custom action can be used to add rows to the Registry table during an installation, uninstallation, or repair transaction. These rows do not persist in the Registry table and the information is only available during the current transaction. The custom action must therefore be run in every installation, uninstallation, or repair transaction that requires the information in these additional rows. The custom action must come before the RemoveRegistryValues and WriteRegistryValues actions in the action sequence.
For information on how to secure a registry key see the MsiLockPermissionsEx Table and LockPermissions Table.
Structure of the Registry
The registry is a hierarchical database that contains data that is critical for the operation of Windows and the applications and services that run on Windows. The data is structured in a tree format. Each node in the tree is called a key. Each key can contain both subkeys and data entries called values. Sometimes, the presence of a key is all the data that an application requires; other times, an application opens a key and uses the values associated with the key. A key can have any number of values, and the values can be in any form. For more information, see Registry Value Types and Registry Element Size Limits.
Each key has a name consisting of one or more printable characters. Key names are not case sensitive. Key names cannot include the backslash character (), but any other printable character can be used. Value names and data can include the backslash character.
The name of each subkey is unique with respect to the key that is immediately above it in the hierarchy. Key names are not localized into other languages, although values may be.
The following illustration is an example registry key structure as displayed by the Registry Editor.
Each of the trees under My Computer is a key. The HKEY_LOCAL_MACHINE key has the following subkeys: HARDWARE, SAM, SECURITY, SOFTWARE, and SYSTEM. Each of these keys in turn has subkeys. For example, the HARDWARE key has the subkeys DESCRIPTION, DEVICEMAP, and RESOURCEMAP; the DEVICEMAP key has several subkeys including VIDEO.
Each value consists of a value name and its associated data, if any. MaxObjectNumber and VgaCompatible are values that contain data under the VIDEO subkey.
A registry tree can be 512 levels deep. You can create up to 32 levels at a time through a single registry API call.