Share via


Windows Media Player コントロールのリモート処理

[このページWindows メディア プレーヤー SDK に関連付けられている機能は、レガシ機能です。 MediaPlayer に置き換わりました。 MediaPlayer は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能な場合は SDK ではなく MediaPlayerWindows メディア プレーヤー使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

Windows メディア プレーヤー コントロールを C++ プログラムに埋め込む場合は、プレーヤーのフル モードのリモート拡張機能として使用できます。 これは、Windows メディア プレーヤー コントロールを "リモート処理" と呼び、自分で実装しなくてもフル モードプレーヤーのすべての機能を提供できます。

コントロールをリモート操作すると、プレーヤーのフル モードと同じ再生エンジンが共有され、デジタル メディアの再生が中断されずに、ユーザーは埋め込みモード ("ドッキング" 状態) とフル モード ("ドッキングされていない" 状態) を切り替えることができます。

リモート埋め込みの有効化

Windows メディア プレーヤー コントロールのリモート埋め込みを有効にするには、プログラムで IServiceProvider インターフェイスと IWMPRemoteMediaServices インターフェイスを実装する必要があります。 IServiceProvider は、 QueryService という 1 つのメソッドを持つ標準のコンポーネント オブジェクト モデル (COM) インターフェイスです。 Windows メディア プレーヤーはこのメソッドを呼び出して、IWMPRemoteMediaServices インターフェイスへのポインターを取得します。

IWMPRemoteMediaServices にはいくつかのメソッドがありますが、リモート処理に直接関連するのはそのうちの 2 つだけです。 GetApplicationName では、プログラムの名前を返します。この名前Windows メディア プレーヤー、[表示] メニューの [その他のプログラムに切り替え] の一覧に追加されます。 GetServiceType では、"Remote" または "Local" のいずれかの値を返すことによって、コントロールの埋め込みモードを示します。 リモート接続が正常に確立された場合、IWMPPlayer4 インターフェイスの get_isRemote メソッドは true を返します。

排他的オンライン ストアの指定

Windows メディア プレーヤー 11 では、Player コントロールをリモートに埋め込むアプリケーションで、排他的なオンライン ストアを指定できます。 その場合、Windows メディア プレーヤーのサービス セレクターは無効になり、指定されたオンライン ストアのみがユーザーに提供されます。 排他的オンライン ストアを指定する方法の詳細については、「排他的オンライン ストア」を参照してください。

ドッキングとドッキング解除

IWMPPlayer4 インターフェイスは、get_playerApplication メソッドを介して IWMPPlayerApplication インターフェイスにもアクセスできます。 IWMPPlayerApplication を使用して、ドッキングされた状態とドッキングされていない状態を切り替え、現在のドッキング状態とビデオまたは視覚化表示の場所を決定します。

IWMPPlayerApplication::switchToPlayerApplication メソッドは、Windows メディア プレーヤーのフル モードを開き、ビデオまたは視覚エフェクトの表示を [再生中] ウィンドウに転送することで、コントロールのドッキングを解除します。 IWMPPlayerApplication::switchToControl メソッドは、ビデオまたは視覚エフェクトの表示をプログラムに転送し、開いている場合は Player のフル モードを閉じることで、コントロールをドッキングします。 コントロールは、[他のプログラム に切り替え ] リストからプログラムを選択するか、プレーヤーのフル モードを閉じることによってドッキングすることもできます。 どちらの場合も、再生中のデジタル メディアは中断されずに続行されます。

ビデオまたは視覚化ディスプレイの転送

埋め込まれたリモート Windows メディア プレーヤー コントロールを持つ複数のプログラムが同時に実行されると、すべてのコントロールが同じ再生エンジンを共有します。 また、ドッキングされていない状態の Player のフル モードの同じインスタンスも共有します。 ただし、ドッキング状態では、ビデオまたは視覚エフェクトを表示できるコントロールは 1 つだけです。 ドッキングされていない状態では、プレーヤーのフル モードのみがビデオまたは視覚化を表示します。 switchToControl メソッドは、ドッキングされた状態とドッキングされていない状態の両方で動作し、ビデオまたは視覚化の表示を、プログラムが呼び出す任意のプログラムに転送します。

ドッキング状態とドッキング解除状態の唯一の違いは、Windows メディア プレーヤーのフル モードの存在と、ビデオまたは視覚エフェクトの表示の所有権です。 ドッキングされていない状態では、現在実行中のすべての埋め込みリモート コントロールは引き続き表示され、ユーザー インターフェイスは引き続き完全に機能します。 ただし、ビデオまたは視覚化ウィンドウが存在する場合は空です。 ドッキング状態では、埋め込まれたリモート コントロールの 1 つだけがディスプレイを所有しますが、すべてのユーザー インターフェイスは引き続き機能します。

ドッキング解除状態のコントロールを非表示または変更する

ドッキングされていない状態の埋め込みコントロールのユーザー インターフェイスを非表示または変更する場合、またはプログラムがディスプレイを所有していない場合は、独自の実装を提供する必要があります。 これらの変更は、コントロールをドッキングおよびドッキング解除するときに行うことができます。また、Windows メディア プレーヤーイベントに応答して変更することもできます。 ただし、プレーヤーは [ 他のプログラムに切り替える ] メニュー オプションを使用してドッキングできるため、通常はイベントに応答してこの機能を提供することをお勧めします。

SwitchedToPlayerApplication イベントと SwitchedToControl イベントのイベント ハンドラーを実装することも、PlayerDockedStateChange イベントの 1 つのイベント ハンドラーを実装することもできます。 後者の場合は、 IWMPPlayerApplication::get_playerDocked を呼び出すことでドッキング状態を確認できます。 どちらの場合も、 IWMPPlayerApplication::get_hasDisplay を使用して、プログラムがビデオまたは視覚エフェクトの表示を所有しているかどうかを判断します。

リモート接続の再確立

特定の状況では、リモートの埋め込みコントロールとスタンドアロン プレーヤーの間の接続が失敗し、Windows メディア プレーヤー インターフェイスへのポインターが無効になります。 Windows メディア プレーヤーは自動的に再接続を試み、PlayerReconnect イベントを発生させ、この試行を通知します。 再接続は自動ですが、無効なポインターを解放して新しいポインターを取得して、新しい接続を介してスタンドアロン プレーヤーにアクセスできるようにする場合は、このイベントのイベント ハンドラーを指定する必要があります。

ドッキングされていないプレーヤーの制御

Windows メディア プレーヤー コントロールのすべてのリモート インスタンスは、ドッキング状態に関係なく、Player のフル モードを操作できます。 ただし、Player のフル モードと関連性のない機能は、Windows メディア プレーヤー コントロールがドッキングされるまで無視されます。 これには、 IWMPPlayer のプロパティと派生インターフェイス ( enabledenableContextMenuuiModewindowlessVideo など) が含まれます。

[エラー] ダイアログ ボックス

リモート Windows メディア プレーヤー コントロール インスタンスから、設定enableErrorDialogs プロパティは、特定の方法で動作します。 次の規則が適用されます。

  • Windows メディア プレーヤードッキング解除 (Windows メディア プレーヤー UI が表示されている) 場合、enableErrorDialogs プロパティは無視され、エラー ダイアログ ボックスは Player によって処理されます。
  • Windows メディア プレーヤードッキングされると、enableErrorDialogs のコントロールの各リモート インスタンスで指定された値は、個々のコントロール インスタンスにのみ適用されます。 つまり、特定のコントロール インスタンスで enableErrorDialogs に "true" の値が指定されている場合、コントロールの他のすべてのインスタンスで値が "false" を指定した場合にエラーが発生すると、そのインスタンスのみがダイアログ ボックスを表示します。

バックグラウンドでのリモート処理

コントロールが使用されていないとき、プレーヤーのリモート インスタンスをバックグラウンドで実行しないようにする必要があります。 リモート Player コントロール インスタンスは再生エンジンをフル モードの Player と共有するため、バックグラウンド インスタンスを実行したままにすると、予期しない動作が発生する可能性があります。 たとえば、ファイルの再生中にユーザーがフル モードの Player を閉じる場合があります。 ユーザーは、プレーヤーが閉じるとファイルの再生が完全に停止することを期待しますが、再生エンジンがまだアクティブであるため、オーディオが再生し続ける可能性があります。

サンプル

Windows メディア プレーヤー SDK セットアップ パッケージには、リモート処理を示すサンプルがインストールされます。 詳細については、RemoteSkin と WMPML のサンプルを参照してください。

サンプル

C++ プログラムでのWindows メディア プレーヤー コントロールの使用