次の方法で共有


デバイス イベントのハンドラーを登録する方法

ハンドラーは、自動再生のソフトウェア部分を定義します。 ソフトウェアのアイコンとフレンドリ名、インスタンス化するコンポーネント オブジェクト モデル (COM) コンポーネント、およびイベントに応答してコンポーネントを初期化する方法を定義します。 特定のイベントの各ハンドラーは、適切な EventHandler キーの下の値として登録されます。 そのイベントが検出されると、そのイベントに登録されているすべてのハンドラーの一覧からハンドラーを選択するように求められます。

Instructions

ハンドラーとそれに関連付けられている値は、AutoplayHandlers Handlers\ キーで定義されます。 サブキーは、システムがデバイスの内容を直接読み取ることができるかどうか、またはデバイスが独自のインターフェイスを介してシステムにコンテンツを提供するかどうかによって異なります。

次の例は、デジタル ビデオ カメラや .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 値が推奨されます。 どちらを使用する場合でも、 IHWEventHandler インターフェイスを実装する COM コンポーネントを指す必要があります。

 

Action 値は、リテラル値として入力できます。たとえば、この例に示すように "音楽を再生" したり、リソース文字列を含むファイル名として入力したりできます。 Provider 値は、リテラル値として入力することも、リソース文字列を含むファイル名として入力することもできます。 AutoPlay は、Action 値と Provider 値を "using" という単語と組み合わせて、UI に表示されるわかりやすいキャプションを作成します。 この例では、結果のキャプションは "Windows メディア プレーヤー を使用して音楽を再生する" です。

DefaultIcon 値は、バイナリ ファイル内の .ico ファイルまたはリソースを指します。 バイナリ ファイル名の後に続く数値が 0 以上の場合は、そのバイナリ ファイル内のアイコンのインデックス値になります。 負の値の場合は、アイコン リソース ID になります。 負のインデックス値をお勧めします。 .ico ファイルの場合、値は必要ありません。 パスでは環境変数を使用することをお勧めします。

InitCmdLine 値は、他のメソッドが呼び出される前に 、IHWEventHandler::Initialize メソッドを介して変更されていない状態で渡されます。

次の例は、CD-ROM ドライブやその他のリムーバブル ディスクなど、直接読み取ることができるデバイスに使用されるサブキーと値を示しています。 ここでも、ハンドラーの例は 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 値は、リテラル値ではなくリソース文字列を含むファイル名として表示されますが、参照する文字列も同じ方法で使用されます。 これらは"using" という単語と組み合わせて、前に説明したようにわかりやすいキャプションを形成します。

InvokeProgID と InvokeVerb の値は、CLSID、InitCmdLine、および ProgID を置き換えます。 InvokeProgID と InvokeVerb の値は、次のレジストリ エントリに示すように、 HKEY_CLASSES_ROOTにあるキー名と一致します。 この一連のサンプル キーは、前に説明した特定の Handler の例に対応しています。

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

CoCreateInstance 関数は CLSID を使用して適切なアプリケーションを実装します。

これら 2 つの方法のいずれかでハンドラーを定義した後、特定のイベントに登録する必要があります。 これを行うには、[ EventHandlers] で、そのイベントのキーの値としてハンドラー名を指定します。 次の例は、 MyHandler を GenericVolumeArrival イベントのハンドラーとして登録する方法を示しています。 データ値が割り当てされていません。

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

IHWEventHandler

Cocreateinstance