2009-11-15 27 views
11

Cada vez que active un cuadro de mensaje en mi programa C# recibo un pitido muy molesto de mi computadora. ¿Cómo desactivo este pitido usando el código C#?¿Cómo desactivo el pitido del cuadro de mensaje C#?

El código que estoy usando es muy simple.

MessageBox.show("text"); 
+0

Creo que no hay forma de controlar esto para el cuadro de mensaje individual; es una configuración de Windows. ¿Esto hace que esta pregunta pertenezca a superuser.com? – dtb

+2

Estaba preguntando si había algún código de C# que pudiera escribir para que el pitido desapareciera solo para mi programa. No estaba pidiendo una configuración específica solo para mi sistema. Aclararé mi pregunta –

Respuesta

15

A partir de la búsqueda que he hecho parece que el pitido está cableado en la función de cuadro de mensaje de Win32:

Por lo tanto, debe escribir su propio método o detener el pitido en el hardware. El primero funcionará para todos, el último solo para ti.

+4

+1 para escribir su propio método/clase de cuadro de diálogo. – TrueWill

+0

Aquí hay otro artículo para aquellos que sienten la necesidad de crear su propio reemplazo de MessageBox: http://www.codeproject.com/Articles/19711/Creating-A-Custom-Message-Box-Part – RenniePet

5

Esto va a sonar raro hasta que lo hayas probado. Abra el símbolo del sistema, escriba:

net stop beep 

Hice un google rápido y encontraron otras 4 formas:

  1. local de la máquina: sc stop pitido & & sc config pitido START = deshabilitado
  2. máquina remota : sc \ remoteMachine stop beep & & sc \ remoteMachine config beep start = deshabilitado
  3. requiere reiniciar: Administrador de dispositivos -> Ver -> Mostrar dispositivos ocultos -> No Plug and Play -> Sonido -> Desactivar
  4. uso TweakUI: General> Configuración -> Desactiva el pitido errores

(from here)

+0

+1 quizás un poco mano dura, dependiendo de la necesidad. – kenny

2

Dependiendo de cuánto esté aprovechando el MessageBox (iconos, etc.) siempre puede hacer un diálogo personalizado. Especialmente si se trata de un mensaje simple que desea mostrar, esto no sería difícil ni tomaría mucho tiempo.

3

Debe dejar que el usuario final decida qué sonidos quiere. Puede configurar/desactivar sonidos para eventos del sistema tales como un cuadro de mensaje en el Panel de control/Sonidos y Dispositivos de audio/Sonidos/Eventos del programa.

Detener el servicio de pitido requiere privilegios administrativos, y no es algo que normalmente haría solo para una aplicación.

Si va a un cuadro de diálogo personalizado para reemplazar el MessageBox, recuerde implementar CTL-C (copie el contenido del mensaje en el portapapeles).

4

Intente utilizar la clase Visualspray MsgBox en lugar del MessageBox. No puedo explicar por qué, pero en mi computadora, el VisualBasic no emite un pitido.

http://msdn.microsoft.com/en-us/library/sfw6660x%28VS.85%29.aspx

Así que en lugar de:

MessageBox.Show("text") 

hacer:

MsgBox("text") 

Vas a tener que importar la función MsgBox de Microsoft.VisualBasic, en lugar de importar de mensaje del sistema. Windows.Forms. Pero eso no debería ser un problema; es parte de la API .NET.

EDITAR: Ah, bien, ahora puedo explicarlo. La falta de sonido se debe a que la versión VB del MessageBox no está decorada (es decir, no es informativa, una pregunta, etc.) de manera predeterminada. Asumo que no hay necesidad real de usar la clase VB MsgBox después de todo, probablemente si no subestimas el antiguo MessageBox normal, tampoco emitirá ningún sonido. :)

4

Así es como he resuelto ese pequeño problema.

Agregue esta clase simple a su proyecto. Es parte de mi biblioteca personal ahora, pero se puede añadir directamente a la clase en su proyecto

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 

namespace MyCSharpLibrary 
{ 
    public class Volume 
    { 
     [DllImport("winmm.dll")] 
     public static extern int waveOutGetVolume(IntPtr h, out uint dwVolume); 

     [DllImport("winmm.dll")] 
     public static extern int waveOutSetVolume(IntPtr h, uint dwVolume); 

     private static uint _savedVolumeLevel; 
     private static Boolean VolumeLevelSaved = false; 

     // ---------------------------------------------------------------------------- 
     public static void On() 
     { 
      if (VolumeLevelSaved) 
      { 
       waveOutSetVolume(IntPtr.Zero, _savedVolumeLevel); 
      } 
     } 

     // ---------------------------------------------------------------------------- 
     public static void Off() 
     { 
      waveOutGetVolume(IntPtr.Zero, out _savedVolumeLevel); 
      VolumeLevelSaved = true; 

      waveOutSetVolume(IntPtr.Zero, 0); 
     } 
    } 
} 

Ahora llamar Volume.Off() antes de llamar a MessageBox y Volume.On() después de

Volume.Off(); 
MessageBox.Show("\n Information \n", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); 
Volume.On(); 

prefiero ese enfoque porque no tengo que hacer modificaciones a Windows y puedo seleccionar cualquier ícono que quiera para mis MessageBoxes.

Gracias, adiós

+0

utilizando su enfoque causará la totalidad volumen de la ventana para silenciar, ¿y si el usuario está escuchando música? él tendrá un silencio por un segundo – advapi

1

A pesar de ser esta cuestión de edad que tenía el mismo problema, pero era capaz de solucionar de una manera muy simple.

MessageBox.Show("Your text here", "Information", MessageBoxButtons.OK, MessageBoxIcon.None); 

Al establecer el MessageBoxIcon-None el sistema no produce ningún sonido. Sin embargo, no habrá ningún icono en la caja. Algo así como this.

Cuestiones relacionadas