ハンドラーは、自動再生のソフトウェア部分を定義します。 ソフトウェアのアイコンとフレンドリ名、インスタンス化するコンポーネント オブジェクト モデル (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]
関連トピック