c# 控制音量大小 CoreAudioApi

来源:互联网 发布:2015网络新词及意思 编辑:程序博客网 时间:2024/04/30 04:37
        为了方便客户使用,在系统首页面用户可以设置系统音量,本来感觉应该很简单的事情,但是在网上搜索了大量的解决方法。在自己的电脑上都起不了作用。最多的还是调用微软的系统API. 代码基本上就是第一种方式   测试了下 根本无法设置音量也无法获取当前音量大小  
        [DllImport("winmm.dll")]        public static extern long waveOutSetVolume(UInt32 deviceID, UInt32 Volume);        [DllImport("winmm.dll")]        public static extern long waveOutGetVolume(UInt32 deviceID, out UInt32 Volume);

第二种方式 可以设置音量增加或者减小 但是无法统当前音量 没找到对应的API

/// <summary>        /// 改变系统音量大小,增加        /// </summary>        public void VolumeUp()        {            keybd_event(VK_VOLUME_UP, MapVirtualKey(VK_VOLUME_UP, 0), KEYEVENTF_EXTENDEDKEY, 0);            keybd_event(VK_VOLUME_UP, MapVirtualKey(VK_VOLUME_UP, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);        }         ///<summary>        /// 改变系统音量大小,减小        /// </summary>        public void VolumeDown()        {            keybd_event(VK_VOLUME_DOWN, MapVirtualKey(VK_VOLUME_DOWN, 0), KEYEVENTF_EXTENDEDKEY, 0);            keybd_event(VK_VOLUME_DOWN, MapVirtualKey(VK_VOLUME_DOWN, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);        }

最后从网上找到了另一种方式 通过CoreAudioApi 通过测试确实能用。

  CoreAudioApi.MMDeviceEnumerator devices = new MMDeviceEnumerator();  MMDevice device = devices.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia);    device.AudioEndpointVolume.MasterVolumeLevel = trackBar1.Value;//(直接设置音量  也可以调用方法设置音量增加减少)     trackBar1.Value = (int)device.AudioEndpointVolume.MasterVolumeLevel;//(获取当前音量并且通过trackBar1显示)
 希望各位提供自己更好的解决方式。
0 0
原创粉丝点击