背景:在Windows Vista及以上版本中,使用扩展的Core Audio API(由Ray Molenkamp和Xavier Flix开发)通过订阅DefaultAudioEndpoint的OnVolumeNotification并在其更改时设置音量来强制执行音量级别。
问题:功能上成功,但一旦订阅OnVolumeNotification,CPU倾向于占用30-50%的资源,具体取决于您的CPU性能。经过使用Process Explorer和Process Monitor的深入挖掘,发现explorer.exe和有时svchost.exe会被注册表读取调用所占用。我不确定是哪个注册表键。我认为我没有以有害的方式订阅此事件,因为我仔细管理订阅 - 它只被触发一次。
实施音量控制的逻辑流程
- 取消订阅端点OnVolumeNotification
- 设置端点音量标量属性(立即生效)
- 订阅端点OnVolumeNotification
Core Audio API涉及的基础win32方法是RegisterControlChangeNotify和UnregisterControlChangeNotify。问题可能是由这些方法或事件订阅的实现引起的吗?