Как отключить звуковой сигнал в окне сообщения c #? - PullRequest
14 голосов
/ 16 ноября 2009

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

Код, который я использую, очень прост.

MessageBox.show("text");

Ответы [ 7 ]

16 голосов
/ 16 ноября 2009

По результатам поиска, похоже, звуковой сигнал встроен в функцию окна сообщений Win32:

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

7 голосов
/ 02 ноября 2014

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

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

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.

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

6 голосов
/ 16 ноября 2009

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

net stop beep

Я сделал быстрый Google и нашел 4 других способа:

  1. локальный компьютер: звуковой сигнал остановки остановки & запуск звукового сигнала конфигурации sc = отключен
  2. удаленный компьютер: звуковой сигнал остановки sc \ remoteMachine & запуск звукового сигнала конфигурации sc \ remoteMachine = отключен
  3. требуется перезагрузка: Диспетчер устройств -> Вид -> Показать скрытые устройства -> Не подключи и играй -> Звуковой сигнал -> Отключить
  4. используйте TweakUI: Общие> Настройки -> Снимите звуковой сигнал при ошибках

(отсюда)

5 голосов
/ 25 марта 2010

Попробуйте использовать класс 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.

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

4 голосов
/ 23 февраля 2017

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

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

При установке MessageBoxIcon на None система не производит звук. Тем не менее, на коробке не будет значка. Что-то вроде это .

4 голосов
/ 16 ноября 2009

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

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

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

3 голосов
/ 16 ноября 2009

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

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