Udostępnij przez


Jak zarejestrować obsługę zdarzenia urządzenia

Programy obsługi definiują część oprogramowania autoodtwarzania. Definiują ikonę i przyjazną nazwę oprogramowania, a także składnik Component Object Model (COM), aby utworzyć wystąpienie i jak zainicjować składnik w odpowiedzi na zdarzenie. Każda procedura obsługi dotycząca określonego zdarzenia rejestruje się jako wartość pod odpowiednim kluczem EventHandler. Po wykryciu tego zdarzenia użytkownik zostanie poproszony o wybranie programu obsługi z listy wszystkich programów obsługi zarejestrowanych dla tego zdarzenia.

Instrukcje

Programy obsługi oraz związane z nimi wartości są zdefiniowane pod kluczem AutoplayHandlers\Handlers. Podklucze różnią się w zależności od tego, czy system może odczytać zawartość urządzenia bezpośrednio, czy też urządzenie dostarcza zawartość do systemu za pośrednictwem zastrzeżonego interfejsu.

W poniższym przykładzie przedstawiono podklucze i wartości używane dla urządzenia, takie jak cyfrowy aparat wideo lub odtwarzacz .mp3, który udostępnia jego zawartość systemowi za pośrednictwem zastrzeżonego interfejsu. Przykładowa procedura obsługi nosi nazwę 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

Notatka

Chociaż w przykładzie przedstawiono zarówno wartość ProgID, jak i identyfikator klasy (CLSID), w praktyce te wartości wzajemnie się wykluczają, tak aby tylko jeden lub drugi był obecny. Preferowana jest wartość ProgID. Niezależnie od tego, którego z nich się używa, powinien wskazywać na składnik COM, który implementuje interfejs IHWEventHandler.

 

Wartość Akcja można wprowadzić jako wartość dosłowną, na przykład "Odtwórz muzykę", jak pokazano w tym przykładzie, lub jako nazwę pliku zawierającą ciąg zasobu. Możesz również wprowadzić wartość dostawcy jako wartość dosłowną lub nazwę pliku z ciągiem zasobu. Funkcja AutoOdtwarzanie łączy wartość akcji i wartość dostawcy ze słowem "za pomocą" w celu utworzenia przyjaznego podpisu wyświetlanego w interfejsie użytkownika. W tym przykładzie wynikowy podpis to "Odtwarzanie muzyki przy użyciu programu Windows Media Player".

Wartość DefaultIcon wskazuje plik .ico lub zasób w pliku binarnym. Jeśli wartość liczbowa zgodna z nazwą pliku binarnego ma wartość zero lub większą, jest to wartość indeksu ikony w tym pliku binarnym. Jeśli jest to wartość ujemna, jest to identyfikator zasobu ikony. Zalecane są wartości indeksów ujemnych. W przypadku pliku .ico nie jest wymagana żadna wartość. Zaleca się używanie zmiennych środowiskowych w ścieżce.

Wartość InitCmdLine przechodzi niezmieniona przez metodę IHWEventHandler::Initialize, zanim zostaną wywołane inne metody.

W poniższym przykładzie przedstawiono podklucze i wartości używane dla urządzenia, które można odczytać bezpośrednio, takie jak dysk CD-ROM lub inny dysk wymienny. Ponownie przykładowa procedura obsługi nosi nazwę 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

W tym przykładzie wartości Akcja i Dostawca są wyświetlane jako nazwa pliku z ciągiem znaków zasobu, a nie wartościami dosłownymi, ale ciągi, które referują, są używane w ten sam sposób. Są one łączone ze słowem "using" w celu utworzenia przyjaznego podpisu, jak wyjaśniono wcześniej.

Wartości InvokeProgID i InvokeVerb zastępują wartości CLSID, InitCmdLine i ProgID. Wartości InvokeProgID i InvokeVerb są zgodne z nazwami kluczy znalezionych w HKEY_CLASSES_ROOT, jak pokazano w poniższym wpisie rejestru. Ten zestaw przykładowych kluczy odpowiada specyficznemu przykładowi handlera opisanemu wcześniej.

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

Funkcja CoCreateInstance używa identyfikatora CLSID do zaimplementowania odpowiedniej aplikacji.

Po zdefiniowaniu programu obsługi na jeden z tych dwóch sposobów należy go zarejestrować dla określonego zdarzenia. W tym celu należy podać nazwę programu obsługującego jako wartość dla klucza tego zdarzenia w sekcji EventHandlers. W poniższym przykładzie pokazano, jak zarejestrować MyHandler jako procedurę obsługi zdarzenia GenericVolumeArrival. Nie ma przypisanej wartości danych.

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

IHWEventHandler

CoCreateInstance