Объект WScript.Shell методы RegWrite, RegRead и RegDelete

Объект WScript.Shell методы RegWrite, RegRead и RegDelete Объектная модель Windows Script Host

Здравствуйте читатели блога 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.

метод wshshell regwrite

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 должно быть целым числом.
метод wshshell regread

RegRead(strName) – Данный метод позволяет считывать информацию. Аргумент strName задает полный путь. Сам метод позволяет считать следующие типы данных: REG_SZ, REG_EXPAND_SZ, REG_DWORD, REG_BINARY и REG_MULTI_SZ. Если в реестре находятся иные типы данных, то метод RegRead WScript Shell класса вернет DISP_E_TYPEMISMATCH. Стоит учитывать, что если strName заканчивается символом «» (косая черта), то произойдет попытка считать значение по умолчанию для раздела — если оно установлено, если нет, произойдет ошибка; если косая черта отсутствует, произойдет чтение значения для аргумента.

wshshell regdelete метод

RegDelete(strName) – Удаляет раздел или аргумент. Как и предыдущие два метода, в RegDelete играет роль наличие косой черты, если она прописана, происходит уда_ление раз_дела вмести со всеми его пара_метрами, иначе – только заданного пара_метра.

Хорошо, теперь давайте рассмотри следующий пример на языке vbscript:

' ******************************************************' wshshell - RegWrite, RegRead и RegDelete' Работа с реестром Windows' reg.vbs' ******************************************************OptionExplicit Dim reg_root1, reg_key1, reg_param1, reg_value, res, reg_resultDim 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 & " создан"EndIf ' Запрашиваем разрешение на создани_е_параметр_а.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_resultEndIf ' Запрашиваем разрешение на удаление_параметра (RegDelete)res = MsgBox("Уда_лить_пар_аметр ?", vbYesNo + vbQuestion + vbDefaultButton2, "Удале_ние_парамет_ра")If res = vbYes Thenwshshell.RegDelete reg_root1 & reg_key1 & reg_param1MsgBox "Параметр " & reg_param1 & " удален"EndIf ' Запрашиваем разрешение на удаление_раздела.res = MsgBox("Уд_алить_раз_дел?", vbYesNo + vbQuestion + vbDefaultButton2, "Уд_аление_ра_здела")If res = vbYes Thenwshshell.RegDelete reg_root1 & reg_key1MsgBox "Раздел " & reg_key1 & " удален"EndIf

В этом примере мы производим создание, чтение и удаление ветки и параметра посредством диалоговых окон. С помощью функции 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 не позволяет пропустить_па_раме_тр, прописав "" как в VBScriptWshShell.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);}

Скачать архив с примерами

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

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий