Airforcex6 Posted December 3, 2011 Share Posted December 3, 2011 Hi! I have a simple problem which I couldn't solve. It is about changing master sound level in Windows Vista / Windows 7 using the application compiled with Visual Studio 2010. There is the code given below which I have used in order to adjust master volume level, but nothing have happened. Can anyone point out to me the mistake inside the source code? Thank you in advance! CODE #include <mmdeviceapi.h> #include <endpointvolume.h> #include <windows.h> #include <tchar.h> #pragma comment(lib, "winmm.lib"); int _tmain(int argc, _TCHAR* argv[]) { double nVolume = 0.1; // Mute is 0 and full blast is 1.0 bool ChangeVolume((double) nVolume); } bool ChangeVolume(double nVolume,bool bScalar) { bScalar = true; HRESULT hr=NULL; bool decibels = false; bool scalar = false; double newVolume=nVolume; CoInitialize(NULL); IMMDeviceEnumerator *deviceEnumerator = NULL; hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator); IMMDevice *defaultDevice = NULL; hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice); deviceEnumerator->Release(); deviceEnumerator = NULL; IAudioEndpointVolume *endpointVolume = NULL; hr = defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume); defaultDevice->Release(); defaultDevice = NULL; // ------------------------- float currentVolume = 0; endpointVolume->GetMasterVolumeLevel(¤tVolume); //printf("Current volume in dB is: %f\n", currentVolume); hr = endpointVolume->GetMasterVolumeLevelScalar(¤tVolume); //CString strCur=L""; //strCur.Format(L"%f",currentVolume); //AfxMessageBox(strCur); // printf("Current volume as a scalar is: %f\n", currentVolume); if (bScalar==false) { hr = endpointVolume->SetMasterVolumeLevel((float)newVolume, NULL); } else if (bScalar==true) { hr = endpointVolume->SetMasterVolumeLevelScalar((float)newVolume, NULL); } endpointVolume->Release(); CoUninitialize(); return FALSE; } Quote Link to comment Share on other sites More sharing options...
Airforcex6 Posted December 8, 2011 Author Share Posted December 8, 2011 Thank you anyway, I have found the code that works well! Here it is: CODE #include <WinSDKVer.h> #define _WIN32_WINNT _WIN32_WINNT_VISTA #include <SDKDDKVer.h> #define WIN32_LEAN_AND_MEAN // Windows Header Files: #include <windows.h> #include <tchar.h> #include <mmdeviceapi.h> #include <endpointvolume.h> int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { //double newVolume = _ttof(lpCmdLine); double newVolume = 0.1; // Put the value between 0.0 and 1.0 CoInitialize(NULL); IMMDeviceEnumerator* deviceEnumerator = NULL; if(CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator) == S_OK) { IMMDevice* defaultDevice = NULL; if(deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice) == S_OK) { IAudioEndpointVolume* endpointVolume = NULL; if(defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume) == S_OK) { endpointVolume->SetMasterVolumeLevelScalar((float)newVolume, NULL); endpointVolume->Release(); } defaultDevice->Release(); } deviceEnumerator->Release(); } CoUninitialize(); return 0; } Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.