改变音量win32 c ++

时间:2009-03-31 00:38:56

标签: c++ winapi audio volume

如何更改c ++ win32中的音量?另外,我将如何静音/取消静音?谢谢你的帮助!

6 个答案:

答案 0 :(得分:11)

使用waveOutSetVolume API。

以下是一个例子:

  DWORD dwVolume;

  if (waveOutGetVolume(NULL, &dwVolume) == MMSYSERR_NOERROR)
    waveOutSetVolume(NULL, 0); // mute volume

  // later point in code, to unmute volume...
  waveOutSetVolume(NULL, dwVolume);

答案 1 :(得分:5)

waveOutSetVolume和mixerSetControlDetails仅在Windows Vista及更高版本上更改应用程序的卷。

如果要在Vista及更高版本上更改主音量,请搜索IAudioEndpointVolume界面。

Here's几年前我写的一篇博客文章。

答案 2 :(得分:3)

也许你应该考虑不要改变全球量。 想一想 - 如果我降低MediaPlayer中的音量,所有其他程序仍然像以前一样响亮,这正是我对任何程序的期望 - 只降低它的OWN音量。 当然可能有理由改变全球数量,没有冒犯;)

答案 3 :(得分:2)

两个选项:

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

  2. 您是否考虑过显示音量控件并让用户? 如果是这样,我可以发布一些代码。 (你基本上只是向音量控制小程序发出外壳。

答案 4 :(得分:1)

如果您只想更改音量,则可以使用虚拟键码更改音量:

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));
}

答案 5 :(得分:0)

切换静音的最简单方法是

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

以类似的方式,您可以触发+ Volume和-Volume键行为。请查看http://www.blackwasp.co.uk/BasicVolumeControl.aspxhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms646247%28v=vs.85%29.aspx

还有麦克风音量控制等值,但我还没有尝试过。

如果您需要更多地控制系统主卷,则必须检查Windows版本并执行2个版本的代码:
适用于Win XP的上述Changing master volume level 对于Vista及更高版本,https://stackoverflow.com/a/3437069/1365066之类的东西。