`
coolszy
  • 浏览: 1406813 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

c# 判断系统是否静音等音频操作

阅读更多

因为自己写的小程序需要在工作时间把本本静音、切换IP的操作,查了win API切换静音是调用同一个函数,无法判断系统是否处在静音的状态。而且旧的API代码对Vista/win7支持不好,这里提供两种解决方案(至于判断系统是否静音尚缺中文资料,故撰写此文以供需要的朋友参考),一种是旧的,下面先贴的代码是大家基本上都能找到的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;
//CoreAudioApi支持最新的Vista/Win7作業系統,下麵的代碼可能是較早的API版本,不推薦使用
namespace SwitchIP
{
    class VolumeControl
    {
        //调用该函数的窗体
        public Form myForm;
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam);
        const uint WM_APPCOMMAND = 0x319;
        const uint APPCOMMAND_VOLUME_UP = 0x0a;
        const uint APPCOMMAND_VOLUME_DOWN = 0x09;
        const uint APPCOMMAND_VOLUME_MUTE = 0x08;
        //增大音量
        public  void VolumeUp(){
            SendMessage(myForm.Handle, WM_APPCOMMAND, 0x30292, APPCOMMAND_VOLUME_UP * 0x10000);   
        }
        //降低音量
        public  void VolumeDown() {
            SendMessage(myForm.Handle, WM_APPCOMMAND, 0x30292, APPCOMMAND_VOLUME_DOWN * 0x10000); 
        }
        //该函数会自动在静音和非静音状态下切换
        public  void VolumeMute() {
            SendMessage(myForm.Handle, WM_APPCOMMAND, 0x200eb0, APPCOMMAND_VOLUME_MUTE * 0x10000); 
        }

            
    }
}

 

第二种也是推荐的方法,仅在win7上测试过:

这里引用了国外友人封装好的Audio类(包含更多的音频操作),具体代码下载可以参考如下链接

using CoreAudioApi;
/*QFord@QQ.COM
需要引用CoreAudioApi.dll
可在下面的链接中找到
*/
......
private MMDevice defaultDevice = null;
...... 
/*參考資料
        http://www.codeproject.com/KB/vista/CoreAudio.aspx?msg=2747721
        */
        //判斷當前系統揚聲器狀態
        private bool isMuted()
        {
           return defaultDevice.AudioEndpointVolume.Mute;
        }

        //靜音
        private void setMute()
        {
            defaultDevice.AudioEndpointVolume.Mute = true;
        }
        //解除靜音
        private void setUnMute()
        {
            defaultDevice.AudioEndpointVolume.Mute = false;
        }
        //初始化MMDevice
        private void muteInit()
        {
            MMDeviceEnumerator devEnum = new MMDeviceEnumerator();
            defaultDevice =
             devEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);
        }

 

分享到:
评论
2 楼 雨季醉清风 2010-10-06  
看看~~~~~~~
1 楼 ylc2010 2010-09-07  
请问CoreAudioApi.dll怎么使用,与代码怎么结合?

相关推荐

Global site tag (gtag.js) - Google Analytics