Функция ActivateAudioInterfaceAsync (mmdeviceapi.h)
Позволяет приложениям Магазина Windows получать доступ к уже существовающим com-интерфейсам в семействе WASAPI .
Синтаксис
HRESULT ActivateAudioInterfaceAsync(
[in] LPCWSTR deviceInterfacePath,
[in] REFIID riid,
[in] PROPVARIANT *activationParams,
[in] IActivateAudioInterfaceCompletionHandler *completionHandler,
IActivateAudioInterfaceAsyncOperation **activationOperation
);
Параметры
[in] deviceInterfacePath
Идентификатор интерфейса устройства для звукового устройства. Обычно он извлекается из объекта DeviceInformation или одного из методов класса MediaDevice .
Идентификаторы GUID DEVINTERFACE_AUDIO_CAPTURE и DEVINTERFACE_AUDIO_RENDER представляют устройство захвата и отрисовки звука по умолчанию соответственно. Вызовите StringFromIID для преобразования любого из этих идентификаторов GUID в LPCWSTR для использования для этого аргумента.
Укажите AUDIOCLIENT_ACTIVATION_TYPE_PROCESS_LOOPBACK для активации звукового интерфейса для захвата замыкания на себя процесса. Пример кода, демонстрирующий сценарий отслеживания замыкания на себя процесса, см. в разделе Пример отслеживания API замыкания на себя.
[in] riid
Идентификатор IID COM-интерфейса в семействе WASAPI , например IAudioClient.
[in] activationParams
Параметры активации для конкретного интерфейса. Дополнительные сведения см. в разделе параметр pActivationParams в IMMDevice::Activate.
Начиная с TBD можно указать AUDIOCLIENT_ACTIVATION_PARAMS активации интерфейса для включения или исключения звуковых потоков, связанных с указанным идентификатором процесса.
[in] completionHandler
Интерфейс, реализованный вызывающим абонентом, который вызывается Windows, когда доступен результат процедуры активации.
activationOperation
Возвращает интерфейс IActivateAudioInterfaceAsyncOperation , представляющий асинхронную операцию активации запрошенного интерфейса WASAPI .
Возвращаемое значение
Функция возвращает HRESULT. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице.
Код возврата | Описание |
---|---|
|
Базовый объект и асинхронная операция успешно созданы. |
|
В версиях Windows, предшествующих Windows 10, эта ошибка может возникать, если функция вызывается из неправильного подразделения COM или если переданный объект IActivateAudioInterfaceCompletionHandler не реализован в объекте agile (агрегирование маршалера с произвольным потоком). |
Комментарии
Эта функция позволяет приложениям Магазина Windows активировать определенные COM-интерфейсы WASAPI после использования api среда выполнения Windows в пространствах имен Windows.Devices и Windows.Media.Devices для выбора звукового устройства.
Во многих реализациях приложение должно вызывать эту функцию из потока пользовательского интерфейса main, чтобы активировать COM-интерфейс в семействе WASAPI, чтобы система смогла показать пользователю диалоговое окно. Приложение передает COM-интерфейс обратного вызова IActivateAudioInterfaceCompletionHandler через completionHandler. Windows вызывает метод в интерфейсе IActivateAudioInterfaceCompletionHandler приложения из рабочего потока в многопотоковом объекте COM (MTA), когда результаты активации доступны. Затем приложение может вызвать метод в интерфейсе IActivateAudioInterfaceAsyncOperation , чтобы получить код результата и запрошенный интерфейс WASAPI . Некоторые активации являются явно безопасными и поэтому не требуют вызова этой функции из потока пользовательского интерфейса main. К этим явно безопасным активациям относятся:
- Вызов Метода ActivateAudioInterfaceAsync с deviceInterfacePath , который указывает устройство отрисовки звука, и riid , указывающий интерфейс IAudioClient .
- Вызов Метода ActivateAudioInterfaceAsync с помощью deviceInterfacePath , указывающего устройство отрисовки звука, и идентификатор riid , указывающий интерфейс IAudioEndpointVolume .
- Вызов ActivateAudioInterfaceAsync из службы сеанса 0. Дополнительные сведения см. в разделе Службы.
Приложения не должны освобождать объект, реализующий IActivateAudioInterfaceCompletionHandler , пока не будет выполнен обратный вызов обработчика завершения.
Метод ActivateAudioInterfaceAsync должен вызываться в потоке пользовательского интерфейса main, чтобы можно было отображать запрос согласия. Если запрос согласия не отображается, пользователь не сможет предоставить устройству доступ к приложению.
В версиях Windows, предшествующих Windows 10, при открытии устройства для захвата звука необходимо вызывать ActivateAudioInterfaceAsync в потоке в com-Single-Threaded Apartment (STA). CompletionHandler, передаваемый в ActivateAudioInterfaceAsync, должен реализовать IAgileObject, чтобы гарантировать отсутствие взаимоблокировки при вызове completionHandler из MTA. В противном случае произойдет E_ILLEGAL_METHOD_CALL .
Требования
Минимальная версия клиента | Windows 8 [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2012 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | mmdeviceapi.h (включая Mmdevapi.idl) |
Библиотека | Mmdevapi.lib |
DLL | Mmdevapi.dll |
IRQL | Нет |