如何更改c ++ win32中的音量?另外,我将如何静音/取消静音?谢谢你的帮助!
答案 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)
两个选项:
您是否考虑过显示音量控件并让用户? 如果是这样,我可以发布一些代码。 (你基本上只是向音量控制小程序发出外壳。
答案 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.aspx和http://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之类的东西。