Первое знакомство и работа с реестром Windows


Чеботарев Игорь

Когда компьютеры были большими, а программы были маленькими, основной операционной системой большинства домашних компьютеров была DOS. Компьютерщиков в то время было немного и были они все люди занятые, поэтому для выполнения каких-то постоянно повторяющихся действий были придуманы и использовались bat-файлы (или, как они еще называются, пакетные файлы). С тех пор утекло немало воды, компьютеры стали маленькими и вошли в широкие народные массы. Программы, наоборот, стали очень большими и прожорливыми до ресурсов. Операционная система тоже изменилась. Про DOS большинство современных пользователей и не слышало, а если кому и доводилось с ним работать, то чувствовали они себя крайне не комфортно. А что же bat-файлы? Неужели на фоне всеобщего движения вперед они остались неизменны? Да, они по-прежнему исправно служат во многих ситуациях, но вместе с появлением Windows у них появился реальный конкурент: Windows Script Host (WSH).

Что же представляют собой файлы, написанные с использованием WSH? Это сценарии команд, написанные на JScript, VBScript или других скриптовых языках (Active Perl, Python), позволяющие автоматизировать какие-то действия на компьютере. При этом спектр действий по сравнению с bat-файлом существенно расширен. Помимо обычного запуска программ и работы с файлами WSH позволяет создавать ярлыки программ, выключать компьютер, изменять (добавлять и удалять) записи в реестре, работать с сетью и пользователями (выводить список дисков, подключать/отключать сетевые диски, получать имя компьютера и пользователя, ...), работать с переменными окружения, выдавать диалоговые и информационные сообщения и многое другое. Как видите, список различных возможностей WSH весьма впечатляющий. Причем, научиться с ним работать вовсе не сложно.

Из положительных особенностей Windows Script Host хотелось бы отметить возможность работы в "невидимом" режиме. Например, если вы захотите добавить какую-то информацию в реестр с помощью reg-файла, то вам будет выдан запрос с подтверждением этого действия. При запуске WSH-скрипта никаких вопросов задаваться не будет. Пользователь даже может не подозревать, что на его компьютере выполняются какие-то работы. Думаю, многим администраторам такая возможность придется по душе.

Файлы сценариев WSH представляют собой программы (да-да, это можно уже назвать программой), написанные на JScript (эти файлы имеют расширение .js) или VBScript (соответственно, файлы с расширением .vbs). Синтаксис, естественно, немного отличается, но если вам приходилось раньше сталкиваться с одним из этих языков написания скриптов, то никаких проблем возникнуть не должно.

Если вы пользователь Windows 98/ME/2000/XP то проблем с WSH у вас возникнуть не должно - библиотеки, отвечающие за обработку скриптов изначально присутствуют в системе. Если вы являетесь счастливым обладателем Windows NT, то для включения возможности обработки сценариев WSH вам придется установить сервис пак 4. Тем же, у кого на компьютере установлен Windows 95 придется заглянуть на сайт Microsoft и скачать Windows Scripting Host (msdn.microsoft.com/scripting). Если вы не уверены, есть ли у вас на компьютере Windows Scripting Host, просто запустите поиск файла wscript.exe в каталоге Windows.

Итак, для написания WSH-скрипта вам понадобится любой текстовый редактор (я предпочитаю использовать внутренний редактор FARa), немного терпения и голова на плечах.

Чтобы запустить готовый скрипт, просто дважды щелкните мышкой по файлу, либо введите полное имя файла скрипта в Пуск - Выполнить (учтите, что файл должен иметь расширение .js или .vbs).

Ну вот, на этом, пожалуй, теоретическую часть можно завершить и перейти непосредственно к написанию самих скриптов. В силу привычки я предпочитаю JScript, но по мере возможностей постараюсь приводить примеры как на JS, так и на VBS.

Так как раздел ориентирован в основном на реестр Windows, то и начать хотелось бы со скрипта, работающего с реестром. Итак, попробуем создать какой-нибудь раздел, в нем несколько параметров, а затем все это удалим. Создайте любой файл с расширением .js (например, test.js) и напишите в нем следующее:

//Пример работы с реестром на JScript
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Popup("Создаем раздел");
WSHShell.RegWrite("HKCU\\MyRegKey\\", "Primer");
WSHShell.Popup("Создаем строковый параметр");
WSHShell.RegWrite("HKCU\\MyRegKey\\String", 1);
WSHShell.Popup("Создаем параметр DWORD");
WSHShell.RegWrite("HKCU\\MyRegKey\\DWORD", 2, "REG_DWORD");
WSHShell.Popup("Создаем двоичный параметр");
WSHShell.RegWrite("HKCU\\MyRegKey\\Binary", 3, "REG_BINARY");
WSHShell.Popup("Удаляем все параметры");
WSHShell.RegDelete("HKCU\\MyRegKey\\String");
WSHShell.RegDelete("HKCU\\MyRegKey\\DWORD");
WSHShell.RegDelete("HKCU\\MyRegKey\\Binary");
WSHShell.Popup("Удаляем раздел");
WSHShell.RegDelete("HKCU\\MyRegKey\\");

В первой строке создается объект типа WSHShell с тем же именем. Во второй строке выводится сообщение о том что создается раздел. После нажатия на "ОК" в появившемся окне в реестре будет создан новый раздел. Перед каждым действием будет появляться окно с сообщением о том, что сейчас будет сделано. В нормальном рабочем скрипте такие окна, конечно, не нужны. Здесь они добавлены просто для того, чтобы вы могли отследить изменения в реестре (для обновления информации в редакторе реестра нажимайте F5 после каждого изменения). Последние строчки удаляют наши параметры и раздел, чтобы не забивать реестр разным мусором.

Если вы обратили внимание, то корневой раздел HKEY_CURRENT_USER в скрипте обозначается как HKCU. Здесь возможны сокращенные названия корневых разделов. HKEY_LOCAL_MACHINE будет писаться как HKLM, HKEY_CLASSES_ROOT - HKCR. Остальные разделы не имеют короткого имени.

Теперь проделаем аналогичную операцию на VBScript (test.vbs):

'Пример работы с реестром на VBScript
set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Popup "Создаем раздел"
WSHShell.RegWrite "HKCU\\MyRegKey\\", "Primer"
WSHShell.Popup "Создаем строковый параметр"
WSHShell.RegWrite "HKCU\\MyRegKey\\String", 1
WSHShell.Popup "Создаем параметр DWORD"
WSHShell.RegWrite "HKCU\\MyRegKey\\DWORD", 2, "REG_DWORD"
WSHShell.Popup "Создаем двоичный параметр"
WSHShell.RegWrite "HKCU\\MyRegKey\\Binary", 3, "REG_BINARY"
WSHShell.Popup "Удаляем все параметры"
WSHShell.RegDelete "HKCU\\MyRegKey\\String"
WSHShell.RegDelete "HKCU\\MyRegKey\\DWORD"
WSHShell.RegDelete "HKCU\\MyRegKey\\Binary"
WSHShell.Popup "Удаляем раздел"
WSHShell.RegDelete "HKCU\\MyRegKey\\"

Как видите, отличия весьма незначительные (по другому задается комментарий, отсутствует ";" в конце строки, нет круглых скобок при задании параметров, var заменена на set). Подробно его разбирать, я думаю, смысла нет - все что справедливо для первого примера, справедливо и для второго.

"Это все здорово, но посоветуй-ка мне что-нибудь полезное!" - скажете вы. И посоветую. Я на 100% уверен, что абсолютно все пользователи интернета сталкивались с такой проблемой, как замена стартовой страницы Internet Explorer'a некоторыми сайтами. Причем, большинство этих сайтов не несет ничего полезного и зачастую видеть их у себя второй раз совсем не хочется. Для борьбы с ними используйте следующий скрипт:

var WSHShell = WScript.CreateObject("WScript.Shell");
//Делаем задержку 10 секунд на случай если
//паразитный сайт добавил что-то в автозагрузку
WScript.Sleep(10000);
//Проверяем что у нас в стартовой странице
StartPage = WSHShell.RegRead("HKCU\\SOFTWARE\\Microsoft\\Internet Explorer\\Main\\Start Page");
//И если там не то, что мы задумали, то меняем на свое
if (StartPage!="http://www.whatis.ru/") {
       WSHShell.RegWrite("HKCU\\SOFTWARE\\Microsoft\\Internet Explorer\\Main\\Start Page", "http://www.whatis.ru/");
}

Добавьте его в автозагрузку в разделе HKEY_CURRENT_USER и вам не придется следить самостоятельно за такими сайтами. И даже если они пропишут какую-нибудь гадость в автозагрузку, то скорее всего и в этом случае стартовая страница будет нужная вам. Правда, если у вас работает антивирус Касперского, могут быть проблемы - по крайней мере у меня он этот файл обозвал трояном. С другой стороны, если у вас постоянно работает антивирус, то вряд ли нехорошие сайты что-либо поменяют.

В конце приведу еще один небольшой скрипт, выводящий на экран окно с сообщением о версии WSH у вас на компьютере:

//Версия WSH на JScript
var WSHShell = WScript.CreateObject("WScript.Shell");
WSHShell.Popup("Версия WSH "+WScript.Version);

Для первого знакомства я думаю достаточно. В следующей статье я дам примеры более сложных скриптов.

читать еще по теме