- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания Недокументированные и малоизвестные возможности Windows XP - Роман Клименко
Шрифт:
Интервал:
Закладка:
ПРИМЕЧАНИЕ
Это может понадобиться в том случае, если необходимо значение не конкретного параметра реестра, а всех параметров одной ветви. При этом точно не известно, какие именно параметры могут находиться в данной ветви.
За выполнение перечисления параметров, расположенных в ветви реестра, отвечает метод EnumValues, принадлежащий классу StdRegProv. Данный класс определяет методы для доступа к реестру Windows XP (более функциональный аналог стандартного объекта Windows, рассмотренного выше) и принадлежит к пространству имен RootDefault. Мы не будем создавать целый работоспособный сценарий для описания работы данного метода — лучше создадим отдельную процедуру, которая будет выполнять перечисление параметров указанной ветви реестра, а также проверим ее работу с помощью записи в файл журнала выводимых значений.
Листинг 11.3. Энумерация параметров ветви реестраset objFS = CreateObject("Scripting.FIleSystemObject")
'Для вывода списка содержащихся в ветви реестра параметров мы будем
'использовать файл. В нашем случае – файл enum_log.txt на диске d:..
set objTextFile = objFS.CreateTextFile("d:enum_log.txt", 8, True)
'подключаем объект
Set obj = GetObject("winmgmts:{impersonationLevel=impersonate}!root/Default:StdRegProv")
'Переменная RootKey будет определять корневой раздел ветви, параметры
'которой мы будем перечислять. При этом корневые разделы идентифицируются
'в соответствии с правилами, определеннымивфайле Winreg.h. В файле
'определены следующие корневые разделы: HKEY_CLASSES_ROOT (0x80000000),
'HKEY_CURRENT_USER (0x80000001), HKEY_LOCAL_MACHINE (0x80000002),
'HKEY_USERS (0x80000003), HKEY_CURRENT_CONFIG (0x80000005), HKEY_DYN_DATA
'(0x80000006). В нашем случае будет использоваться корневой раздел
'HKEY_CURRENT_USER.
RootKey = &H80000001
Вызываем процедуру, которая и будет выполнять перечисление параметров. Для
'работы процедуры необходимы три параметра: ветвь реестра, параметры которой
'нужно перечислять (в нашем случае Control PanelDesktop), объект,
'определяющий текстовый документ, в который будут записываться параметры
'ветви, а также корневой раздел указанной ранее ветви, записанный в нашем
'случае в параметре RootKey. После работы процедуры закрываем открытый
'текстовый файл.
call EnumV("Control PanelDesktop", objTextFile, RootKey)
objTextFile.Close
Sub EnumV(Path, objTextFile, RootKey)
objTextFile.WriteLine ":::: Ветвь реестра: HKEY_CURRENT_USER" & Path & vbCrLf
'Выполняем перечисление параметров, расположенных в ветви реестра
'HKEY_CURRENT_USERControl PanelDesktop. Для этого используется метод
'EnumValues, для работы которого необходимы следующие параметры:
'– Корневой раздел ветви (в нашем случае параметр RootKey)
'– Остальной путь к ветви реестра (в нашем случае параметр RootKey,
'указываемый при вызове процедуры).
' – Переменная, в которую будут помещаться содержащиеся в ветви реестра
'параметры. В нашем случае назовем эту переменную Names
' – Переменная, в которую будет помещаться идентификатор типа параметра.
'В нашем случае назовем ее Types.
obj.EnumValues RootKey, Path, Names, Types
'Проверяем, существуют ли в указанной ветви реестра параметры. Во-первых,
'проверяется равенство нулю переменной Names, содержащей названия
'параметров. А во-вторых, проверяем на равенство нулю переменную Types.
'Переменные нужно проверять именно на равенство нулю, так как ноль
'возвращается методом EnumValues в случае ошибки.
if not IsNull(Names) and not IsNull(Types) Then
'Выполняем цикл, количество итераций которого указывается границами
'переменной types (количеством элементов в переменной types, так как это
'массив). Иными словами, выполняем цикл столько раз, сколько переменных было
'найдено в указанной ветви реестра.
for i = lbound(types) to ubound(types)
'При этом мы будем выполнять запись в текстовый файл в зависимости
'от типа переменной, указанного в переменной types. Для этого будем
'использовать выражение select case из-за особенности метода EnumValues.
'Особенностью этого метода является способ указания типа найденной
'переменной. Для этого используется массив types (в нашем случае),
'в который помещаются идентификаторы типа переменной, определенные
'в файле Winreg.h. Возможны следующие идентификаторы:
'1 – определяет переменную строкового типа;
'2 – определяет переменную расширенного строкового типа;
'3 – определяет переменную REG_BINARY-типа;
'4 – определяетпеременную REG_DWORD-типа;
'7 – определяет переменную REG_MULTI_SZ-типа.
select case types(i)
'Проверяем тип параметра и в зависимости от этого типа используем
'разные методы для получения значения параметра. Все методы для
'получения значений параметров реестра также описаны в классе
'StdRegProv. Мы используем следующие методы.
'GetStringValue – получение значения строкового типа.
'GetExpandedStringValue – получение значения расширенного строкового типа.
'GetBinaryValue – получение значения параметра REG_BINARY-типа.
'GetDWordValue – получение значения параметра REG_DWORD-типа.
'GetMultiStringValue – получение значения параметра REG_MULTI_SZ-типа.
'Все эти методы используют для своей работы следующие переменные:
'идентификатор корневого раздела ветви реестра, остальной путь к ветви
'реестра, имя параметра (в нашем случае элемент массива names), а также
'название переменной, в которую будет считываться значение данного
'параметра.
case 1
obj.GetStringValue RootKey, path, names(i), value
'После считывания значения параметра проверяем, не произошла ли ошибка
'при считывании (как обычно, значение нуль в переменной). Если ошибки нет,
'то записываем параметр и его значение в текстовый файл. Аналогично
'выполняется работа и с другими типами параметров, поэтому их мы описывать
'не будем.
If isnull(names(i)) or not isnull(value) then
objTextFile.WriteLine names(i) & " = REG_SZ: " & value
end if
case 2
obj.GetExpandedStringValue RootKey, path, names(i), value
if not isnull(names(i)) or not isnull(value) then
objTextFile.WriteLine names(i) & " = REG_EXPAND_SZ: " & value
end if
case 3
obj.GetBinaryValue RootKey, path, names(i), value
for j = lbound(value) to ubound(value)
value(j) = hex(cint(value(j)))
next
if not isnull(names(i)) or not isnull(value) then
objTextFile.WriteLine names(i) &" = REG_BINARY : "& _
join(value, ",")
end if
case 4
obj.GetDWordValue RootKey, path, names(i), value
if not isnull(names(i)) or value then
objTextFile.WriteLine names(i) & " = REG_DWORD : " & _
hex(value)
end if
case 7
obj.GetMultiStringValue RootKey, path, names(i), value
for j = lbound(value) to ubound(value)
value(j) = value(j)
next
if not isnull(names(i)) or not isnull(value) then
objTextFile.WriteLine names(i) &" = REG_MULTI_SZ : "& _
join(value, ",")
end if
end select
next
end if
End Sub
При написании сценария был использован не только метод EnumValues, но и другие методы класса StdRegProv. Это было необходимо для занесения в текстовый файл значений параметров, найденных в данной ветви реестра. Но это не все методы, описанные в классе StdRegProv. И поскольку большую часть книги все-таки составляют описания параметров реестра, хотя бы вкратце рассмотрим другие методы данного класса. Класс StdRegProv содержит следующие методы.
■ CreateKey — создает раздел в ветви реестра. Для его вызова необходимы следующие два параметра: идентификатор корневого раздела ветви реестра (аналог переменной RootKey приведенного сценария), а также остальной путь к ветви реестра, которую нужно создать (в том числе и сам создаваемый раздел реестра).
ПРИМЕЧАНИЕ
Если идентификатор корневого раздела не указан, то будет использоваться стандартный идентификатор &H80000002, говорящий о том, что ветвь находится в корневом разделе HKEY_LOCAL_MACHINE.