Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Секреты Windows: статьи о реестре, rundll32.exe, программах Книга Реестр Windows Vista. Сервер сценариев Windows - 1


Если у вас есть вопросы по работе с операционной системой Windows, вы можете задать их нам и нашим посетителям в разделе Форум (http://onestyle.com.ua/q.php). Быть может, мы сможем помочь вам решить возникшие проблемы.

Новости нашего сайта:

В конец записи

Книга "Реестр Windows Vista. На 100%", Глава 1. Основные сведения о реестре, 1.3. Языки сценариев и реестр: Сервер сценариев Windows (WSH).

Сервер сценариев Windows является еще одним способом автоматизации возникающих у администратора задач управления операционной системой Windows. Данный способ предоставляет программисту безумно большое количество возможностей. Фактически, с его помощью вы можете управлять не только реестром, но и всеми возможностями операционной системы Windows. Однако на страницах данной книги нас интересует только реестр.

Сервер сценариев Windows поддерживает два языка программирования — VBScript и JScript. На страницах данной книги будут приведены примеры только на языке VBScript.

Для доступа к реестру с помощью WSH используется объект WshShell. Подключение данного объекта к сценарию можно выполнить при помощи вызова: Set имя_нового_объекта = WScript.CreateObject("WScript.Shell"). Ниже будут описаны свойства и методы, поддерживаемые объектом WshShell.

Просмотр параметров реестра

Чего нельзя сделать при помощи inf-файлов, так это просматривать текущие значения параметров реестра. А вот сервер сценариев Windows такую возможность предоставляет (зато в сервере сценариев нет метода для редактирования битовой маски параметра).

Для просмотра значения параметров реестра объект WshShell предоставляет свойство RegRead. Оно имеет всего один входящий параметр — путь к ветви реестра и название параметра.

Как и в inf-файлах, в сценариях WSH при указании ветви реестра названия корневых разделов нужно заменять обозначением HKCU, HKLM, HKCR.

Например, если нужно считать значение параметра PaintDesktopVersion, расположенного в ветви реестра HKCU\Control Panel\Desktop, входящим параметром свойства RegRead должен быть параметр HKCU\Control Panel\Desktop\PaintDesktopVersion.

Если же вам нужно считать значение параметра по умолчанию, тогда входящий параметр свойства RegRead должен заканчиваться на символ косой черты («\»). Например, если нужно считать значение параметра (по умолчанию), расположенного в ветви реестра HKCU\Control Panel\Desktop, тогда входящим параметром свойства RegRead должен быть параметр HKCU\Control Panel\Desktop\.

Примеры

В качестве примера давайте рассмотрим очень простой сценарий, который считывает значение параметра реестра и отображает его на экране (листинг 2.06).

Листинг 2.06. Чтение параметров реестра
'подключаемся к объекту WshShell
set wsh1 = WScript.CreateObject("WScript.Shell")

'считываем название операционной системы пользователя из реестра
OS = wsh1.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName")

'выводим название на экран
MsgBox "В данный момент вы работаете с операционной системой " & OS

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

Чтобы обойти эту особенность свойства RegRead, необходимо использовать оператор On Error Resume Next. Данный оператор говорит обработчику кода сценария, что он не должен аварийно завершать работу сценария и отображать сообщение об ошибке при обнаружении ошибок в коде, расположенном ниже этого оператора.

Вместе с оператором On Error Resume Next можно использовать метод err.Number, который позволяет определить, произошла ли ошибка при обработке кода, а также номер этой ошибки. Если ошибка все-таки произошла, тогда при помощи метода err.Clear можно очистить флаг ошибки.

Методы объекта err являются удобным средством получения информации о возникающих в сценариях ошибках. Объект err поддерживает следующие методы.

Description. Возвращает строку описания возникшей ошибки, если такая строка существует.

HelpContext. Возвращает идентификатор раздела интерактивной справки, в котором содержится описание данной ошибки.

Number. Возвращает цифровой код ошибки. Если не все ошибки имеют свое собственное строковое описание, то цифровой код поддерживается практически всеми ошибками. Например, код ошибки -2147217865 говорит о том, что сценарий пытается обратиться к объекту (ветвь реестра, параметр, файл), который не существует.

Source. Возвращает название объекта и свойство, работа которого вызвала ошибку.

Clear. Очищает флаг ошибки, отображаемый методом err.Number, присваивая ему значение 0.

Raise «код ошибки, меньший числа 65535», «описание возникшей ошибки». Генерирует пользовательскую ошибку.

Ниже представлен доработанный код сценария, ранее приведенного в листинге 2.06. В этом сценарии мы пользуемся оператором On Error Resume Next, а также создаем свою функцию для считывания параметров реестра.

Листинг 2.07. Чтение параметров реестра, часть II
'функция для чтения параметров реестра
Function ReadP(Path)
   set wsh1 = WScript.CreateObject("WScript.Shell")   

   'запрещаем обработчику реагировать на ошибки
   On Error Resume Next
  
   a = wsh1.RegRead(Path)
   'проверяем, произошла ли ошибка при чтении параметра реестра (если
   'err.Number = 0, тогда ошибки не было, иначе была)
   if err.Number <> 0 then
      ReadP = EMPTY
      err.Clear
   else
      ReadP = a
   End if

   'удаляем объект из памяти, чтобы не засорять ее при частом вызове
   'функции.
   Set wsh1 = Nothing
End Function

'считываем значение параметра, содержащего путь к музыкальному файлу,
'воспроизводимому при завершении сеанса пользователя
a = ReadP("HKCU\AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Current\")

'если вместо значения параметра нам был передан пустой объект, значит
'параметра не существует
if a = EMPTY then
  MsgBox "При завершении сеанса пользователя никакого звука не воспроизводится"
else
  MsgBox "При завершении сеанса пользователя воспроизводится следующий музыкальный файл: " & a
End if

Редактирование параметров реестра

Для редактирования значения параметров применяется свойство RegWrite объекта WshShell.

Данное свойство имеет три входящих параметра: «путь к ветви реестра и имя параметра», «значение параметра», «идентификатор типа параметра».

Способ формирования пути к ветви реестра нам уже знаком, поэтому единственным входящим параметром, с которым могут возникнуть трудности, является параметр, идентифицирующий тип параметра реестра. Он может принимать одно из следующих значений: REG_SZ, REG_EXPAND_SZ, REG_DWORD, REG_BINARY. Параметры других типов создавать и редактировать нельзя.

В качестве примера давайте рассмотрим сценарий, который запрашивает у пользователя данные, после чего заносит их в параметр реестра (листинг 2.08).

В приведенном примере для определения корректности вводимых данных мы использовали функции VarType и IsNumeric. Первая из этих функций возвращает идентификатор типа содержимого, которое в данный момент хранится в переменной. Например, данная функция может возвращать следующие константы значения переменной: vbEmpty (0), vbNull (1), vbInteger (2), vbLong (3), vbSingle (4), vbDouble (5), vbCurrency (6), vbDate (7) и т.д. Функция IsNumeric возвращает значение True, если содержимое переменной можно представить в виде числа.

Удаление параметров реестра

Для удаления параметров реестра сервер сценариев Windows предоставляет свойство RegDelete объекта WshShell.

Свойство RegDelete имеет всего один входящий параметр — путь к ветви реестра и имя удаляемого параметра. Как и для любого другого из рассмотренных нами выше свойств, вы можете удалить значение параметра (по умолчанию), если завершите ветвь реестра входящего параметра косой чертой.

Как и свойство RegRead, свойство RegDelete имеет одну особенность — аварийное завершение работы сценария в том случае, если удаляемый параметр реестра не существует. Поэтому при работе со свойством RegDelete также нужно использовать оператор On Error Resume Next.

Продолжение следует

Рейтинг: 0 
Оцените: 1 2 3 4 5
В начало записи
Оригинал статьи: http://www.onestyle.com.ua/txt.php?u=280

В избранное