Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改卷win32 c++; 如何在C++ Win32中改变音量?另外,我如何将其静音/取消静音?谢谢你的帮助_C++_Winapi_Audio_Volume - Fatal编程技术网

更改卷win32 c++; 如何在C++ Win32中改变音量?另外,我如何将其静音/取消静音?谢谢你的帮助

更改卷win32 c++; 如何在C++ Win32中改变音量?另外,我如何将其静音/取消静音?谢谢你的帮助,c++,winapi,audio,volume,C++,Winapi,Audio,Volume,有两种选择: 有 您是否考虑过显示音量控制并允许用户使用? 如果是这样,我可以发布一些代码。(基本上,您只需使用音量控制小程序即可 使用API 下面是一个例子: DWORD dwVolume; if (waveOutGetVolume(NULL, &dwVolume) == MMSYSERR_NOERROR) waveOutSetVolume(NULL, 0); // mute volume // later point in code, to unmute vo

有两种选择:

  • 您是否考虑过显示音量控制并允许用户使用? 如果是这样,我可以发布一些代码。(基本上,您只需使用音量控制小程序即可

  • 使用API

    下面是一个例子:

      DWORD dwVolume;
    
      if (waveOutGetVolume(NULL, &dwVolume) == MMSYSERR_NOERROR)
        waveOutSetVolume(NULL, 0); // mute volume
    
      // later point in code, to unmute volume...
      waveOutSetVolume(NULL, dwVolume);
    

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

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

    如果要在Vista及更高版本上更改主卷,请搜索该界面


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

    如果您只想更改音量,那么您可以使用虚拟键代码更改音量,如下所示:

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

    切换静音的最简单方法是

    const int APPCOMMAND_VOLUME_MUTE = 0x80000;
    SendMessage(this.Handle, WM_APPCOMMAND, IntPtr.Zero, (IntPtr)APPCOMMAND_VOLUME_MUTE);
    
    以类似的方式,您可以触发+Volume和-Volume键行为。看一看

    麦克风音量控制也是有价值的,但我还没试过

    如果需要对系统主卷进行更多控制,则必须检查Windows版本并执行两个版本的代码:
    类似于前面提到的Win XP。

    类似Vista和更高版本。

    对我来说,在谈到版本时,“上面”和“之外”听起来几乎一样。请你澄清一下,它们是一样的。我的观点是,从Windows Vista开始,继续到Windows的所有后续版本(包括Windows 7和所有后续发布的版本),混音器和wave音量是每个应用程序的,而不是全局的。对于Vista和更高版本,请使用IAudioEndpointVolume。这会将音量设置为零,这与静音不同(尽管效果非常相似)。它设置的是“波浪”音量,而不是“主音量”。这可能是你想要的,也可能不是你想要的。为什么你要将NULL传递给函数?模拟实用程序的按键操作从来都不是个好主意。我的请求是切换音量,比如30%到100%或者反转。WASAPI(Windows音频会话API)在用Win32 C++控制音频流时会有很大的用处。这是API官方文档的链接: