IMediaControl::GetState 方法 (control.h)

[與此頁面相關的功能 DirectShow 是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft 強烈建議新程式代碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 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 專業版 [僅限傳統型應用程式]
最低支援的伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平台 Windows
標頭 control.h (包含 Dshow.h)
程式庫 Strmiids.lib

另請參閱

錯誤和成功碼

IMediaControl 介面