背景: Windows Vista 以降では、拡張されたコア オーディオ API (Ray Molenkamp と Xavier Flix による) を使用して、DefaultAudioEndpoint の OnVolumeNotification をサブスクライブし、音量が変化したときに音量を設定することで、音量レベルを適用します。
問題:機能的には成功していますが、OnVolumeNotification へのサブスクリプションが登録されるとすぐに、CPU のパワーに応じて CPU が 30 ~ 50% に固定される傾向があります。Process Explorer と Process Monitor を詳しく調べた結果、explorer.exe と、場合によっては svchost.exe がレジストリ読み取り呼び出しによって消費されることが明らかになりました。どのレジストリ キーが不明です。サブスクリプションは慎重に管理しているため、有害な方法でこのイベントにサブスクライブしているとは思いません。1 回だけ配信されています。
ボリュームを強制する論理プロセス
- エンドポイント OnVolumeNotification からの登録解除
- エンドポイント ボリューム スカラー プロパティを設定します (すぐに有効になります)
- エンドポイントの OnVolumeNotification にサブスクライブする
Core Audio API に含まれる基本的な win32 メソッドは、RegisterControlChangeNotifyとUnregisterControlChangeNotifyです。これらまたはイベント サブスクリプションの実装が問題の原因である可能性はありますか?