C#获得主音量/ precent
我有这个代码来静音/取消静音主音量
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,因为我想知道声音是否已经静音。
编辑:或者我想分开静音/取消静音,这样我就有两个function – 一个用于静音,另一个用于静音。
谢谢
看看这个项目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
我无法为所有Windows版本(xp,vista和7)执行此操作。
虽然,我通过使用外部程序(如NirCmd)实现了它,并发送了我需要的命令。
不太好的解决方案,但它确实解决了我的问题。
该线程显示了如何从C#控制主卷。
您可能也对此问题的回答感兴趣: 在c#中获取主音量
特别是NAudio管理的包装器。