1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| const int VolumeGet = 0;
const int VolumeSet = 1;
const int CLSCTX_INPROC_SERVER = 1;
HRESULT ChangeVolume(OUT long &nVolume, IN long SetGet) {
nVolume = min(max(nVolume, 0), 100);
float rVolume = nVolume / 100.0f;
HRESULT hr = 0;
hr = CoInitialize(NULL);
GUID lpMMDeviceEnumerator;
// MMDeviceEnumerator
hr = CLSIDFromString(L"{BCDE0395-E52F-467C-8E3D-C4579291692E}", &lpMMDeviceEnumerator);
GUID lpIMMDeviceEnumerator;
hr = CLSIDFromString(L"{A95664D2-9614-4F35-A746-DE8DB63617E6}", &lpIMMDeviceEnumerator);
IMMDeviceEnumerator *denum = NULL;
hr = CoCreateInstance(lpMMDeviceEnumerator, NULL, CLSCTX_INPROC_SERVER, lpIMMDeviceEnumerator, (LPVOID *)&denum);
IMMDevice *defaultDevice = NULL;
hr = denum->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
denum->Release();
denum = NULL;
GUID lpIAudioEndpointVolume;
hr = CLSIDFromString(L"{5CDF2C82-841E-4546-9722-0CF74078229A}", &lpIAudioEndpointVolume);
IAudioEndpointVolume *epv = NULL;
hr = defaultDevice->Activate(lpIAudioEndpointVolume, CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&epv);
defaultDevice->Release();
defaultDevice = NULL;
if (SetGet == VolumeGet) {
//zTrace(L"VolumeGet");
float rV = 0.0f;
hr = epv->GetMasterVolumeLevelScalar(&rV);
nVolume = (long)(rV * 100);
//zTrace(STRL(nVolume));
} else {
//zTrace(L"VolumeSet");
hr = epv->SetMasterVolumeLevelScalar(rVolume, NULL);
}
epv->Release();
CoUninitialize();
return hr;
} |
Partager