IMMNotificationClient 接口 (mmdeviceapi.h)
当添加或删除音频终结点设备、终结点设备的状态或属性发生更改或分配给终结点设备的默认角色发生更改时,IMMNotificationClient 接口提供通知。 与本节中的其他接口不同(这些接口由 MMDevice API 系统组件实现),MMDevice API 客户端实现 IMMNotificationClient 接口。 为了接收通知,客户端将指向其 IMMNotificationClient 接口实例的指针作为参数传递给 IMMDeviceEnumerator::RegisterEndpointNotificationCallback 方法。
注册其 IMMNotificationClient 接口后,客户端通过接口的方法以回调的形式接收事件通知。
IMMNotificationClient 接口中的每个方法都接收一个终结点 ID 字符串,作为其输入参数之一,该字符串标识作为通知主题的音频终结点设备。 字符串唯一标识与系统中所有其他音频终结点设备相关的设备。 IMMNotificationClient 接口实现中的方法应将此字符串视为不透明。 也就是说,任何方法都不应尝试分析字符串的内容以获取有关设备的信息。 原因是字符串格式未定义,可能会从 MMDevice API 系统模块的一个实现更改为下一个实现。
在调用 IMMNotificationClient 方法时,客户端可以使用它收到的终结点 ID 字符串作为输入参数,有两种方式:
- 客户端可以创建终结点 ID 字符串标识的设备实例。 客户端通过调用 IMMDeviceEnumerator::GetDevice 方法并提供终结点 ID 字符串作为输入参数来执行此操作。
- 客户端可以将终结点 ID 字符串与现有设备实例的终结点 ID 字符串进行比较。 为了获取第二个终结点 ID 字符串,客户端调用设备实例的 IMMDevice::GetId 方法。 如果两个字符串匹配,则它们标识同一设备。
- 接口的方法必须是非阻止的。 在事件回调期间,客户端不应等待同步对象。
- 为了避免死锁,客户端不应在其 IMMNotificationClient 方法的实现中调用 IMMDeviceEnumerator::RegisterEndpointNotificationCallback 或 IMMDeviceEnumerator::UnregisterEndpointNotificationCallback。
- 客户端不应在事件回调期间释放 MMDevice API 对象上的最终引用。
继承
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 |
标头 | mmdeviceapi.h |
另请参阅
IMMDeviceEnumerator::GetDevice
IMMDeviceEnumerator::RegisterEndpointNotificationCallback