Come impostare il volume di sistema al livello di programmazione?

Come posso modificare il volume audio del sistema Windows utilizzando un’applicazione C #?

Sono un po ‘in ritardo per la festa, ma se stai cercando ora c’è un pacchetto nuget disponibile (AudioSwitcher.AudioApi.CoreAudio) che semplifica le interazioni audio. Installalo allora è semplice come:

CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice; Debug.WriteLine("Current Volume:" + defaultPlaybackDevice.Volume); defaultPlaybackDevice.Volume = 80; 

Ecco il codice:

 using System; using System.Windows.Forms; using System.Runtime.InteropServices; namespace Test { public class Test { 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; [DllImport("user32.dll")] public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); private void Mute() { SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_MUTE); } private void VolDown() { SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_DOWN); } private void VolUp() { SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_UP); } } } 

Trovato su dotnetcurry

Quando usi WPF devi usare il new WindowInteropHelper(this).Handle invece di this.Handle (grazie a Alex Beals)

Se le esercitazioni fornite nelle altre risposte sono troppo coinvolte, potresti provare un’implementazione come questa utilizzando la funzione keybd_event

 [DllImport("user32.dll")] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo); 

Uso:

 keybd_event((byte)Keys.VolumeUp, 0, 0, 0); // increase volume keybd_event((byte)Keys.VolumeDown, 0, 0, 0); // decrease volume 

Nel caso in cui desideri impostarlo su un valore esatto utilizzando le API Core Audio:

 using CoreAudioApi; public class SystemVolumeConfigurator { private readonly MMDeviceEnumerator _deviceEnumerator = new MMDeviceEnumerator(); private readonly MMDevice _playbackDevice; public SystemVolumeConfigurator() { _playbackDevice = _deviceEnumerator.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia); } public int GetVolume() { return (int)(_playbackDevice.AudioEndpointVolume.MasterVolumeLevelScalar * 100); } public void SetVolume(int volumeLevel) { if (volumeLevel < 0 || volumeLevel > 100) throw new ArgumentException("Volume must be between 0 and 100!"); _playbackDevice.AudioEndpointVolume.MasterVolumeLevelScalar = volumeLevel / 100.0f; } } 

Il mio codice è un po ‘diverso, ma utilizzo ancora CoreAudio

scaricato il pacchetto: nuget installa AudioSwitcher.AudioApi.CoreAudio -Version 3.0.0.1

 using AudioSwitcher.AudioApi.CoreAudio; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); CoreAudioDevice defaultPlaybackDevice = new CoreAudioController().DefaultPlaybackDevice; double vol = defaultPlaybackDevice.Volume; defaultPlaybackDevice.Volume = defaultPlaybackDevice.Volume - 5.0; defaultPlaybackDevice.Volume = defaultPlaybackDevice.Volume + 5.0; } }