IWMPRemoteMediaServices
COM公式ドキュメント
IWMPRemoteMediaServices インターフェイスには、Player コントロールをホストするプログラムから Windows Media Player にサービスを提供するメソッドが含まれています。これらのメソッドは C++ で使用するように設計されており、一部のメソッドはリモート処理でのみ使用できます。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
GetServiceType メソッドは、ホストプログラムが埋め込みコントロールをリモートで実行したいかどうかを判断するために、Windows Media Player によって呼び出されます。
| pbstrType | LPWSTR* | inout | 次の値のうち 1 つ以上を含む BSTR へのポインター。
|
戻り値
このメソッドは HRESULT を返します。指定可能な値には次の表の値が含まれますが、これらに限定されません。
| 値 | 説明 |
|---|---|
| S_OK | メソッドは成功しました。 |
解説(Remarks)
コントロールが使用されていないときに、リモート化された Player のインスタンスをバックグラウンドで実行し続けることは避けてください。リモート化された Player コントロールのインスタンスは、その再生エンジンをフルモードの Player と共有するため、バックグラウンドインスタンスを実行し続けると予期しない動作が発生する可能性があります。たとえば、ファイルの再生中にユーザーがフルモードの Player を閉じることがあります。ユーザーは Player を閉じたときにファイルの再生が完全に停止することを期待しますが、再生エンジンがまだアクティブであるため、オーディオの再生が続く可能性があります。
Windows Media Player 10 では、pbstrType の値をスペースで区切って複数連結することで組み合わせて使用できます。たとえば、ダイアログボックスを表示せずにデジタルメディアコンテンツを検索する Windows Media Player 10 のリモート化されたインスタンスを使用するには、pbstrType の値として "Remote NoDialogs FindFolders" を使用します。
Windows Media Player 11 では、Player コントロールをリモートで埋め込むアプリケーションは、専用のオンラインストアを指定できます。その場合、サービスセレクターは無効になり、指定されたオンラインストアのみがユーザーに提供されます。詳細については、Remoting the Windows Media Player Control の「Specifying an Exclusive Online Store」を参照してください。
NoDialogs、FindFolders、および Exclusive:keyname は、Remote と組み合わせた場合にのみ有効です。これらの値は Local と組み合わせた場合はサポートされません。
RemoteNoDialogs 値は、Windows Media Player 9 シリーズとの下位互換性のためにサポートされています。(詳細については、Microsoft サポート技術情報 - 819756 を参照してください。) Windows Media Player 10 では、推奨される使用方法は "Remote NoDialogs" です。
Windows Media Player 10 Mobile: このメソッドはサポートされていません。
GetApplicationName メソッドは、リモート化されたコントロールをホストしているプログラムの名前を取得するために、Windows Media Player によって呼び出されます。
| pbstrName | LPWSTR* | inout | ホストプログラムの名前を含む BSTR へのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には次の表の値が含まれますが、これらに限定されません。
| 値 | 説明 |
|---|---|
| S_OK | メソッドは成功しました。 |
解説(Remarks)
このメソッドは、Windows Media Player コントロールをリモート化する場合にのみ使用されます。
Windows Media Player のフルモードでは、表示 メニューの 別のプログラムに切り替え の下にプログラム名が表示されます。
Windows Media Player 10 Mobile: このメソッドはサポートされていません。
GetScriptableObject メソッドは、スキン内のスクリプトコードから呼び出すことができるオブジェクトの名前とインターフェイスポインターを取得するために、Windows Media Player によって呼び出されます。
| pbstrName | LPWSTR* | inout | スクリプト可能なオブジェクトの名前を含む BSTR へのポインター。 |
| ppDispatch | IDispatch** | out | スクリプト可能なオブジェクトの IDispatch インターフェイスへのポインターへのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には次の表の値が含まれますが、これらに限定されません。
| 値 | 説明 |
|---|---|
| S_OK | メソッドは成功しました。 |
解説(Remarks)
埋め込みコントロールのユーザーインターフェイスは、Windows Media Player のスキンテクノロジを使用してカスタマイズできます。IWMPRemoteMediaServices::GetCustomUIMode メソッドを使用して、スキンファイルの場所を指定する必要があります。この方法で使用されるスキンは、IWMPRemoteMediaServices::GetScriptableObject メソッドを通じて Windows Media Player によって自動的に取得されるスクリプト可能なオブジェクトを介して、コントロールのホストと通信できます。
このメソッドを使用するために、埋め込みの Windows Media Player コントロールをリモート化する必要はありません。
Windows Media Player 10 Mobile: このメソッドはサポートされていません。
GetCustomUIMode メソッドは、Windows Media Player コントロールに適用するスキンファイルの場所を取得するために、Windows Media Player によって呼び出されます。
| pbstrFile | LPWSTR* | inout | スキンファイルの場所を含む BSTR へのポインター。 |
戻り値
このメソッドは HRESULT を返します。指定可能な値には次の表の値が含まれますが、これらに限定されません。
| 値 | 説明 |
|---|---|
| S_OK | メソッドは成功しました。 |
解説(Remarks)
このメソッドを使用すると、Windows Media Player のスキンテクノロジを使用して、埋め込みコントロールのユーザーインターフェイスをカスタマイズできます。この方法で使用されるスキンは、IWMPRemoteMediaServices::GetScriptableObject メソッドを通じて Windows Media Player によって自動的に取得されるスクリプト可能なオブジェクトを介して、コントロールのホストと通信できます。
埋め込みコントロールにスキンファイルを適用するには、値 "custom" を指定して IWMPPlayer.put_uiMode を呼び出す必要があります。GetCustomUIMode の実装では、"file://" にローカルコンピューター上にあるスキン定義ファイルのパスとファイル名を続けた値も返す必要があります。
このメソッドを使用するために、埋め込みの Windows Media Player コントロールをリモート化する必要はありません。
Windows Media Player 10 Mobile: このメソッドはサポートされていません。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWMPRemoteMediaServices "{CBB92747-741F-44FE-AB5B-F1A48F3B2A59}" #usecom global IWMPRemoteMediaServices IID_IWMPRemoteMediaServices "{}" #comfunc global IWMPRemoteMediaServices_GetServiceType 3 var #comfunc global IWMPRemoteMediaServices_GetApplicationName 4 var #comfunc global IWMPRemoteMediaServices_GetScriptableObject 5 var,sptr #comfunc global IWMPRemoteMediaServices_GetCustomUIMode 6 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IWMPRemoteMediaServices "{CBB92747-741F-44FE-AB5B-F1A48F3B2A59}" #usecom global IWMPRemoteMediaServices IID_IWMPRemoteMediaServices "{}" #comfunc global IWMPRemoteMediaServices_GetServiceType 3 sptr #comfunc global IWMPRemoteMediaServices_GetApplicationName 4 sptr #comfunc global IWMPRemoteMediaServices_GetScriptableObject 5 sptr,sptr #comfunc global IWMPRemoteMediaServices_GetCustomUIMode 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。