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_CAPTUREDEVINTERFACE_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。 可能的值包括但不限于下表中的值。

返回代码 描述
S_OK
已成功创建基础对象和异步操作。
E_ILLEGAL_METHOD_CALL
在 Windows 10 之前的 Windows 版本中,如果函数从不正确的 COM 单元调用,或者传递的 IActivateAudioInterfaceCompletionHandler 未在敏捷对象上实现(聚合自由线程封送器),则此错误可能会导致此错误。

言论

此函数使 Windows 应用商店应用能够在 Windows.DevicesWindows.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 。 有关详细信息,请参阅 服务
Windows 保留对应用程序的 IActivateAudioInterfaceCompletionHandler 接口的引用,直到作完成,应用程序才会释放 IActivateAudioInterfaceAsyncOperation 接口。
重要  

在完成处理程序回调执行之前,应用程序不得释放实现 IActivateAudioInterfaceCompletionHandler 的对象。

 
根据激活 的 WASAPI 接口,此函数可能会在首次调用该接口时显示同意提示。 例如,当应用程序调用此函数以激活 IAudioClient 以访问麦克风时,同意提示的目的是获取用户对应用访问麦克风的权限。 有关同意提示的详细信息,请参阅访问个人数据的设备 指南。

必须在主 UI 线程上调用 ActivateAudioInterfaceAsync,以便显示同意提示。 如果无法显示同意提示,则用户无法授予设备对应用的访问权限。

在 Windows 10 之前的 Windows 版本中,在打开用于音频捕获的设备时,必须在 COM Single-Threaded 单元(STA)中的线程上调用 ActivateAudioInterfaceAsync 。 传递到 ActivateAudioInterfaceAsynccompletionHandler 需要实现 IAgileObject,以确保从 MTA 调用 completionHandler 时没有死锁。 否则,将发生 E_ILLEGAL_METHOD_CALL

要求

要求 价值
支持的最低客户端 Windows 8 [桌面应用 |UWP 应用]
支持的最低服务器 Windows Server 2012 [桌面应用 |UWP 应用]
目标平台 窗户
页眉 mmdeviceapi.h (包括 Mmdevapi.idl)
图书馆 Mmdevapi.lib
DLL Mmdevapi.dll
IRQL

另请参阅

核心音频函数

IActivateAudioInterfaceAsyncOperation

IActivateAudioInterfaceCompletionHandler