Win32 API 日本語リファレンス
ホームUI.Shell › IDynamicHWHandler

IDynamicHWHandler

COM
IIDdc2601d7-059e-42fc-a09d-2afd21b6d5f7継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

AutoPlay から呼び出されます。登録済みハンドラーをユーザーに表示する前に、そのハンドラーに関する動的な情報を取得するメソッドを公開します。

解説(Remarks)

このインターフェイスが存在する以前は、アプリケーションがハンドラーを登録して自動再生プロンプトに表示される場合、そのハンドラーに関連付けられたコンテンツの種類(例: mp3 や avi)がメディアデバイス上で見つかる限り、ハンドラーは常に表示されていました。表示されるアイコンとアクション文字列も常に同じでした。

ハンドラーがこのインターフェイスを実装している場合、ハンドラーを表示する前に、AutoPlay はまず IDynamicHWHandler::GetDynamicInfo を呼び出して、このハンドラーをユーザーに提示するかどうかを判断します。ハンドラーを表示したい場合は、HKLM 配下の静的なハンドラー登録によって提供されるアクション文字列とは異なるアクション文字列を指定できます。

メソッド 1

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetDynamicInfo(LPWSTR pszDeviceID, DWORD dwContentType, LPWSTR* ppszAction)

AutoPlay ダイアログが表示される前に、特定のハンドラーを表示するかどうかを判断するためにシステムから呼び出されます。

pszDeviceIDLPWSTRinデバイスのパスまたはドライブのルートを示す文字列へのポインター。
dwContentTypeDWORDinコンテンツの種類。
ppszActionLPWSTR*out新しいアクション文字列へのポインター。既定のアクション文字列を使用する場合は NULL

戻り値

型: HRESULT

このハンドラーを表示する場合は S_OK を、非表示にする場合は S_FALSE を、それ以外の場合はエラー値を返します。

解説(Remarks)

動的ハンドラーを登録するには、"DynamicHWHandlerCLSID" という名前の REG_SZ を追加し、IDynamicHWHandler 実装の CLSID を割り当てます。

例:

HKLM
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  AutoplayHandlers
                     Handlers
                        YourHandler
                           DynamicHWHandlerCLSID = [REG_SZ] {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IDynamicHWHandler "{DC2601D7-059E-42FC-A09D-2AFD21B6D5F7}"
#usecom global IDynamicHWHandler IID_IDynamicHWHandler "{}"
#comfunc global IDynamicHWHandler_GetDynamicInfo  3 wstr,int,var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。