Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Секреты Windows: статьи о реестре, rundll32.exe, программах Windows Vista: Реализация механизма Автозапуск в реестре


В конец записи

оцените: 1 2 3 4 5

Данная статья была написана для журнала Мой компьютер.

В предыдущих статьях данной серии мы с вами уже рассмотрели общие возможности нового механизма автозапуска, а также способы его отключения и включения, и, конечно, способы его настройки при помощи мастера Автозапуск папки Панель управления. Теперь пришла пора научиться работать с механизмом хранения параметров автозапуска в реестре. Эти сведения могут быть полезны разработчикам, которые хотели бы реализовать в создаваемой программе возможности по работе с механизмом автозапуска операционной системы 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-файл всех выполненных нами действий.

Оригинал статьи: http://www.onestyle.com.ua/txt.php?u=155

В избранное