change volume win32 c++

后端 未结 6 1955
你的背包
你的背包 2020-12-09 05:41

How would I go about changing the sound volume in c++ win32? Also how would I mute/unmute it? Thanks for the help!

相关标签:
6条回答
  • 2020-12-09 06:12

    If all you want to do is change the volume then you can use the virtual key codes to change volume like this:

    void changeVolume()
    {
      INPUT ip={0};
      ip.type = INPUT_KEYBOARD;
      ip.ki.wVk = VK_VOLUME_UP;   //or VOLUME_DOWN or MUTE
      SendInput(1, &ip, sizeof(INPUT));
      ip.ki.dwFlags = KEYEVENTF_KEYUP;
      SendInput(1, &ip, sizeof(INPUT));
    }
    
    0 讨论(0)
  • 2020-12-09 06:21

    Two options:

    1. There's an answer to that question here on SO (changing the master volume from C++, which also includes SetMute, etc.)

    2. Have you considered showing the Volume controls and letting the user? If so, I can post some code for that. (You basically just shell out to the volume control applet.

    0 讨论(0)
  • 2020-12-09 06:23

    Maybe you should consider to NOT change the global volume. Think about it - if I lower the volume in MediaPlayer all other programs are still as loud as before, and that is exactly what I expect from any program - to only lower it's OWN volume. Of course there might be reasons to change global volume, no offense ;)

    0 讨论(0)
  • 2020-12-09 06:27

    waveOutSetVolume and mixerSetControlDetails only change the volume for your application on Windows Vista and above.

    If you want to change the master volume on Vista and beyond, search for the IAudioEndpointVolume interface.

    Here's a blog post I wrote on this a couple of years ago.

    0 讨论(0)
  • 2020-12-09 06:27

    Simplest way to toggle mute is

    const int APPCOMMAND_VOLUME_MUTE = 0x80000;
    SendMessage(this.Handle, WM_APPCOMMAND, IntPtr.Zero, (IntPtr)APPCOMMAND_VOLUME_MUTE);
    

    In similar way you can trigger +Volume and -Volume keys behavior. Take a look at http://www.blackwasp.co.uk/BasicVolumeControl.aspx and http://msdn.microsoft.com/en-us/library/windows/desktop/ms646247%28v=vs.85%29.aspx

    There are also values for things like microphone volume control, but I haven't tried them.

    If you need more control over system master volume, you must check Windows version and do 2 versions of code:
    Something like aforementioned Changing master volume level for Win XP.
    Something like https://stackoverflow.com/a/3437069/1365066 for Vista and higher.

    0 讨论(0)
  • 2020-12-09 06:33

    Use the waveOutSetVolume API.

    Here's an example:

      DWORD dwVolume;
    
      if (waveOutGetVolume(NULL, &dwVolume) == MMSYSERR_NOERROR)
        waveOutSetVolume(NULL, 0); // mute volume
    
      // later point in code, to unmute volume...
      waveOutSetVolume(NULL, dwVolume);
    
    0 讨论(0)
提交回复
热议问题