IWMPSubscriptionService
COM公式ドキュメント
Note このセクションでは、オンライン ストアでの使用を目的とした機能について説明します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Note このセクションでは、オンライン ストアでの使用を目的とした機能について説明します。
| hwnd | HWND | in | プラグインがユーザー インターフェイスを表示できるウィンドウのハンドル。 |
| pMedia | IWMPMedia* | in | Windows Media Player が再生しようとしているメディア オブジェクトへのポインター。 |
| pfAllowPlay | BOOL* | inout | BOOL へのポインター。true の場合、再生が許可されます。 |
戻り値
このメソッドは HRESULT を返します。
解説(Remarks)
Windows Media Player がこのメソッドを呼び出したときに、コードで時間のかかる処理を同期的に実行しないでください。代わりに、時間のかかるタスクは別のワーカー スレッドで実行する必要があります。
Windows Media Player は、デジタル メディア ファイルを開く前に allowPlay を呼び出します。これにより、オンライン ストアは、ライセンスされたコンテンツの再生を禁止したり、ライセンスの有効期限が切れている場合に新しいライセンスのダウンロードを開始したりする機会を得られます。
Windows Media Player が allowPlay を呼び出す時点ではデジタル メディア ファイルが開かれていないため、pMedia に対する特定のメソッドの呼び出しが機能しない場合があります。たとえば、IWMPMedia::getItemInfo を使用してメタデータを取得しようとすると失敗する可能性があります。
allowPlay メソッドは DRM を回避するものではありません。このメソッドが TRUE を返しても、再生のためのライセンスが更新されていない場合、Windows Media Player はコンテンツを再生しません。
ユーザーがライセンスを持っていない保護されたコンテンツをストリーミングする場合、allowPlay メソッドは呼び出されません。
Note このセクションでは、オンライン ストアでの使用を目的とした機能について説明します。
| hwnd | HWND | in | プラグインがユーザー インターフェイスを表示できるウィンドウのハンドル。 |
| pPlaylist | IWMPPlaylist* | in | プレイリスト オブジェクトへのポインター。プラグインは、書き込み権限を含む現在有効なライセンスを持たないメディア項目をプレイリストから削除する必要があります。 |
| pfAllowBurn | BOOL* | inout | BOOL へのポインター。true の場合、プレイリストに残っているメディア項目の CD へのコピーが許可されます。 |
戻り値
このメソッドは HRESULT を返します。
解説(Remarks)
Windows Media Player が allowCDBurn を呼び出す状況は、Windows Media Player のバージョンによって異なります。
Windows Media Player 9 シリーズと Windows Media Player 10 は、ユーザーがメディア項目のリストを CD に書き込もうとしたときに allowCDBurn を自動的に呼び出し、Player はリスト全体を pPlaylist パラメーターで渡します。allowCDBurn メソッドは、現在有効なライセンスを持たないメディア項目をプレイリストから削除します。次に、allowCDBurn メソッドは、現在有効なライセンスを持たないメディア項目について、バックグラウンド スレッドでライセンスの更新を開始できます。allowCDBurn メソッドは、バックグラウンド スレッドがライセンスの更新を完了するのを待ってはなりません。代わりに、更新を開始したらすぐに戻る必要があります。
Windows Media Player 11 は allowCDBurn を自動的に呼び出すことはありません。つまり、Windows Media Player 11 は、ユーザーが明示的に書き込み権限を要求した場合にのみ allowCDBurn を呼び出します。ユーザーがメディア項目のリストを CD に書き込もうとすると、Windows Media Player は、それらの項目が書き込み権限を含む現在有効なライセンスを持っているかどうかを確認します。現在有効なライセンスを持たない項目ごとに、Player はコンテキスト メニューを持つ情報アイコンを表示します。コンテキスト メニューを使用すると、ユーザーは、個々のメディア項目について、または同じオンライン ストアのバスケット内でまだ書き込み権限を持たないすべてのメディア項目について、書き込み権限を要求できます。ユーザーがコンテキスト メニューからコマンドを選択して書き込み権限を要求すると、Player は allowCDBurn を呼び出し、ユーザーが権限を要求しているメディア項目を含むプレイリストを渡します。その後、allowCDBurn メソッドはバックグラウンド スレッドでライセンスの更新を開始できます。allowCDBurn メソッドは、バックグラウンド スレッドがライセンスの更新を完了するのを待ってはなりません。代わりに、更新を開始したらすぐに戻る必要があります。
Windows Media Player 11 は、allowCDBurn が pPlaylist および pfAllowBurn パラメーターで返すプレイリストとブール値を無視することに注意してください。また、Windows Media Player 11 での書き込み権限の処理方法により、トラックが CD に書き込まれるたびに allowCDBurn が呼び出されることに依存してはならないことにも注意してください。
Player のバージョンに関係なく、バックグラウンド スレッドがライセンスの更新が完了したことを Windows Media Player に通知するために使用できるコールバックの仕組みはありません。ただし、メディア項目のライセンスの更新が成功した場合、次にユーザーがその項目を CD にコピーしようとしたときに、コピーは成功します。
Note このセクションでは、オンライン ストアでの使用を目的とした機能について説明します。
| hwnd | HWND | in | プラグインがユーザー インターフェイスを表示できるウィンドウのハンドル。 |
| pPlaylist | IWMPPlaylist* | in | プレイリスト オブジェクトへのポインター。 |
| pfAllowTransfer | BOOL* | inout | BOOL へのポインター。true の場合、デバイスへのコピーが許可されます。 |
戻り値
このメソッドは HRESULT を返します。
解説(Remarks)
Windows Media Player がこのメソッドを呼び出したときに、コードで時間のかかる処理を同期的に実行しないでください。
Windows Media Player がプラグインの allowPDATransfer メソッドを呼び出すとき、オンライン ストアの項目を含むプレイリストへのポインターを渡します。allowPDATransfer メソッドは、デバイスと同期すべきでない項目をプレイリストから削除する必要があります。
Windows Media Player が allowPDATranfer を呼び出す状況は、Windows Media Player のバージョンによって異なります。
Windows Media Player 9 シリーズと Windows Media Player 10 は、特定の状況で allowPDATransfer を自動的に呼び出します。たとえば、ユーザーがトラックのリストをデバイスと同期しようとし、それらのトラックの一部に同期の権限がない場合、Windows Media Player は allowPDATransfer を呼び出します。
Windows Media Player 11 は allowPDATransfer を自動的に呼び出すことはありません。つまり、Windows Media Player 11 は、ユーザーが明示的に同期権限を要求した場合にのみ allowPDATransfer を呼び出します。たとえば、ユーザーは情報アイコンのコンテキスト メニューからコマンドを選択して同期権限を要求する場合があります。
トラックがデバイスと同期されるたびに allowPDATransfer が呼び出されることに依存しないでください。代わりに、IWMPSubscriptionService2::prepareForSync を実装してください。
Note このセクションでは、オンライン ストアでの使用を目的とした機能について説明します。
| hwnd | HWND | in | プラグインがユーザー インターフェイスを表示できるウィンドウのハンドル。 |
戻り値
このメソッドは HRESULT を返します。
解説(Remarks)
Windows Media Player がこのメソッドを呼び出したときに、コードで時間のかかる処理を同期的に実行しないでください。代わりに、時間のかかるタスクは別のワーカー スレッドで実行する必要があります。
Windows Media Player は、ユーザーがオンライン ストアを選択した後、アイドル時間中に startBackgroundProcessing を呼び出します。これは、オンライン ストアが再生回数データを取得したり、有効期限が切れたライセンスを更新したりするのに役立ちます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IWMPSubscriptionService "{376055F8-2A59-4A73-9501-DCA5273A7A10}" #usecom global IWMPSubscriptionService IID_IWMPSubscriptionService "{}" #comfunc global IWMPSubscriptionService_allowPlay 3 sptr,sptr,var #comfunc global IWMPSubscriptionService_allowCDBurn 4 sptr,sptr,var #comfunc global IWMPSubscriptionService_allowPDATransfer 5 sptr,sptr,var #comfunc global IWMPSubscriptionService_startBackgroundProcessing 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IWMPSubscriptionService "{376055F8-2A59-4A73-9501-DCA5273A7A10}" #usecom global IWMPSubscriptionService IID_IWMPSubscriptionService "{}" #comfunc global IWMPSubscriptionService_allowPlay 3 sptr,sptr,sptr #comfunc global IWMPSubscriptionService_allowCDBurn 4 sptr,sptr,sptr #comfunc global IWMPSubscriptionService_allowPDATransfer 5 sptr,sptr,sptr #comfunc global IWMPSubscriptionService_startBackgroundProcessing 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。