Как отключить звуковой сигнал сообщения С#?

Когда запускается ящик сообщений, используемый в моей программе на С#, я получаю очень раздражающий звуковой сигнал с моего компьютера. Как отключить этот звуковой сигнал с помощью кода С#.

Используемый мной код очень прост.

MessageBox.show("text");

Ответ 1

Из поиска, который я сделал, похоже, что звуковой сигнал подключен к функции окна сообщения Win32:

Итак, вам нужно либо написать свой собственный метод, либо остановить звуковой сигнал в аппаратном обеспечении. Первый будет работать для всех, последний для вас.

Ответ 2

Это будет звучать странно, пока вы не попробуете его. Откройте командную строку, введите:

net stop beep

Я сделал быстрый google и нашел еще 4 способа:

  • локальная машина: звуковой сигнал sc stop && & sc config beep start = disabled
  • удаленная машина: sc\remoteMachine stop beep && & & sc\remoteMachine config beep start = disabled
  • требует перезагрузки: Диспетчер устройств → Просмотр → Показать скрытые устройства → Не подключать и воспроизводить → Звуковой сигнал → Отключить
  • используйте TweakUI: Общие > Настройки → Снимите флажок при ошибках

(отсюда)

Ответ 3

Попробуйте использовать класс VisualBasic MsgBox вместо MessageBox. Я не могу объяснить, почему, но на моем компьютере VisualBasic не подает звуковой сигнал.

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

Итак, вместо:

MessageBox.Show("text")

делать:

MsgBox("text")

Вам нужно будет импортировать функцию MsgBox из Microsoft.VisualBasic вместо импорта MessageBox из System.Windows.Forms. Но это не должно быть проблемой; это часть .NET api.

ИЗМЕНИТЬ: О, хорошо, теперь я могу это объяснить. Отсутствие звука связано с тем, что версия VB для MessageBox по умолчанию не декорирована (т.е. Не является информационным, вопросом и т.д.). Я полагаю, что нет никакой реальной необходимости использовать класс VB MsgBox в конце концов - возможно, если вы сделаете обычный старый MessageBox без декодирования, он тоже не произведет никакого звука.:)

Ответ 4

Вот как я решил эту маленькую проблему.

Добавьте этот простой класс в свой проект. Это часть моей личной библиотеки, но вы можете добавить класс непосредственно в свой проект

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

Теперь вызовите Volume.Off() перед вызовом MessageBox и Volume.On() после

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

Я предпочитаю этот подход, потому что мне не нужно вносить изменения в Windows, и я могу выбрать любые значки, которые я хочу для своих MessageBoxes.

Спасибо, пока

Ответ 5

Вы должны оставить его конечному пользователю, чтобы решить, какие звуки он хочет. Он может настраивать/отключать звуки для системных событий, таких как окно сообщений в панели управления/звуках и аудиоустройствах/звуках/событиях программы.

Для остановки службы звуковых сигналов необходимы административные привилегии, и это не то, что вы обычно делаете только для одного приложения.

Если вы перейдете на специальный диалог для замены MessageBox, не забудьте реализовать CTL-C (скопировать содержимое сообщения в буфер обмена).

Ответ 6

В зависимости от того, насколько вы используете MessageBox (значки и т.д.), вы всегда можете создать настраиваемый диалог. Особенно, если это простое сообщение, которое вы хотите отобразить, это не будет сложно или требует много времени.

Ответ 7

Несмотря на то, что этот вопрос был старым, у меня была та же проблема, но я смог исправить это очень простым способом.

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

Установив MessageBoxIcon на None, система не производит звук. Однако на коробке не будет значка. Что-то вроде this.