Как отключить звуковой сигнал сообщения С#?
Когда запускается ящик сообщений, используемый в моей программе на С#, я получаю очень раздражающий звуковой сигнал с моего компьютера. Как отключить этот звуковой сигнал с помощью кода С#.
Используемый мной код очень прост.
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.