Данная статья была написана для журнала Мой компьютер.
В предыдущих статьях данной серии мы с вами уже рассмотрели общие возможности нового механизма автозапуска, а также способы его отключения и включения, и, конечно, способы его настройки при помощи мастера Автозапуск папки Панель управления. Теперь пришла пора научиться работать с механизмом хранения параметров автозапуска в реестре. Эти сведения могут быть полезны разработчикам, которые хотели бы реализовать в создаваемой программе возможности по работе с механизмом автозапуска операционной системы Windows
Vista.
Все дополнительные команды по работе с содержимым носителей (помимо команд Не выполнолнять никаких действий, Спрашивать каждый раз и Открыть папку для просмотра файлов используя Проводник) хранятся в параметрах строкового типа подразделов ветви реестра HKLM\Software\Microsoft\Windows\CurrentVersion\explorer\AutoplayHandlers\EventHandlers.
Содержимое каждого выпадающего списка, отображаемого в мастере Автозапуск (а следовательно, и содержимое диалога Автозапуск для конкретного типа содержимого носителя), формируется отдельным дочерним подразделом данной ветви реестра. Основные из этих подразделов перечислены ниже.
PlayCDAudioOnArrival. Звуковой CD.
PlayDVDMovieOnArrival. Фильмы на DVD.
PlayEnhancedCDOnArrival. Звуковой улучшенный CD.
AutorunINFLegacyArrival. Программы и игры.
HandleCDBurningOnArrival. Чистый CD.
PlayEnhancedDVDOnArrival. Фильмы на улучшенном DVD.
PlayMusicFilesOnArrival. Звуковые файлы.
PlayVideoFilesOnArrival. Видео файлы.
ShowPicturesOnArrival. Изображения.
HandleDVDBurningOnArrival. Чистый DVD.
MixedContentOnArrival. Смешанное содержимое.
PlayBluRayOnArrival. Фильмы на диске Blu-ray.
PlayDVDAudioOnArrival. Звуковой DVD.
PlayHDDVDOnArrival. Фильмы на HD DVD.
PlaySuperVideoCDMovieOnArrival. Супервидео CD.
PlayVideoCDMovieOnArrival. Видео CD.
Содержимое выпадающего списка мастера Автозапуск формируется при помощи параметров строкового типа, расположенных в ветвях реестра вида HKLM\Software\Microsoft\Windows\CurrentVersion\explorer\AutoplayHandlers\EventHandlers\«подраздел выпадающего списка, описанный выше». Названия этих параметров определяются названиями подразделов ветви HKLM\Software\Microsoft\Windows\CurrentVersion\explorer\AutoplayHandlers\Handlers. Именно при помощи подразделов данной ветви реестра определяется не только
название действия в выпадающем списке, но и результаты применения соответствующего действия.
Теперь давайте перечислим названия основных подразделов ветви HKLM\Software\Microsoft\Windows\CurrentVersion\explorer\AutoplayHandlers\Handlers.
EhomeMusicDropTarget. Команда Воспроизводить звуковой CD. По умолчанию данная команда отображается: Звуковой CD, Звуковой улучшенный CD.
MSOpenFolder. Команда Открыть папку для просмотра файлов. По умолчанию данная команда отображается во всех списках.
MSTakeNoAction. Команда Не выполнять никаких действий. По умолчанию данная команда отображается во всех списках.
MSPromptEachTime. Команда Спрашивать каждый раз. По умолчанию данная команда отображается во всех списках.
MSAutoRun. Команда Установить или выполнить программу. По умолчанию данная команда отображается: Звуковой улучшенный CD, Программы и игры, Звуковой улучшенный DVD.
EHomeVideosHandler. Команда Воспроизводить. По умолчанию данная команда отображается: Видео файлы.
MSShowPicturesOnArrival. Команда Просмотреть изображения. По умолчанию данная команда отображается: Изображения.
EHomePhotosHandler. Команда Просмотреть. По умолчанию данная команда отображается: Изображения.
MSPhotoAcquireDropHandler. Команда Импортировать изображения. По умолчанию данная команда отображается: Видео файлы, Изображения.
MagicUSBCable. Команда Перенос файлов и параметров настройки.
MSDVDArrivalDvdMaker. Команда Записать видео-DVD. По умолчанию данная команда отображается: Чистый DVD.
MSPlayMediaOnArrival. Команда Воспроизводить.
MSSHAudioDevHandler. Команда Просмотреть музыкальные файлы.
MSVideoCameraArrivalCaptureWizard. Команда Импорт видео.
MSWPDNetworkConfigHandler. Команда Настройка устройства для сетевого доступа.
MSWPDShellNamespaceHandler. Команда Открыть устройство для просмотра файлов.
Итак, результат выбора определенного действия из диалога Автозапуск определяется при помощи параметров строкового типа ветви реестра HKLM\Software\Microsoft\Windows\CurrentVersion\explorer\AutoplayHandlers\Handlers\«идентификатор команды выпадающего списка». Ниже перечислены основные из этих параметров.
Action. Содержит название действия, отображаемое в диалоге Автозапуск.
DefaultIcon. Определяет иконку, отображаемую в диалоге Автозапуск.
InvokeProgId. Содержит идентификатор действия, выполняемого при выборе данного элемента диалога Автозапуск. Само действие описывается в параметре (по умолчанию) ветви реестра HKCR\«значение параметра InvokeProgId»\shell\«значение параметра InvokeVerb»\command.
InvokeVerb. Определяет идентификатор конкретной команды, которая будет выполнена при выборе соответствующего действия из диалога Автозапуск.
Provider. Определяет программу или библиотеку, которая реализует возможность выполнения данной команды.
Пример 1: удаление лишних команд
Чтобы лучше понять теоретическую часть, давайте рассмотрим два примера, которые могут вам пригодиться.
Первый пример достаточно простой. Давайте попробуем удалить какие-либо команды из диалога Автозапуск. Например, на рисунке 1 представлен достаточно милый диалог Автозапуск, страдающий только одной проблемой — лишним весом.
Рисунок 1
Зная себя, я с уверенностью могу сказать, что такие команды данного диалога, как Воспроизводить звуковой CD, Play CD Audio, а также все команды, добавленные iTunes, мне совершенно не нужны. А если они мне не нужны, тогда зачем на них постоянно смотреть? Давайте их уберем.
Для этого достаточно отредактировать содержимое ветви реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\AutoplayHandlers\EventHandlers\PlayCDAudioOnArrival, в которой, как мы уже знаем, определяются команды, отображаемые в диалоге Автозапуск для звукового CD. В этой ветви реестра находится куча строковых параметров, из которых нужно оставить только MSPlayCDAudioOnArrival и MSRipCDAudioOnArrival. Остальные можно переименовать. В итоге, наш диалог похудел настолько, насколько даже и не снилось
тем людям, которые ходят со значками «Спроси меня, как я похудел» (рис. 2).
Рисунок 2
Пример 2: добавление своей собственной команды
Следующий пример будет посложнее. Мы попробуем добавить в диалог Автозапуск свою собственную команду. Например, давайте добавим команду, которая будет копировать все содержимое диска/носителя в каталог c:\tmp. Наша команда будет отображаться для носителей с любым содержимым.
Если мы хотим, чтобы команда отображалась для любых носителей, ее событие нужно добавить к ветви реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\AutoplayHandlers\EventHandlers\UnknownContentOnArrival. Допустим, добавим к этой ветви реестра параметр строкового типа MyTEST.
После того, как мы добавили событие MyTEST, нам необходимо создать это событие. Для этого необходимо создать ветвь реестра HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\explorer\AutoplayHandlers\Handlers\MyTEST, после чего создать в ней как минимум, следующие параметры строкового типа.
Action. Определяет название команды в диалоге Автозапуск. Например, назовем свою команду именем Copy to.
DefaultIcon. Определяет иконку, которая будет отображаться напротив команды в диалоге Автозапуск. Если у вас есть подходящая иконка, укажите путь к ней. Мы же укажем значение shell32.dll,34 (то есть, значок с идентификатором 34, расположенный в библиотеке shell32.dll).
InvokeProgID. Определяет название подраздела в корневом разделе HKCR, в котором будет описана команда, запускаемая нашим событием. Например, назовем наш подраздел именем CpyTo.MY.
InvokeVerb. Определяет идентификатор команды в нашем подразделе CpyTo.MY. Например, пусть будет команда open.
Provider. Необходимо указать провайдер, который выполнит нашу команду. Поскольку собственного провайдера у нас нет, воспользуемся стандартным, и запишем строку @%SystemRoot%\system32\shell32.dll,-17411.
Идем дальше. В параметре InvokeProgID мы указали, что подразделом нашей команды будет CpyTo.MY. Пришла пора создать его. С учетом введенных нами значений для параметров InvokeProgID и InvokeVerb, нам необходимо создать ветвь реестра HKCR\CpyTo.MY\shell\open\command, после чего в параметре (по умолчанию) данной ветви реестра указать команду, которая будет выполнена при выборе нашего элемента диалога Автозапуск. Например, для копирования содержимого диска можно воспользоваться командой cmd.exe /k xcopy
/S %1*.* c:\tmp\*.*. Общий итог наших действий представлен на рисунке 3.
Рисунок 3
Чтобы было проще понять и воспользоваться данным примером, давайте приведем REG-файл всех выполненных нами действий.