Андрей Попов - Windows Script Host для Windows 2000/XP
Реализация того же сценария на языке VBScript приведена в листинге 2.43.
Листинг 2.43. Доступ к определенным специальным папкам (VBScript)
'*****************************************************************
' РРјСЏ: Shortcut.vbs
' Язык: JScript
' Описание: Создание ярлыков в специальных папках
'*****************************************************************
Option Explicit
' Объявляем переменные
Dim WshShell,MyShortcut,PathTarg,PathIcon,Res,PathShortcut
' Создаем объект WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
' Выводим запрос для выбора папки, в которой будет создан ярлык
Res=WshShell.Popup("Где создать ярлык?" & vbCrLf & "Да - на рабочем столе" & vbCrLf & _
 "Нет - в меню Программы",0,"Работа с ярлыками",vbQuestion+vbYesNo)
If Res=vbYes Then ' Нажата кнопка Да
 ' Определяем путь к рабочему столу
В PathShortcut = WshShell.SpecialFolders("Desktop")
Else
 ' Определяем путь к меню Программы
В PathShortcut = WshShell.SpecialFolders("Programs")
End If
' Создаем объект-ярлык
Set MyShortcut = WshShell.CreateShortcut(PathShortcut+"Мой ярлык.lnk")
' Устанавливаем путь к файлу
PathTarg=WshShell.ExpandEnvironmentStrings("%windir%\notepad.exe")
MyShortcut.TargetPath = PathTarg
' Назначаем комбинацию горячих клавиш
MyShortcut.Hotkey = "CTRL+ALT+N"
' Выбираем иконку из файла SHELL32.dll
PathIcon = _
В WshShell.ExpandEnvironmentStrings("%windir%system32SHELL32.dll")
MyShortcut.IconLocation = PathIcon & ", 1"
MyShortcut.WindowStyle=3 ' Устанавливаем тип окна (максимизировано)
MyShortcut.Save  ' Сохраняем ярлык
WScript.Echo "Ярлык создан|"
'************* Конец *********************************************
Работа с системным реестром Windows
Во всех версиях Windows системный реестр — это база данных, в которой хранится информация о конфигурации компьютера и операционной системы. С точки зрения пользователя, реестр является иерархическим деревом разделов, подразделов и параметров. Работать с этим деревом можно с помощью стандартного редактора реестра regedit.exe (рис. 2.20).
Рис. 2.20. Редактор реестра regedit.exe
С помощью методов объекта WshShell из сценариев WSH можно:
□ создавать новые разделы и параметры (метод RegWrite);
□ изменять значения параметров и разделов (метод RegWrite);
□ считывать значения параметров и разделов (метод RegRead);
□ удалять параметры и разделы (метод RegDelete).
ЗамечаниеВ Windows ХРдля работы с системным реестром сценарий должен иметь разрешение на доступ к разделам реестра, которым обладает администратор.
В листинге 2.44 представлен сценарий Registry.js, который производит манипуляции внутри корневого раздела HKEY_CURRENT_USER, причем каждая операция выполняется только после утвердительного ответа на соответствующий запрос, формируемый в диалоговом окне.
Сначала в разделе HKEY_CURRENT_USER создается подраздел ExampleKey, в который затем записывается строковый параметр ExampleValue со значением "Value from WSH" (рис. 2.21).
Р РёСЃ. 2.21. Рлементы системного реестра, создаваемые сценарием Registry.js
После этого параметр ExampleValue и раздел ExampleKey последовательно удаляются из реестра.
Листинг 2.44. Работа с системным реестром (JScript)/********************************************************************/
/* РРјСЏ: Registry.jsВ В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В */
/* Язык: JScript                                                   */
/* Описание: Работа с системным реестром                           */
/********************************************************************/
//Объявляем переменные
var WshShell,Root,Key,Res,SValue,ValueName,SRegValue;
//Рнициализируем константы для диалоговых РѕРєРѕРЅ
var vbYesNo=4,vbQuestion=32,vbInformation=64,vbYes=6,vbOkOnly=0;
Root="HKEY_CURRENT_USER"; //Корневой ключ
Key="\ExampleKey\";     //Новый ключ
ValueName="ExampleValue";В //РРјСЏ РЅРѕРІРѕРіРѕ параметра
SValue="Value from WSH";  //Значение нового параметра
//Создаем объект WshShell
WshShell=WScript.CreateObject("WScript.Shell");
//Запрос на создание нового ключа
Res=WshShell.Popup("Создать ключn"+Root+Key+"?",0,
 "Работа с реестром",vbQuestion+vbYesNo);
if (Res==vbYes) { //Нажата кнопка Да
 //Записываем новый ключ
В WshShell.RegWrite(Root+Key,"");
 WshShell.Popup("Ключn"+Root+Key+" создан!",0,
 "Работа с реестром",vbInformation+vbOkOnly);
}
//Запрос на запись нового параметра
Res=WshShell.Popup("Записать параметрn"+Root+Key+ValueName+"?",0,
 "Работа с реестром",vbQuestion+vbYesNo);
if (Res==vbYes) { //Нажата кнопка Да
 //Записываем новый строковый параметр
В WshShell.RegWrite(Root+Key+ValueName,SValue,"REG_SZ");
 WshShell.Popup("Параметрn"+Root+Key+ValueName+" записан!",0,
 "Работа с реестром",vbInformation+vbOkOnly);
 //Считываем значение созданного параметра
В SRegValue=WshShell.RegRead(Root+Key+ValueName);
 //Выводим на экран полученное значение
В WshShell.Popup(Root+Key+ValueName+"="+SRegValue,0,
 "Работа с реестром",vbInformation+vbOkOnly);
}
//Запрос на удаление параметра
Res=WshShell.Popup("Удалить параметрn"+Root+Key+ValueName+"?",0,
 "Работа с реестром",vbQuestion+vbYesNo);
if (Res==vbYes) { //Нажата кнопка Да
 //Удаляем параметр
В WshShell.RegDelete(Root+Key+ValueName);
 WshShell.Popup("Параметрn"+Root+Key+ValueName+" удален!",0,
 "Работа с реестром",vbInformation+vbOkOnly);
}
//Запрос на удаление раздела
Res=WshShell.Popup("Удалить разделn"+Root+Key+"?",0,
 "Работа с реестром",vbQuestion+vbYesNo);
if (Res==vbYes) { //Нажата кнопка Да
 //Удаляем раздел
В WshShell.RegDelete(Root+Key);
 WshShell.Popup("Разделn"+Root+Key+" удален!",0,
 "Работа с реестром",vbInformation+vbOkOnly);