Поделиться через


Регистрация обработчика для события устройства

Обработчики определяют программную часть автозапуска. Они определяют значок и понятное имя программного обеспечения, а также компонент com для создания экземпляра и способ инициализации компонента в ответ на событие. Каждый обработчик для определенного события регистрируется как значение в соответствующем ключе EventHandler . При обнаружении этого события пользователю предлагается выбрать обработчик из списка всех обработчиков, зарегистрированных для этого события.

Инструкции

Обработчики и связанные с ними значения определяютсяв разделеОбработчики AutoplayHandlers\. Подразделы различаются в зависимости от того, может ли система считывать содержимое устройства напрямую или устройство предоставляет содержимое системе через собственный интерфейс.

В следующем примере показаны подразделы и значения, используемые для устройства, например цифровой видеокамеры или проигрывателя .mp3, который предоставляет свое содержимое системе через собственный интерфейс. Пример обработчика называется MyHandler.

HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  AutoplayHandlers
                     Handlers
                        MyHandler
                           Action [REG_SZ] = Play music
                           CLSID [REG_SZ] = {a51f2ed3-634e-4a97-9d55-efcf08e7b32f}
                           DefaultIcon [REG_EXPAND_SZ] = %ProgramFiles%\Windows Media Player\wmplayer.exe,0
                           InitCmdLine [REG_SZ] = /Play
                           ProgID [REG_SZ] = WMP.PlayMusicFiles
                           Provider [REG_SZ] = Windows Media Player

Примечание

Хотя в примере показаны значения ProgID и идентификатора класса (CLSID), на практике эти значения являются взаимоисключающими, так что присутствует только одно или другое. Предпочтительнее значение ProgID. Какой бы он ни использовался, он должен указывать на com-компонент, реализующий интерфейс IHWEventHandler .

 

Значение Action можно ввести как литеральное значение, например "Воспроизвести музыку", как показано в этом примере, или как имя файла со строкой ресурса. Можно также ввести значение поставщика в виде литерального значения или имени файла со строкой ресурса. Автозапуск объединяет значения Action и Provider со словом using, чтобы создать понятное подпись, отображаемое в пользовательском интерфейсе. В этом примере результирующий подпись — "Воспроизведение музыки с помощью Медиаплеер Windows".

Значение DefaultIcon указывает на ICO-файл или ресурс в двоичном файле. Если числовое значение, следующее за именем двоичного файла, равно нулю или больше, это значение индекса значка в этом двоичном файле. Если это отрицательное значение, то это идентификатор ресурса значка. Рекомендуется использовать отрицательные значения индекса. В случае ICO-файла значение не требуется. Рекомендуется использовать переменные среды в пути.

Значение InitCmdLine передается без изменения через метод IHWEventHandler::Initialize перед вызовом любых других методов.

В следующем примере показаны подразделы и значения, используемые для устройства, которое можно считывать напрямую, например дисковод КОМПАКТ-дисков или другой съемный диск. Опять же, обработчик примера называется MyHandler.

HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  AutoplayHandlers
                     Handlers
                        MyHandler
                           Action [REG_SZ] = @%systemroot%\System32\wiaacmgr.exe,-276
                           DefaultIcon [REG_EXPAND_SZ] = %systemroot%\System32\wiaacmgr.exe,-2
                           InvokeProgID [REG_SZ] = WIA.AutoPlayDropHandler
                           InvokeVerb [REG_SZ] = open
                           Provider [REG_SZ] = @%systemroot%\System32\wiaacmgr.exe,-101

В этом примере значения Action и Provider отображаются как имя файла со строкой ресурса, а не литеральными значениями, но строки, на которые они ссылаются, используются таким же образом. Они объединяются со словом "использование", чтобы сформировать понятное подпись, как описано ранее.

Значения InvokeProgID и InvokeVerb заменяют значения CLSID, InitCmdLine и ProgID. Значения InvokeProgID и InvokeVerb соответствуют именам ключей, которые находятся в HKEY_CLASSES_ROOT, как показано в следующей записи реестра. Этот набор примеров ключей соответствует конкретному примеру обработчика, описанному ранее.

HKEY_CLASSES_ROOT
   WIA.AutoplayDropHandler
      shell
         open
            DropTarget
               Clsid = {F1ABE2B5-C073-4dba-B6EB-FD7A5111DD8F}

Функция CoCreateInstance использует CLSID для реализации соответствующего приложения.

После определения обработчика в любом из этих двух способов необходимо зарегистрировать его для определенного события. Для этого необходимо указать имя обработчика в качестве значения для ключа этого события в разделе EventHandlers. В следующем примере показано, как зарегистрировать MyHandler в качестве обработчика для события GenericVolumeArrival. Ему не назначено значение данных.

HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  AutoplayHandlers
                     EventHandlers
                        GenericVolumeArrival
                           MyHandler [REG_SZ]

IHWEventHandler

CoCreateInstance