Поделиться через


Интерфейс IMMNotificationClient (mmdeviceapi.h)

Интерфейс IMMNotificationClient предоставляет уведомления при добавлении или удалении звукового конечного устройства , изменении состояния или свойств устройства конечной точки или изменении роли по умолчанию, назначенной устройству конечной точки. В отличие от других интерфейсов в этом разделе, реализованных системным компонентом API MMDevice, клиент API MMDevice реализует интерфейс IMMNotificationClient . Чтобы получать уведомления, клиент передает указатель на экземпляр интерфейса IMMNotificationClient в качестве параметра на метод IMMDeviceEnumerator::RegisterEndpointNotificationCallback .

После регистрации интерфейса IMMNotificationClient клиент получает уведомления о событиях в виде обратных вызовов через методы интерфейса.

Каждый метод в интерфейсе IMMNotificationClient получает в качестве одного из своих входных параметров строку идентификатора конечной точки , которая идентифицирует звуковое конечное устройство, являющееся субъектом уведомления. Строка однозначно идентифицирует устройство по отношению ко всем остальным устройствам конечной точки звука в системе. Методы в реализации интерфейса IMMNotificationClient должны рассматривать эту строку как непрозрачную. То есть ни один из методов не должен пытаться проанализировать содержимое строки для получения сведений об устройстве. Причина заключается в том, что формат строки не определен и может измениться от одной реализации системного модуля API MMDevice к следующей.

Клиент может использовать строку идентификатора конечной точки, полученную в качестве входного параметра, в вызове метода IMMNotificationClient двумя способами:

  • Клиент может создать экземпляр устройства, который идентифицирует строка идентификатора конечной точки. Клиент делает это путем вызова метода IMMDeviceEnumerator::GetDevice и предоставления строки идентификатора конечной точки в качестве входного параметра.
  • Клиент может сравнить строку идентификатора конечной точки со строкой идентификатора конечной точки существующего экземпляра устройства. Чтобы получить вторую строку идентификатора конечной точки, клиент вызывает метод IMMDevice::GetId экземпляра устройства. Если две строки совпадают, они определяют одно и то же устройство.
При реализации интерфейса IMMNotificationClient клиент должен соблюдать следующие правила, чтобы избежать взаимоблокировок и неопределенного поведения:
  • Методы интерфейса должны быть неблокировными. Клиент никогда не должен ждать объекта синхронизации во время обратного вызова события.
  • Чтобы избежать недоставленных блокировок, клиент никогда не должен вызывать IMMDeviceEnumerator::RegisterEndpointNotificationCallback или IMMDeviceEnumerator::UnregisterEndpointNotificationCallback в реализации методов IMMNotificationClient .
  • Клиент никогда не должен освобождать окончательную ссылку на объект API MMDevice во время обратного вызова события.
Пример кода, реализующий интерфейс IMMNotificationClient , см. в разделе События устройства.

Наследование

Интерфейс IMMNotificationClient наследуется от интерфейса IUnknown . IMMNotificationClient также имеет следующие типы элементов:

Методы

Интерфейс IMMNotificationClient содержит следующие методы.

 
IMMNotificationClient::OnDefaultDeviceChanged

Метод OnDefaultDeviceChanged уведомляет клиента о том, что устройство конечной точки звука по умолчанию для определенной роли устройства изменилось.
IMMNotificationClient::OnDeviceAdded

Метод OnDeviceAdded указывает, что добавлено новое устройство конечной точки звука.
IMMNotificationClient::OnDeviceRemoved

Метод OnDeviceRemoved указывает, что устройство конечной точки звука удалено.
IMMNotificationClient::OnDeviceStateChanged

Метод OnDeviceStateChanged указывает, что состояние конечного аудиоустройства изменилось.
IMMNotificationClient::OnPropertyValueChanged

Метод OnPropertyValueChanged указывает, что значение свойства, принадлежащего устройству конечной точки аудио, изменилось.

Требования

   
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header mmdeviceapi.h

См. также раздел

Основные звуковые интерфейсы

IMMDevice::GetId

IMMDeviceEnumerator::GetDevice

IMMDeviceEnumerator::RegisterEndpointNotificationCallback

IMMDeviceEnumerator::UnregisterEndpointNotificationCallback

MMDevice API