因为自己写的小程序需要在工作时间把本本静音、切换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);
}
分享到:
相关推荐
外国比较全的系统音频操作实例,注要类SoundControl 附小片代码: //判断是否静音 public void IsMute() { MixerInfo mi = GetMixerControls(); MuteIt(mi, false, false); }
C#判断文件是否被打开,以前自己用的,似乎也是从网上找来的。
C#判断文件是否存在并创建和删除文件夹! 值得下载看看!资源免费,大家分享!! 更多免费资源 http://ynsky.download.csdn.net/
C#判断指定的坐标点(经纬度)是否在指定的区域内!地图坐标点判断(经纬度判断)
C#判断一个文件夹内是否存在子文件夹或文件
C#判断线程池中所有的线程是否已经完成.doc
C# winfrom 程序 源码 测试项目 直接运行 判断鼠标键盘时间系统是否在一段时间没有操作, 倒计时自动锁定程序
C# 所有音频格式操作,C# 所有音频格式操作,C# 所有音频格式操作
C#定时检测是否当前程序是否有人操作(WPF实现),winform中也一样,其中的核心类可通用。
c# 判断网络是否连接,判断是否有连接,并获取连接类型,网卡连接,猫连接等
使用射线法,精确判断某点是否在由一组点所确定的任意的闭合曲线内(折线图)
c#版本的校验文本是否为合法json格式,单独一个类无需其他引用
C#判断webbrowser页面最终加载完成
就是一个判断本机与某个IP地址、某个电脑是否连通,从而可以判断本机是否在某个网段上,也可以通过ping外网的地址来判断本机是否连网,也可以用来检测某个网站是否还存在可以访问。
运用DirectoryInfo类和FileInfo类。 创建文件、目录或驱动器的实例。...可以手动输入路径 判断目录是否存在。 文件是否存在。 如果不存在将创建此文件,并自动生成目录。 VS2005编写 2011年6月29日
提供了3种验证输入的字符串是否是IP地址的方法
c#实现音频播放,可以调节音量,可以停止播放,用vs2010打开
在网上找设置/获取Windows操作系统音量的方法,要么只有设置的办法(通过SendMessageW发送增减音量、静音消息),要么只适用于Windows XP。找到的关于CoreAudioApi方式处理的方式,里面提供的dll已经失效...
通过C#判断折线自相交情况,并求出相交细节,全程可视化操作
判断网络连接状态例子,主要有判断本地和网络是否连接,网线是否掉线等等