IT→ Существует ли раздел в реестре на VBScript
Дек 26, 2011

В предыдущей статье описывался один из способов определения установленной программы на компьютере пользователя. Реализация данного способа была выполнена в виде функции на языке VBScript.
Если присмотреться более внимательно, можно обнаружить, что в ней использовался, достаточно, нестандартный способ проверки существования ключа. Стоит заметить, что речь идет именно об определении ключа, а не параметра или его значения.
Для того, чтобы определить существует ключ или нет, функция проверяет параметр по умолчанию, который всегда присутствует в любом разделе реестра. Значение дефолтного параметра чаще всего не задано, но тем не менее он есть.
Поэтому, чтобы проверить наличие определенного раздела в реестре, достаточно проверить его параметр по умолчанию. На VBScript, чтобы получить значение параметра по умолчанию какого-либо раздела, следует к имени раздела, в конце поставить дополнительный слэш.
Приведем примеры чтения значений из реестра, из которых наглядно показывается в чем их отличие.
Извлечение значение из параметра Windows, который находится в разделе HKLM\SOFTWARE\Microsoft\
WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows")
Извлечение значение из параметра по умолчанию, который находится в разделе HKLM\SOFTWARE\Microsoft\Windows\
WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows\")
Также нужно учитывать, что если раздела не существует, как и его параметра по умолчанию, то будет выброшено исключение, которое нужно корректно обработать.
Суммировав все вышесказанное, мы получим достаточно простую функцию, листинг которой представлен далее.
Листинг 1. Функция проверки существования раздела.
Function KeyExists(KeyName)
On Error Resume Next
Set WshShell = CreateObject("WScript.Shell")
WshShell.RegRead(KeyName & "\")
If Err.Number <> 0 Then
KeyExists = False
Else
KeyExists = True
End If
End Function
А чтобы картина была полной, ниже показана функция, с помощью которой проверяется существование параметра в реестре.
Листинг 2. Функция проверки существования параметра.
Function ValueExists(ValueName)
On Error Resume Next
Set WshShell = CreateObject("WScript.Shell")
WshShell.RegRead(ValueName)
If Err.Number <> 0 Then
ValueExists = False
Else
ValueExists = True
End If
End Function





