为了方便客户使用,在系统首页面用户可以设置系统音量,本来感觉应该很简单的事情,但是在网上搜索了大量的解决方法。在自己的电脑上都起不了作用。最多的还是调用微软的系统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显示)
希望各位提供自己更好的解决方式。