共用方式為


IMediaControl::GetState 方法 (control.h)

[與此頁面相關聯的功能, DirectShow 是舊版功能。 它已被媒體播放程式、IMFMediaEngine媒體基金會的音訊/視訊擷取所取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能使用 MediaPlayer、IMFMediaEngineMedia Foundation 中的音訊/視訊擷取,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]

GetState 方法會擷取篩選圖形的狀態,即暫停、執行或停止。

狀態轉換不一定是同步的。 因此,當您呼叫這個方法時,篩選圖形可能會轉換至新狀態。 在此情況下,方法會封鎖,直到轉換完成或指定的逾時經過為止。

語法

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

參數

[in] msTimeout

逾時持續時間 (以毫秒為單位) 或 INFINITE 來指定無限逾時。

[out] pfs

接收 FILTER_STATE 列舉的成員。

返回值

傳回 HRESULT 值。 可能的值包括下列值。

回傳碼 Description
S_OK
成功。
VFW_S_STATE_INTERMEDIATE
篩選器圖表仍處於轉換至指示狀態的狀態中。
VFW_S_CANT_CUE
篩選器圖表已暫停,但無法提示資料。
E_FAIL
蹉。

備註

應用程式可以使用這個方法來判斷呼叫 IMediaControl::Run 之後是否已開始播放。 一般而言,應用程式應該有自己的機制來追蹤其已將篩選圖形置於哪個狀態。 應用程式通常會使用目前狀態來判斷已啟用或停用哪些使用者介面控制項。 例如,一旦圖形進入執行狀態,應用程式可能會停用「播放」按鈕並啟用「停止」和「暫停」按鈕。

如果篩選圖形處於轉換至新狀態,則傳回的狀態是新狀態,而不是先前的狀態。

如果在封鎖此方法時,另一個執行緒上有呼叫來變更狀態,則此方法會傳回錯誤。

避免指定 INFINITE 的逾時,因為執行緒在等待 GetState時無法處理訊息。 如果您 GetState 從處理 Windows 訊息的執行程呼叫,請在呼叫上指定較小的等候時間,以保持對使用者輸入的回應。 當來源透過網路或網際網路串流時,這一點尤其重要,因為這些環境中的狀態轉換可能需要更多時間才能完成。

FILTER_STATE列舉。 您可以按如下方式轉換變數:


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

如需篩選圖形狀態的詳細資訊,請參閱 篩選狀態

需求

Requirement 價值觀
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
支援的最低伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平臺 窗戶
Header control.h (包括 Dshow.h)
Library Strmiids.lib

另請參閱

錯誤和成功代碼

IMediaControl 介面