2014-01-13 2 views
4

Windows XP에서는 믹서 API를 사용하여 대상 라인의 볼륨을 설정하여 믹서 장치의 마스터 볼륨을 제어하기가 매우 쉽습니다. Microsoft에서 제공하는 sdk 샘플 응용 프로그램을 사용하여 쉽게 테스트 할 수 있습니다. 그러나 Windows 7의 경우 내 응용 프로그램에서 믹서 장치 그것은 새로운 볼륨 응용 프로그램으로 표시하고 내 응용 프로그램의 볼륨을 제어 할 수 있습니다. 시스템의 완전한 소리를 제어 할 수 없습니다. 아무도 소리의 소리에 영향을 미칠 스피커의 완전한 소리를 제어하는 ​​방법을 제안 해 줄 수 없어. 실행중인 모든 응용 프로그램.믹서 API를 사용하여 Windows 7에서 마스터 믹서 볼륨을 제어하는 ​​방법?

enter image description here

어떻게 윈도우 7에 내 응용 프로그램을 사용하여 스피커 볼륨을 변경할 수 있습니까?

답변

4

나는 당신이 찾고있는 방법이 SetMasterVolumeLevelScalar이라고 믿습니다.

합니다 (lpVtbl들 죄송합니다) C에서 짧은 예 : GUID가 정의되지 않은 경우

BOOL AddMasterVolumeLevelScalar(float fMasterVolumeAdd) 
{ 
    IMMDeviceEnumerator *deviceEnumerator = NULL; 
    IMMDevice *defaultDevice = NULL; 
    IAudioEndpointVolume *endpointVolume = NULL; 
    HRESULT hr; 
    float fMasterVolume; 
    BOOL bSuccess = FALSE; 

    hr = CoCreateInstance(&XIID_MMDeviceEnumerator, NULL, CLSCTX_INPROC_SERVER, &XIID_IMMDeviceEnumerator, (LPVOID *)&deviceEnumerator); 
    if(SUCCEEDED(hr)) 
    { 
     hr = deviceEnumerator->lpVtbl->GetDefaultAudioEndpoint(deviceEnumerator, eRender, eConsole, &defaultDevice); 
     if(SUCCEEDED(hr)) 
     { 
      hr = defaultDevice->lpVtbl->Activate(defaultDevice, &XIID_IAudioEndpointVolume, CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume); 
      if(SUCCEEDED(hr)) 
      { 
       if(SUCCEEDED(endpointVolume->lpVtbl->GetMasterVolumeLevelScalar(endpointVolume, &fMasterVolume))) 
       { 
        fMasterVolume += fMasterVolumeAdd; 

        if(fMasterVolume < 0.0) 
         fMasterVolume = 0.0; 
        else if(fMasterVolume > 1.0) 
         fMasterVolume = 1.0; 

        if(SUCCEEDED(endpointVolume->lpVtbl->SetMasterVolumeLevelScalar(endpointVolume, fMasterVolume, NULL))) 
         bSuccess = TRUE; 
       } 

       endpointVolume->lpVtbl->Release(endpointVolume); 
      } 

      defaultDevice->lpVtbl->Release(defaultDevice); 
     } 

     deviceEnumerator->lpVtbl->Release(deviceEnumerator); 
    } 

    return bSuccess; 
} 

가 :

const static GUID XIID_IMMDeviceEnumerator = { 0xA95664D2, 0x9614, 0x4F35, { 0xA7, 0x46, 0xDE, 0x8D, 0xB6, 0x36, 0x17, 0xE6 } }; 
const static GUID XIID_MMDeviceEnumerator = { 0xBCDE0395, 0xE52F, 0x467C, { 0x8E, 0x3D, 0xC4, 0x57, 0x92, 0x91, 0x69, 0x2E } }; 
const static GUID XIID_IAudioEndpointVolume = { 0x5CDF2C82, 0x841E, 0x4546, { 0x97, 0x22, 0x0C, 0xF7, 0x40, 0x78, 0x22, 0x9A } }; 
+0

그것은 또한 감사 – bhupinder

+0

당신의 예를 작동하지 않는 날 도와 . XIID_IAudioEndpointVolume 및 XIID_MMDeviceEnumerator의 정의가 없습니다. – this

+0

@ 업데이트 됨 대답 – Paul

관련 문제