내 VoIP 응용 프로그램은 Win7에서 호스팅됩니다. 볼륨 컨트롤이 포함되어 있습니다. Win Vista는 믹서 API를 통해 각 애플리케이션의 볼륨을 개별적으로 제어 할 수있는 기능을 도입 했으므로이를 선택했습니다. 내 응용 프로그램의 볼륨 레벨 Windows 볼륨 컨트롤 - 응용 프로그램 대 장치
- mixerOpen
- mixerSetControlDetail mixerOpen 호출이 CALLBACK_WINDOW로 만든
내 응용 프로그램의 볼륨 레벨을 가져 오기 위해, 그리고 I : 그래서, 사용 MM_MIXM_CONTROL_CHANGE를 포함하여 제어 메시지를 캡처하는 창을 설정하십시오. 이 이벤트는 mixerGetControlDetail을 호출하여 볼륨 레벨을 새로 고침하도록 트리거합니다.
잘 작동합니다. Windows 볼륨 믹서 패널로 이동하여 내 앱의 볼륨 슬라이더를 변경할 수 있습니다. MM_MIXM_CONTROL_CHANGE 메시지가 표시되고 mixerGetControlDetail에 의해 반환 된 값의 업데이트 된 수준이 있습니다.
하지만 기기 수준을 변경하면 알림이 표시되지 않습니다. 내 응용 프로그램의 볼륨 수준을 쿼리하면 변경되지 않습니다. 그러나 기기 볼륨 슬라이더를 슬라이드하면 볼륨 믹서 대화 상자에서 앱의 볼륨 슬라이더가 변경됩니다.
저는 믹서 API와 IAudioEndpointVolume (콜백)의 차이점을 이해했다고 생각했지만 분명히 뭔가를 놓쳤습니다. Windows 볼륨 믹서 패널에서 변경된 것으로 표시되는 경우에도 믹서가 내 앱에 대해 동일한 볼륨 레벨을 반환하는 이유는 무엇입니까?
당신이 찾고있는 것이 이미 여기 있다고 생각합니다. http://stackoverflow.com/questions/2232125/getting-volume-change-notifications-on-vista-7-c –
내 질문이 Reworded되었습니다. 앱 수준 대 기기 수준의 변경 이벤트를받는 방법을 알고 있습니다. 내가 이해할 수없는 점은 기기 수준을 변경하여 앱 수준을 변경해야하는지 여부입니다. 내 코드는 대답이 '아니오'라고 제안하지만 Windows 볼륨 믹서 대화 상자에서는 그렇지 않은 것으로 나타납니다. – Matt