Объект 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
' ******************************************************
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);
}

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

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

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