C#获取主音量/百分比

时间:2010-11-20 22:03:19

标签: c# .net

我使用此代码来静音/取消静音主音量

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

我想知道如何获得主音量/ precent,因为我想知道声音是否已经静音。

编辑: 或者我想分开静音/取消静音,这样我就有两个功能 - 一个用于静音,另一个用于静音。

感谢

3 个答案:

答案 0 :(得分:3)

看看这个项目http://www.codeproject.com/KB/vista/CoreAudio.aspx

他们创建了一个自己的混音器控件,它还会报告当前的音量和静音/取消静音状态:

defaultDevice.AudioEndpointVolume.OnVolumeNotification += new AudioEndpointVolumeNotificationDelegate(
    AudioEndpointVolume_OnVolumeNotification);
// .. snip ..
void AudioEndpointVolume_OnVolumeNotification(AudioVolumeNotificationData data)
{
    Console.WriteLine("New Volume {0}", data.MasterVolume);
    Console.WriteLine("Muted      {0}", data.Muted);
}

这对你有帮助吗?

编辑:使用此代码和项目中的类,您应该能够直接设置和取消设置静音(无需切换):

MMDeviceEnumerator devEnum = new MMDeviceEnumerator();
MMDevice defaultDevice = devEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
defaultDevice.AudioEndpointVolume.Mute = true; // or false

答案 1 :(得分:1)

我无法为所有Windows版本(xp,vista& 7)执行此操作 虽然,我通过使用外部程序(例如NirCmd)实现了它,并发送了我需要的命令。

不是那么好的解决方案,但确实解决了我的问题。

答案 2 :(得分:0)

This thread显示了如何从C#控制主卷。

您可能也对此问题的回答感兴趣:Get Master Sound Volume in c#

尤其是NAudio托管包装器。