在我的程序中,我可以使用系统变量来增加和减少音量,例如
private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int APPCOMMAND_VOLUME_UP = 0xA0000;
private const int APPCOMMAND_VOLUME_DOWN = 0x90000;
private const int WM_APPCOMMAND = 0x319;
但是有一个系统变量可以让我为其分配一个值。例如,将音量设置为57,而不是增大或减小以达到该值。
最终要做的是使用轨迹栏来调节音量。在任一方向上拖动时,跟踪栏应等于系统音量,以便相应地更改音量。
您可以使用NuGet包AudioSwitcher.AudioApi.CoreAudio在那里回答:How to programmatically set the system volume?
通过验证码:
CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice;
Debug.WriteLine("Current Volume:" + defaultPlaybackDevice.Volume);
defaultPlaybackDevice.Volume = 80;
注意:如果设备静音但不会取消静音,则会在默认播放设备上将音量设置在[0; 100]范围内,因此如果要取消静音,则应呼叫:
defaultPlaybackDevice.Mute(false);
出于您的目的,它还提供事件VolumeChanged和MuteChanged来跟踪内部音量变化。
内部使用Core Audio API,它是Windows Vista启动提供的基于COM的低级音频控制API。
如果您想编写自己的包装器来执行此操作,则应该看到IAudioEndpointVolume接口(https://docs.microsoft.com/en-us/windows/win32/api/endpointvolume/nn-endpointvolume-iaudioendpointvolume)
内部音量通知实现为结构AUDIO_VOLUME_NOTIFICATION_DATA(https://docs.microsoft.com/en-us/windows/win32/api/endpointvolume/ns-endpointvolume-audio_volume_notification_data)中提供的信息中的回调