Роман Клименко - Недокументированные и малоизвестные возможности Windows XP
[version]
signature="$Chicago$"
[Optional Components]
TopMain
Interface
Settings
HTMcomputer
Versus
[TopMain]
OptionDesc = Мои настройки
Tip = Варианты настройки интерфейса и конфигурации
IconIndex = 0
[Interface]
OptionDesc = Интерфейс Windows
Tip = Варианты настройки интерфейса
IconIndex = 4
Parent = TopMain
[Settings]
OptionDesc = Конфигурация Windows
Tip = Варианты настройки конфигурации компьютера
IconIndex = 16
Parent = TopMain
[HTMcomputer]
OptionDesc = Скрыть название моего компьютера
Tip = Скрывает название значка Мой компьютер
IconIndex = 0
Parent = Interface
AddReg = AddHTM
Uninstall = HTMUn
Modes = 0,1,2,3
[Versus]
OptionDesc = Отобразить версию на Рабочем столе
Tip = отображает версию операционной системы на Рабочем столе пользователя
IconIndex =4
Parent = Interface
AddReg =AddVersion
Uninstall =VersUn
Modes = 0,1,2,3
[AddHTM]
HKCR, "CLSID{20D04FE0-3AEA-1069-A2D8-08002B30309D}ShellFolder", WantsFORDISPLAY, 0x00010001, 1
[AddVersion]
HKCU, "Control PanelDesktop", PaintDesktopVersion, 0x00010001, 1
[HTMUn]
DelReg = HTMDel
[VersUn] AddReg = VersDel
[HTMDel]
HKCR, "CLSID{20D04FE0-3AEA-1069-A2D8-08002B30309D}ShellFolder", WantsFORDISPLAY
[VersDel]
HKCU, "Control PanelDesktop", PaintDesktopVersion, 0x00010001, 0
Формат INF-файла для создания компонентов в диалоге установки Windows немного отличается от обычного формата INF-файлов. Во-первых, основной блок INF-файла обязательно должен называться [Optional Components], иначе INF-файл работать не будет. Блок включает в себя список других блоков данного INF-файла. Каждый из описанных в [Optional Components] блоков определяет один раздел в диалоге установки компонентов Windows.
Блок описания раздела установки компонента содержит следующие ключевые слова.
■ OptionDesc — определяет название раздела, отображаемого в диалоге Установка компонентов Windows.
■ Tip — указывает подсказку для раздела, отображаемого в нижней части диалога Установка компонентов Windows.
■ Icon Index — определяет индекс значка, отображаемого напротив данного раздела в диалоге Установка компонентов Windows. Например, идентификатор 0 определяет значок компьютера, идентификатор 2 — монитора, 14 — принтера.
■ Parent — указывает название блока INF-файла, описывающего раздел, который будет родителем для нашего раздела в диалоге установки компонентов Windows. Если данное ключевое слово отсутствует, то наш раздел будет отображаться непосредственно в диалоге установки конфигурации Windows.
■ Uninstall — определяет блок INF-файла, вызываемый для данного компонента при установке созданного раздела (устанавливать можно только разделы, входящие непосредственно в список диалога установки компонентов (корневые), а не отдельно разделы, вложенные в корневой), если флажок напротив данного компонента будет снят.
В блоке установки компонента можно также пользоваться такими стандартными ключевыми словами, как AddReg, BitReg, DelReg, CopyFiles и т.д. Все блоки, описанные в этих ключевых словах, будут выполняться при установке флажка напротив соответствующего компонента.
Теперь добавим ссылку на наш компонент в файл sysoc.inf. Для того чтобы так сделать, необходимо в блок [Components] добавить строку следующего вида: hello=ocgen.dll, OcEntry, prim2.inf, , 7. Здесь test2 определяет идентификатор присоединяемого INF-файла, a prim.inf является названием самого присоединяемого файла. Стоит еще сказать, что созданный INF-файл должен находиться в каталоге %systemroot%inf.
ПРИМЕЧАНИЕ
В строке также указывается название библиотеки и функция из этой библиотеки, которая будет устанавливать наши компоненты. Как правило, нет никакой разницы между различными функциями различных библиотек. Главное, чтобы они умели работать с диалогом установки компонентов. Поэтому была выбрана первая попавшаяся в файле sysoc.inf библиотека и функция для нее.
На рис. 15.3 показан результат добавления компонентов.
Рис. 15.3. Создание разделов диалога
INF-файл для логического диска
Еще одной возможностью, которую предоставляют INF-файлы, является добавление в контекстное меню логических дисков своих команд, а также изменение значка логического диска. Для этого необходимо создать специальный файл, который должен называться autorun.inf. Созданный INF-файл необходимо поместить в корень логического диска. Рассмотрим пример создания файла autorun.inf.
Листинг 15.14. Пример создания файла autorun.inf[autorun]
icon = E:imagesfotooArt_galeryp.BMP
shell = open
shellRunPhcommand = photoshop.exe
shellRunPh = Запустить photoshop
Файл autorun.inf не имеет блока версии INF-файла, но должен иметь блок [autorun]. Содержимое этого блока довольно просто в понимании, если вы прочитали главу 8 о корневом разделе HKEY_CLASSES_ROOT. Как можно заметить, ключевые слова, начинающиеся со слова shell, являются просто разделами реестра, которые должны быть добавлены к ветви HKEY_CLASSES_ROOTDrive при отображении контекстного меню данного логического диска, а ключевое слово icon определяет значок диска. Тем не менее вспомним содержимое корневого раздела HKEY_CLASSES_ROOTDriveshell и опишем, что же конкретно делают ключевые слова данного файла.
■ shell = open — добавляет в параметр (По ум олчанию) раздела shell строку open. Эта строка говорит о том, что по умолчанию при двойном щелчке на диске он должен открываться.
■ ShellRunPh = Запустить photoshop — добавляет в параметр (По умолчанию) раздела RunPh строку Запустить photoshop. Эта строка определяет название команды в контекстном меню нашего диска.
■ ShellRunPhcommand = photoshop.exe — добавляет в параметр (По умолчанию) раздела command строку photoshop.exe. Эта строка определяет команду, которая будет выполняться при выборе из контекстного меню нашего диска соответствующей команды.
ПРИМЕЧАНИЕ
Для возможности работы файла autorun.inf необходимо, чтобы REG_BINARY-параметр NoDriveTypeAutoRun, расположенный в ветви реестра HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionPoliciesExplorer, был равен 0.
Как можно заметить, с помощью INF-файлов можно выполнить довольно много интересного. При этом рассмотренные возможности являются только каплей в море. Например, с помощью INF-файлов можно выполнить такие действия, как запуск или остановка служб, назначение прав на доступ к файлам, архивирование реестра и многое другое. Кроме того, INF-файлы постоянно усовершенствуются и еще неизвестно, что с их помощью можно будет выполнить завтра.
Глава 16
Сервер сценариев Windows
При рассказе об инструментарии управления WMI уже рассматривались примеры создания сценариев сервера сценариев Windows с использованием WMI, сейчас же рассмотрим некоторые объекты, доступ к которым можно получить в Windows XP, а также методы для работы с ними. Глава будет оформлена как справочник, так как работа с объектами легче, чем работа с инструментарием WMI, тем более что в Интернете можно найти очень много примеров работы с объектами.
Реестр
Для доступа к реестру необходимо подключить объект WshShell. Для этого нужно воспользоваться следующим объявлением: Set имя_нового_объекта = WScript.CreateObject("WScript. Shell"). Объект поддерживает следующие методы.
■ RegRead(путь к ветви реестра и имя параметра) — считывает из реестра значение параметра, указанного в качестве входного значения. При этом если входное значение будет завершаться косой чертой (), то будет считываться значение по умолчанию данной ветви реестра. Следует также напомнить, что путь к ветви реестра должен начинаться не с полного названия корневого раздела, а с его аббревиатуры. Например, возможны следующие аббревиатуры:
• HKCU — соответствует корневому разделу HKEY_CURRENT_USER;
• HKLM — HKEY_LOCAL_MACHINE;
• HKCR — HKEY_CLASSES_ROOT.
■ RegWrite путь к ветви реестра и имя параметра, значение параметра, тип параметра — редактирует значение существующего параметра реестра или создает новый параметр. При этом для его работы необходимо три входных значения, последнее из которых является аббревиатурой типа создаваемого параметра. Возможны следующие аббревиатуры:
• REG_SZ — строковый параметр;
• REG_DWORD — параметр REG_DWORD-типа;
• REG_BINARY — параметр REG_BINARY-типа.
Как и в методе RegRead, если путь к создаваемому параметру будет заканчиваться косой чертой, то будет изменяться значение параметра (По умолчанию).