11

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

4

5 回答 5

14

使用waveOutSetVolumeAPI。

这是一个例子:

  DWORD dwVolume;

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

  // later point in code, to unmute volume...
  waveOutSetVolume(NULL, dwVolume);
于 2009-03-31T00:42:27.757 回答
8

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

如果要更改 Vista 及更高版本的主音量,请搜索IAudioEndpointVolume接口。

这是我几年前写的一篇博客文章。

于 2009-04-04T07:17:30.267 回答
2

两种选择:

  1. SO上有这个问题的答案(从C ++更改主卷,其中还包括SetMute等)

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

于 2009-03-31T00:40:25.283 回答
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));
}
于 2014-06-19T17:33:59.337 回答
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更改主音量级别。对于 Vista 及更高版本,
类似于https://stackoverflow.com/a/3437069/1365066 。

于 2014-06-20T17:46:38.870 回答