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