使 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 。
指定 VIRTUAL_AUDIO_DEVICE_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.Media.Devices 命名空间中使用 Windows 运行时 API 来选择音频设备后激活某些 WASAPI COM 接口。
对于许多实现,应用程序必须从主 UI 线程调用此函数以激活 WASAPI 系列中的 COM 接口,以便系统可以向用户显示对话框。 应用程序通过 completionHandler 传递 IActivateAudioInterfaceCompletionHandler 回调 COM 接口。 当激活结果可用时,Windows 从 COM 多线程单元(MTA)中的辅助线程调用应用程序的 IActivateAudioInterfaceCompletionHandler 接口中的方法。 然后,应用程序可以在 IActivateAudioInterfaceAsyncOperation 接口中调用方法,以检索结果代码和请求的 WASAPI 接口。 有一些激活是显式安全的,因此不需要从主 UI 线程调用此函数。 这些显式安全激活包括:
- 使用指定音频呈现设备和指定 IAudioClient 接口的 riid,使用 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 | 不 |