次の方法で共有


IMediaControl::GetState メソッド (control.h)

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

メソッドは GetState 、フィルター グラフの状態 (一時停止、実行中、または停止) を取得します。

状態遷移は必ずしも同期的ではありません。 そのため、このメソッドを呼び出すと、フィルター グラフが新しい状態に移行している可能性があります。 その場合、メソッドは遷移が完了するか、指定されたタイムアウトが経過するまでブロックします。

構文

HRESULT GetState(
  [in]  LONG          msTimeout,
  [out] OAFilterState *pfs
);

パラメーター

[in] msTimeout

タイムアウトの時間 (ミリ秒単位)、または無限タイムアウトを指定する INFINITE。

[out] pfs

FILTER_STATE列挙体のメンバーを受け取ります。

戻り値

HRESULT 値を返します。 使用可能な値は次のとおりです。

リターン コード 説明
S_OK
正常終了しました。
VFW_S_STATE_INTERMEDIATE
フィルター グラフは引き続き示された状態に移行しています。
VFW_S_CANT_CUE
フィルター グラフは一時停止されていますが、データをキューに入れることはできません。
E_FAIL
失敗しました。

注釈

アプリケーションでは、このメソッドを使用して 、IMediaControl::Run の呼び出し後に再生が開始されたかどうかを確認できます。 一般に、アプリケーションには、フィルター グラフを配置した状態を追跡するための独自のメカニズムが必要です。 通常、アプリケーションは現在の状態を使用して、有効または無効になっているユーザー インターフェイス コントロールを決定します。 たとえば、グラフが実行中の状態になると、アプリケーションで "再生" ボタンが無効になり、"停止" ボタンと "一時停止" ボタンが有効になります。

フィルター グラフが新しい状態に移行している場合、返される状態は新しい状態であり、前の状態ではありません。

このメソッドがブロックされている間に、別のスレッドで状態を変更する呼び出しがある場合、このメソッドはエラーを返します。

の待機中にスレッドがメッセージを処理できないため、INFINITE のタイムアウトを GetState指定しないでください。 Windows メッセージを処理するスレッドから を呼び出 GetState す場合は、ユーザー入力に対する応答を維持するために、呼び出しの待機時間を小さく指定します。 これは、ソースがネットワーク経由またはインターネットからストリーミングしている場合に特に重要です。これらの環境での状態遷移の完了には、かなり多くの時間がかかる可能性があるためです。

FILTER_STATE列挙。 変数は次のようにキャストできます。


FILTER_STATE fs;
hr = pControl->GetState(msTimeOut, (OAFilterState*)&fs);

フィルター グラフの状態の詳細については、「フィルターの 状態」を参照してください。

要件

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

こちらもご覧ください

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

IMediaControl インターフェイス