C#如何判断系统是否是静音

原创|其它|编辑:郝浩|2010-01-26 10:10:27.000|阅读 1569 次

概述:因为自己写的小程序需要在工作时间把本本静音、切换IP的操作,查了win API切换静音是调用同一个函数,无法判断系统是否处在静音的状态。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

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


 view plaincopy to clipboardprint?
  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);
  }
  }
  }
  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类,具体代码下载可以参考如下链接

 


 view plaincopy to clipboardprint?
  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);
  }


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP