次の方法で共有


IResourceManager::SetFocus メソッド (strmif.h)

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayerIMFMediaEngine、および Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、従来の API を使用する既存のコードを、可能であれば新しい API を使用するように書き直すよう提案しています。]

メソッドは SetFocus 、指定したオブジェクトにユーザーのフォーカスが与えられていることをリソース マネージャーに通知します。

構文

HRESULT SetFocus(
  [in] IUnknown *pFocusObject
);

パラメーター

[in] pFocusObject

ユーザーのフォーカスが与えられたオブジェクトへのポインター。

戻り値

実装に依存する HRESULT 値を返します。 HRESULT には、次の標準定数のいずれか、または一覧にないその他の値を指定できます。

リターン コード 説明
E_FAIL
失敗しました。
E_POINTER
NULL ポインター引数。
E_INVALIDARG
引数が無効です。
E_NOTIMPL
メソッドはサポートされていません。
S_OKまたは NOERROR
成功しました。

解説

DirectShow では、ユーザーのフォーカスが与えられたオブジェクトは、通常、ウィンドウがフォーカスを受け取ったビデオ レンダラーです。 リソース マネージャーは、次の順序でリソースの要求を優先します。

  1. pFocusObject パラメーターで指定されたフォーカス オブジェクトを使用して行われた要求。
  2. フォーカス オブジェクトが共通のソース フィルターを共有する要求。
  3. フォーカス オブジェクトが共通のフィルター グラフを共有する要求。
  4. フォーカスと同じプロセスでの要求。
フォーカスが設定された後、 ReleaseFocus が呼び出されるまで、リソース マネージャーはフォーカス オブジェクトを維持する必要があります。 つまり、このメソッドを呼び出した後は、フォーカス オブジェクトの IUnknown インターフェイスが無効になる前に ReleaseFocus を使用する必要があります。ただし、その間に別のオブジェクトによって呼び出されることをSetFocus保証できる場合を除きます。 フォーカス オブジェクトに参照カウントは保持されません。

リソース マネージャーは、置き換えられるか取り消されるまでこのポインターを保持し、それを使用してリソースの競合を解決します。 少なくとも IBaseFilter インターフェイスには QueryInterface を使用し、見つかった場合は、そのインターフェイスのメソッドを使用します。 IBaseFilter のメソッドを呼び出して、2 つがある場合に使用するオーディオ レンダラーを決定し (フォーカス オブジェクトに共通するソース フィルターを持つものを選択します)、2 つのオブジェクトが同じフィルター グラフ内にあるかどうかを判断します。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー strmif.h (Dshow.h を含む)
Library Strmiids.lib

関連項目

エラーコードと成功コード

IResourceManager インターフェイス