win32 c ++的更改量

问题描述 投票:10回答:7

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

c++ winapi audio volume
7个回答
2
投票

两个选项:

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

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


13
投票

使用waveOutSetVolume API。

这里是一个例子:

waveOutSetVolume

5
投票

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

如果要在Vista和更高版本上更改主音量,请搜索 DWORD dwVolume; if (waveOutGetVolume(NULL, &dwVolume) == MMSYSERR_NOERROR) waveOutSetVolume(NULL, 0); // mute volume // later point in code, to unmute volume... waveOutSetVolume(NULL, dwVolume); 界面。

IAudioEndpointVolume我几年前写的博客文章。


3
投票

也许您应该考虑不要更改全局音量。考虑一下-如果我降低MediaPlayer的音量,其他所有程序的声音仍然和以前一样大,而这恰恰是我对任何程序的期望-只能降低它的OWN音量。当然,可能有理由更改全局数量,没有违法;)


1
投票

如果您只想改变音量,则可以使用虚拟按键代码来改变音量,如下所示:

Here's

0
投票

切换静音的最简单方法是>

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

以类似的方式,您可以触发+ Volume和-Volume键的行为。看看const int APPCOMMAND_VOLUME_MUTE = 0x80000; SendMessage(this.Handle, WM_APPCOMMAND, IntPtr.Zero, (IntPtr)APPCOMMAND_VOLUME_MUTE); http://www.blackwasp.co.uk/BasicVolumeControl.aspx

还有诸如麦克风音量控制之类的值,但我没有尝试过。

如果需要对系统主卷进行更多控制,则必须检查Windows版本并执行2个版本的代码:类似于上述Win XP的http://msdn.microsoft.com/en-us/library/windows/desktop/ms646247%28v=vs.85%29.aspx。类似Changing master volume level for Vista及更高版本。


0
投票

WASAPI(Windows Audio Session API)在控制音频方面非常有用Win32 C ++的流。这是指向API官方文档的链接:

© www.soinside.com 2019 - 2024. All rights reserved.