Здравствуйте читатели блога scriptcoding.ru. Сегодня мы рассмотрим работу с реестром Windows с помощью методов RegDelete, RegRead и RegWrite объекта WScript Shell.
При обращении к ветке реестра можно использовать как длинное, так и короткое имя:
- HKEY_CLASSES_ROOT (HKCR)
- HKEY_CURRENT_USER (HKCU)
- HKEY_LOCAL_MACHINE (HKLM)
- HKEY_USERS
- HKEY_CURRENT_CONFIG
Стоит учитывать тот момент, что результат чтения, записи или удаления веток или параметров реестра зависит от ваших прав доступа.
Хорошо, давайте рассмотрим общий синтаксис методов WScript Shell, RegDelete, RegRead и RegWrite и в конце напишем два примера на языке vbscript и jscript.
RegWrite(strName, anyValue [,strType]) – Служит для записи информации в реестр Windows. Важно помнить, что при создании элемента, регистр букв сохраняется, а при чтении он не играет роли.
- strName – Определяет имя раздела или аргумента, в который производиться запись. Если strName заканчивается символом «» (косая черта), то происходит запись в раздел — при его отсутствии он создается автоматически, если косая черта в конце отсутствует, то произойдет запись в параметр — при его отсутствии он создастся автоматически.
- anyValue – Собственно значение, которое нужно записать.
- strType – Не является обязательным, определяет тип записываемого значения, может принимать «reg_sz«, «reg_expand_sz«, «reg_dword» и «reg_binary«, если будет указано другое строковое значение, то метод вернет значение e_invalidarg. Стоит также учитывать, что если strType содержит «reg_sz» или «reg_expand_sz», то RegWrite WScript Shell объекта автоматически преобразует содержимое anyValue в строку, если strType содержит «reg_dword», то, содержимое anyValue переводится в целый формат. Если strType содержит «reg_binary», то содержимое anyValue должно быть целым числом.
RegRead(strName) – Данный метод позволяет считывать информацию. Аргумент strName задает полный путь. Сам метод позволяет считать следующие типы данных: REG_SZ, REG_EXPAND_SZ, REG_DWORD, REG_BINARY и REG_MULTI_SZ. Если в реестре находятся иные типы данных, то метод RegRead WScript Shell класса вернет DISP_E_TYPEMISMATCH. Стоит учитывать, что если strName заканчивается символом «» (косая черта), то произойдет попытка считать значение по умолчанию для раздела — если оно установлено, если нет, произойдет ошибка; если косая черта отсутствует, произойдет чтение значения для аргумента.
RegDelete(strName) – Удаляет раздел или аргумент. Как и предыдущие два метода, в RegDelete играет роль наличие косой черты, если она прописана, происходит уда_ление раз_дела вмести со всеми его пара_метрами, иначе – только заданного пара_метра.
Хорошо, теперь давайте рассмотри следующий пример на языке vbscript:
' ****************************************************** ' wshshell - RegWrite, RegRead и RegDelete ' Работа с реестром Windows ' reg.vbs ' ****************************************************** Option Explicit Dim reg_root1, reg_key1, reg_param1, reg_value, res, reg_result Dim wshshell ' Корневой_разде_л reg_root1 = "HKEY_CLASSES_ROOT" ' Вложеный_разде_л reg_key1 = "\.1_MY_TEST\" ' имя_п_араметра reg_param1 = "my_value" ' зна_чение_п_араметра reg_value ="простая строка" Set wshshell = WScript.CreateObject("WScript.Shell") ' Запрашиваем у пользователя разрешение на с_оздание_раздел_а. res = MsgBox("С_оздать р_аздел ?", vbYesNo + vbQuestion + vbDefaultButton2, "") If res = vbYes Then ' Со_здаем_ра_здел (wshshell RegWrite) wshshell.RegWrite reg_root1 & reg_key1, ""' MsgBox "Раздел " & reg_root1 & reg_key1 & " создан" End If ' Запрашиваем разрешение на создани_е_параметр_а. res = MsgBox("Создать_параметр ?", vbYesNo + vbQuestion + vbDefaultButton2, "") If res = vbYes Then ' Создаем строковы_й_парамет_р. wshshell.RegWrite reg_root1 & reg_key1 & reg_param1, reg_value, "REG_SZ" MsgBox "_Пар_аметр_ " & reg_root1 & reg_key1 & reg_param1 & " создан" ' Пробуем считать значени_е_парамет_ра (wshshell RegRead) reg_result = wshshell.RegRead (reg_root1 & reg_key1 & reg_param1) MsgBox "_Пар_аметр_ " & reg_param1 & ": " & reg_result End If ' Запрашиваем разрешение на удаление_параметра (RegDelete) res = MsgBox("Уда_лить_пар_аметр ?", vbYesNo + vbQuestion + vbDefaultButton2, "Удале_ние_парамет_ра") If res = vbYes Then wshshell.RegDelete reg_root1 & reg_key1 & reg_param1 MsgBox "Параметр " & reg_param1 & " удален" End If ' Запрашиваем разрешение на удаление_раздела. res = MsgBox("Уд_алить_раз_дел?", vbYesNo + vbQuestion + vbDefaultButton2, "Уд_аление_ра_здела") If res = vbYes Then wshshell.RegDelete reg_root1 & reg_key1 MsgBox "Раздел " & reg_key1 & " удален" End If |
В этом примере мы производим создание, чтение и удаление ветки и параметра посредством диалоговых окон. С помощью функции MsgBox мы выводи диалоговое окно, в котором нужно подтвердить или отменить то или иное действие. По сути, тут идет сначала создание_подраздела .1_MY_TEST в ветке HKEY_CLASSES_ROOT, далее идет создание my_value со значением «простая строка» и типом «REG_SZ» (wshshell RegWrite). Далее происходит считывание данных (wshshell RegRead), ну и в конце – идет удаление разд_ела и пара_метра (RegDelete).
Хорошо, теперь давайте рассмотрим аналогичный пример, но уже на языке jscript:
// ************************************** // wshshell - RegWrite, RegRead и RegDelete // Работа с реестром Windows // reg.js // ************************************** //Определяем переменные для диалогового окна var vbOKCancel = 1, vbInformation = 64, vbCancel = 2; var reg_root = "HKEY_CLASSES_ROOT" ; // Корневой_ра_з_дел var reg_key = "\\.1_MY_TEST_1\\"; //Вложеный_ра_з_дел var reg_param = "my_value_1"; //имя_пар_а_метра var reg_value ="простая строка"; // зн_а_чение_пар_а_метра var result; //результат чтения данных из реестра var WshShell = WScript.CreateObject("WScript.Shell"); // Запрашиваем у пользователя разрешение для с_о_здания_разд_е_ла (wshshell RegWrite) result = WshShell.Popup("С_озда_ть_р_азде_л_с_пара_метро_м ?", 0, "Работа с реестром", vbOKCancel + vbInformation); if (result != vbCancel) { //Важно!!! JScript не позволяет пропустить_па_раме_тр, прописав "" как в VBScript WshShell.RegWrite(reg_root + reg_key + reg_param, reg_value, "REG_SZ"); WshShell.Popup("Создан: " + reg_root + reg_key + reg_param); // Пробуем считать значение (wshshell RegRead) reg_result = WshShell.RegRead(reg_root + reg_key + reg_param); WshShell.Popup("Зна_че_ние_па_ра_ме_тра " + reg_param + ": "+ reg_result); } // Запрашиваем разрешение на удалени_е_параметр_а (RegDelete) result = WshShell.Popup("Удал_ить_парамет_р ?", 0,"", vbOKCancel + vbInformation); if (result != vbCancel) { WshShell.RegDelete(reg_root + reg_key + reg_param); WshShell.Popup("Удалено: " + reg_root + reg_key + reg_param); } // Запрашиваем разрешение на_удал_ение_раз_дела result = WshShell.Popup("Уда_лить_разд_ел ?", 0,"", vbOKCancel + vbInformation); if (result != vbCancel) { WshShell.RegDelete(reg_root + reg_key); WshShell.Popup("Удалено: " + reg_root + reg_key); } |
В этом примере для создания диалога мы использовали функцию, также стоит обратить внимание, что косая черта прописана дважды, иначе произойдёт ошибка.