代码之家  ›  专栏  ›  技术社区  ›  jinsungy

使用C使Windows音量静音#

  •  17
  • jinsungy  · 技术社区  · 16 年前

    有人知道如何使用C#以编程方式禁用Windows XP卷吗?

    6 回复  |  直到 16 年前
        1
  •  12
  •   Jorge Ferreira    16 年前

    为P/Invoke声明:

    private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
    private const int WM_APPCOMMAND = 0x319;
    
    [DllImport("user32.dll")]
    public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
    

    SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr) APPCOMMAND_VOLUME_MUTE);
    
        2
  •  4
  •   Jimi    6 年前

    您可以在Windows Vista/7和8上使用什么:

    你可以用 NAudio
    下载最新版本。提取DLL并引用C#项目中的DLL NAudio。

    然后添加以下代码来遍历所有可用的音频设备,并在可能的情况下将其静音。

    try
    {
        //Instantiate an Enumerator to find audio devices
        NAudio.CoreAudioApi.MMDeviceEnumerator MMDE = new NAudio.CoreAudioApi.MMDeviceEnumerator();
        //Get all the devices, no matter what condition or status
        NAudio.CoreAudioApi.MMDeviceCollection DevCol = MMDE.EnumerateAudioEndPoints(NAudio.CoreAudioApi.DataFlow.All, NAudio.CoreAudioApi.DeviceState.All);
        //Loop through all devices
        foreach (NAudio.CoreAudioApi.MMDevice dev in DevCol)
        {
            try
            {
                //Show us the human understandable name of the device
                System.Diagnostics.Debug.Print(dev.FriendlyName);
                //Mute it
                dev.AudioEndpointVolume.Mute = true;
            }
            catch (Exception ex)
            {
                //Do something with exception when an audio endpoint could not be muted
            }
        }
    }
    catch (Exception ex)
    {
        //When something happend that prevent us to iterate through the devices
    }
    
        3
  •  2
  •   itsmatt    16 年前

    我偶然发现 this project 如果你运行的是Vista,这可能会很有趣。

        4
  •  2
  •   Jimi    6 年前

    How to programmatically mute the Windows XP Volume using C#?

    void SetPlayerMute(int playerMixerNo, bool value)
    {
        Mixer mx = new Mixer();
        mx.MixerNo = playerMixerNo;
        DestinationLine dl = mx.GetDestination(Mixer.Playback);
        if (dl != null)
        {
            foreach (MixerControl ctrl in dl.Controls)
            {
                if (ctrl is MixerMuteControl)
                {
                    ((MixerMuteControl)ctrl).Value = (value) ? 1 : 0;
                    break;
                }
            }
        }
    }
    
        5
  •  0
  •   4chen500 4chen500    16 年前

    您可能需要使用MCI命令: http://msdn.microsoft.com/en-us/library/ms709461(VS.85).aspx

    我要补充的是,虽然这将给你很好的控制输入和输出混频器在windows中,你可能有一些困难做详细的控制,如设置麦克风升压等。

        6
  •  0
  •   Jim B-G    16 年前

    您可以使用P/Invoke,如下所述: http://www.microsoft.com/indonesia/msdn/pinvoke.aspx