ActivateAudioInterfaceAsync 函数 (mmdeviceapi.h)
使 Windows 应用商店应用能够访问 WASAPI 系列中预先存在的组件对象模型(COM)接口。
语法
HRESULT ActivateAudioInterfaceAsync(
[in] LPCWSTR deviceInterfacePath,
[in] REFIID riid,
[in] PROPVARIANT *activationParams,
[in] IActivateAudioInterfaceCompletionHandler *completionHandler,
IActivateAudioInterfaceAsyncOperation **activationOperation
);
参数
[in] deviceInterfacePath
音频设备的设备接口 ID。 这通常从 DeviceInformation 对象或 MediaDevice 类的方法之一进行检索。
GUID DEVINTERFACE_AUDIO_CAPTURE 和 DEVINTERFACE_AUDIO_RENDER 分别表示默认音频捕获和呈现设备。 调用 stringFromIID,将其中任一 GUID 转换为 LPCWSTR 以用于此参数。
指定 AUDIOCLIENT_ACTIVATION_TYPE_PROCESS_LOOPBACK 以激活进程环回捕获的音频接口。 有关演示进程环回捕获方案的示例代码,请参阅 应用程序环回 API 捕获示例。
[in] riid
WASAPI 系列中的 COM 接口的 IID,例如 IAudioClient。
[in] activationParams
特定于接口的激活参数。 有关详细信息,请参阅 IMMDevice::Activate中的 pActivationParams 参数。
从 Windows 10 内部版本 20438 开始,可以指定 AUDIOCLIENT_ACTIVATION_PARAMS 来激活接口以包含或排除与指定进程 ID 关联的音频流。
[in] completionHandler
调用方实现的接口,当激活过程的结果可用时,由 Windows 调用。
activationOperation
返回一个 IActivateAudioInterfaceAsyncOperation 接口,该接口表示激活所请求 WASAPI 接口的异步操作。
返回值
该函数返回 HRESULT。 可能的值包括但不限于下表中的值。
返回代码 | 描述 |
---|---|
|
已成功创建基础对象和异步操作。 |
|
在 Windows 10 之前的 Windows 版本中,如果函数从不正确的 COM 单元调用,或者传递的 IActivateAudioInterfaceCompletionHandler 未在敏捷对象上实现(聚合自由线程封送器),则此错误可能会导致此错误。 |
言论
此函数使 Windows 应用商店应用能够在 Windows.Devices 中使用 Windows 运行时 API 并 Windows.Media.Devices 命名空间中选择音频设备后激活某些 WASAPI COM 接口。
对于许多实现,应用程序必须从主 UI 线程调用此函数,以激活 WASAPI 系列中的 COM 接口,以便系统可以向用户显示对话框。 应用程序通过 completionHandler传递 IActivateAudioInterfaceCompletionHandler 回调 COM 接口。 当激活结果可用时,Windows 从 COM 多线程单元(MTA)中的辅助线程调用应用程序的 IActivateAudioInterfaceCompletionHandler 接口。 然后,应用程序可以在 IActivateAudioInterfaceAsyncOperation 接口中调用方法,以检索结果代码和请求 WASAPI 接口。 有一些激活是显式安全的,因此不需要从主 UI 线程调用此函数。 这些显式安全激活包括:
- 使用指定音频呈现 设备和指定 IAudioClient 接口的 deviceInterfacePath 调用 ActivateAudioInterfaceAsync。
- 使用指定音频呈现
设备和指定 IAudioEndpointVolume 接口的deviceInterfacePath 调用ActivateAudioInterfaceAsync 。 - 从会话 0 服务调用 ActivateAudioInterfaceAsync。 有关详细信息,请参阅 服务。
执行完成处理程序回调之前,应用程序不得释放实现 IActivateAudioInterfaceCompletionHandler 的对象。
必须在主 UI 线程上调用 activateAudioInterfaceAsync,以便显示同意提示。 如果无法显示同意提示,则用户无法授予设备对应用的访问权限。
在 Windows 10 之前的 Windows 版本中,在打开用于音频捕获的设备时,必须在 COM Single-Threaded 单元(STA)中的线程上调用 ActivateAudioInterfaceAsync。 传入 ActivateAudioInterfaceAsync 的 completionHandler 需要实现 IAgileObject,以确保从 MTA 调用 completionHandler 时没有死锁。 否则,将发生 E_ILLEGAL_METHOD_CALL。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 8 [桌面应用 |UWP 应用] |
支持的最低服务器 | Windows Server 2012 [桌面应用 |UWP 应用] |
目标平台 | 窗户 |
标头 | mmdeviceapi.h (包括 Mmdevapi.idl) |
库 | Mmdevapi.lib |
DLL | Mmdevapi.dll |
IRQL | 不 |