[与本页关联的功能 DirectShow 是一项旧版功能。 它已被 MediaPlayer、IMFMediaEngine 和媒体基础中的音频/视频捕获所取代。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、IMFMediaEngine 和媒体基础中的音频/视频捕获,而不是 DirectShow。 如果可能,Microsoft 建议应重写使用旧 API 的现有代码,以尽可能地使用新的 API。]
该方法 GetState 检索筛选器图的状态(已暂停、正在运行或停止)。
状态转换不一定是同步的。 因此,调用此方法时,筛选器图可能正在转换为新状态。 在这种情况下,该方法会阻止转换完成或直到指定的超时用完为止。
Syntax
HRESULT GetState(
[in] LONG msTimeout,
[out] OAFilterState *pfs
);
参数
[in] msTimeout
超时持续时间(以毫秒为单位),或 INFINITE 以指定无限超时。
[out] pfs
接收 FILTER_STATE 枚举的成员。
返回值
返回 HRESULT 值。 可能的值包括以下内容。
| 返回代码 | Description |
|---|---|
|
成功。 |
|
筛选器图仍在转换为指示的状态。 |
|
筛选器图已暂停,但无法提示数据。 |
|
失败。 |
注解
应用程序可以使用此方法来确定在调用 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 |