2010-11-20 13 views
7

Tengo este código para activar/desactivar el volumen principalC# consiguen nivel de volumen maestro/precent

private const int APPCOMMAND_VOLUME_MUTE = 0x80000; 
private const int WM_APPCOMMAND = 0x319; 

[DllImport("user32.dll")] 
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam); 

SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr)APPCOMMAND_VOLUME_MUTE); 

lo haría saber cómo puedo conseguir el nivel de volumen maestro/precent porque yo quiero saber si el sonido ya está silenciado o no.

Edición: o si no, me gustaría dividir el sonido de silenciar/activar el sonido, así que tendré dos funciones: una para silenciar y otra para activar el sonido.

gracias

Respuesta

1

yo no podría hacerlo para todas las versiones de Windows (XP, Vista & 7).
Sin embargo, lo logré utilizando programas externos, como NirCmd, y envié el comando que necesitaba.

no tan buena solución, pero lo hizo resolver mi problema.

0

This thread muestra cómo controlar el volumen principal de C#.

Usted también puede estar interesado en las respuestas a esta pregunta: Get Master Sound Volume in c#

Especialmente la envoltura NAudio administrado.

+0

lo probé y no funcionó. – Ron

+1

¿Qué, específicamente, no funcionó? Los comentarios en el hilo indican que funciona. –

+0

usó la función GetVolume() y devolvió 65535, después de que cambié el volumen, me devolvió el mismo valor - 65535. ¿Tal vez estoy usando la función incorrecta? – Ron

4

Tenga una mirada en este proyecto http://www.codeproject.com/KB/vista/CoreAudio.aspx

Ellos crearon un mezclador propio control, que también informa de la volumne actual y el estado silenciar/activar:

defaultDevice.AudioEndpointVolume.OnVolumeNotification += new AudioEndpointVolumeNotificationDelegate(
    AudioEndpointVolume_OnVolumeNotification); 
// .. snip .. 
void AudioEndpointVolume_OnVolumeNotification(AudioVolumeNotificationData data) 
{ 
    Console.WriteLine("New Volume {0}", data.MasterVolume); 
    Console.WriteLine("Muted  {0}", data.Muted); 
} 

¿Le ayuda esto?

EDIT: Con este código y la clase de proyecto que debe ser capaz de establecer y mudo desarmar directamente (sin conmutación):

MMDeviceEnumerator devEnum = new MMDeviceEnumerator(); 
MMDevice defaultDevice = devEnum.GetDefaultAudioEndpoint(EDataFlow.eRender, ERole.eMultimedia); 
defaultDevice.AudioEndpointVolume.Mute = true; // or false 
+0

El enlace CodeProject está muerto –

+0

Esto funciona de maravilla. Tenga en cuenta que deberá hacer referencia a NAudio.dll con el siguiente espacio de nombres: utilizando NAudio.CoreAudioApi ;. MasterVolumeLevelScalar es una escala lineal de 0-1, mientras que MasterVolumeLevel es una escala no lineal. –

Cuestiones relacionadas