2009-11-15 20 views
11

Ogni volta che si attiva una casella di messaggio utilizzata nel mio programma C#, ricevo un segnale acustico molto fastidioso dal mio computer. Come disabilitare questo segnale acustico usando il codice C#.Come disabilitare il segnale acustico della casella dei messaggi C#?

Il codice che sto usando è molto semplice.

MessageBox.show("text"); 
+0

Credo non ci sia modo di controllare questo per le singole finestre di messaggio; è un'impostazione di Windows. Questo fa sì che questa domanda appartenga a superuser.com? – dtb

+2

Stavo chiedendo se c'è qualche codice C# che potrei scrivere per far sparire il segnale acustico solo per il mio programma. Non stavo chiedendo un'impostazione specifica solo per il mio sistema. Chiarirò la mia domanda –

risposta

15

Dalla ricerca che ho fatto sembra che il segnale acustico è cablato in la funzione di finestra di messaggio Win32:

Quindi è necessario scrivere il proprio metodo o interrompere il segnale acustico nell'hardware. Il primo funzionerà per tutti, il secondo solo per te.

+4

+1 per scrivere il proprio metodo/classe di dialogo. – TrueWill

+0

Ecco un altro articolo per coloro che sentono l'impulso di creare la propria sostituzione MessageBox: http://www.codeproject.com/Articles/19711/Creating-A-Custom-Message-Box-Part – RenniePet

5

Questo suono sembrerà strano finché non lo avremo provato. Aprire il prompt dei comandi digitare:

net stop beep 

Ho fatto una rapida di Google e hanno trovato altri 4 modi:

  1. locale macchina: sc stop beep & & sc config bip Start = disabilitato
  2. macchina remota : sc \ remoteMachine stop beep & & sc \ remoteMachine config beep start = disabilitato
  3. richiede il riavvio: Gestione periferiche -> Visualizza -> Mostra dispositivi nascosti -> Non collegato and Play -> Beep -> Disattiva
  4. uso TweakUI: Generali> Impostazioni -> Deselezionare la Beep Errori

(from here)

+0

+1 forse un po 'pesante, a seconda delle necessità. – kenny

2

A seconda di quanto si sta sfruttando il MessageBox (icone, ecc.) È sempre possibile creare una finestra di dialogo personalizzata. Soprattutto se si tratta di un semplice messaggio che si desidera visualizzare, ciò non sarebbe difficile o richiedere molto tempo.

3

Si dovrebbe lasciare all'utente finale decidere quali suoni desidera. Può configurare/disattivare i suoni per eventi di sistema come una messagebox in Pannello di controllo/Suoni e Dispositivi audio/Suoni/Eventi programma.

L'arresto del servizio beep richiede i privilegi di amministratore e non è qualcosa che normalmente si farebbe solo per un'applicazione.

Se si utilizza una finestra di dialogo personalizzata per sostituire MessageBox, ricordarsi di implementare CTL-C (copia il contenuto della messagebox negli appunti).

4

Provare a utilizzare la classe MsgBox VisualBasic anziché MessageBox. Non riesco a spiegarne il motivo, ma sul mio computer, il VisualBasic non emette segnali acustici.

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

Così, invece di:

MessageBox.Show("text") 

fare:

MsgBox("text") 

Dovrete importare la funzione MsgBox da Microsoft.VisualBasic, invece di importare MessageBox dal sistema. Windows.Forms. Ma quello non dovrebbe essere un problema; fa parte di .NET API.

EDIT: Ah ok, ora posso spiegarlo. La mancanza di suono è dovuta al fatto che la versione VB del MessageBox non è decorata (vale a dire non è informativa, è una domanda, ecc.) Per impostazione predefinita. Presumo che non ci sia davvero bisogno di usare la classe MsgBox VB dopotutto - probabilmente se si rende la vecchia MessageBox regolare non decorata, non produrrà alcun suono. :)

4

Ecco come ho risolto questo piccolo problema.

Aggiungi questa classe semplice al tuo progetto. E 'parte della mia biblioteca personale ora, ma è possibile aggiungere la classe direttamente nel progetto

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); 
     } 
    } 
} 

Ora chiamare Volume.Off() prima di chiamare MessageBox e Volume.On() dopo

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

preferisco questo approccio perché non devo apportare modifiche a Windows e posso selezionare le icone che voglio per i miei MessageBox.

Grazie, ciao

+0

utilizzando il proprio approccio causerà l'intero volume della finestra per silenziare, cosa succede se l'utente sta ascoltando musica? resterà in silenzio per un secondo – advapi

1

Nonostante questa domanda essere vecchio Ho avuto lo stesso problema, ma è stato in grado di risolvere il problema in un modo molto semplice.

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

Impostando il MessageBoxIcon a None sistema produce alcun suono. Tuttavia, non ci sarà un'icona sulla scatola. Qualcosa come this.

Problemi correlati