IMediaControl::GetState 方法 (control.h)

[与本页关联的功能 DirectShow 是一项旧版功能。 它已被 MediaPlayerIMFMediaEngine媒体基础中的音频/视频捕获所取代。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngine媒体基础中的音频/视频捕获,而不是 DirectShow。 如果可能,Microsoft 建议应重写使用旧 API 的现有代码,以尽可能地使用新的 API。]

该方法 GetState 检索筛选器图的状态(已暂停、正在运行或停止)。

状态转换不一定是同步的。 因此,调用此方法时,筛选器图可能正在转换为新状态。 在这种情况下,该方法会阻止转换完成或直到指定的超时用完为止。

Syntax

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时无法处理消息。 如果从处理 Windows 消息的线程进行调用 GetState ,请在调用中指定较小的等待时间,以便保持对用户输入的响应。 当源通过网络或 Internet 流式传输时,这一点尤其重要,因为这些环境中的状态转换可能需要花费更多时间才能完成。

FILTER_STATE枚举。 可以按如下所示强制转换变量:


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

有关筛选器图形状态的详细信息,请参阅 筛选器状态

要求

Requirement 价值
最低支持的客户端 Windows 2000 Professional [仅限桌面应用]
支持的最低服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows操作系统
Header control.h (包括 Dshow.h)
Library Strmiids.lib

另请参阅

错误和成功代码

IMediaControl 接口