Windows - Может ли вывод консоли случайно вызвать системный звуковой сигнал? - PullRequest
4 голосов
/ 03 июня 2009

У меня есть консольное приложение C #, которое много записывает на консоль (используя Trace). Некоторые вещи, которые он записывает, представляют собой сжатое представление сетевого сообщения (поэтому многие из них отображаются в виде прикольных неалфавитных символов).

Я получаю системные звуковые сигналы очень часто во время работы приложения. Возможно ли, что какой-то «текст», который я пишу на консоль, вызывает их?

(Под системным звуковым сигналом я имею в виду низкотехнологичный динамик внутри корпуса ПК, а не звуковую схему Windows любого типа WAV)


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

Ответы [ 6 ]

19 голосов
/ 03 июня 2009

Это обычно вызывается выводом кода символа 7, CTRL-G, который является символом BEL (колокол).

Первое, что я обычно делаю, покупая новый компьютер или материнскую плату, это проверяя, чтобы провод от материнской платы к динамику не был подключен. Я не пользовался динамиком со времен коммандера Кина (и удаление этого провода - лучший способ остановить звук, не зависящий от ОС: -).

5 голосов
/ 03 июня 2009
HKEY_CURRENT_USER\Control Panel\Sound

установите кнопку «Beep» на «no».

4 голосов
/ 03 июня 2009

абсолютно, если вы выводите управляющий код ASCII "Bell" (0x7) на консоль, он издает звуковой сигнал.

3 голосов
/ 09 февраля 2013

Даже если вы проверите ввод на наличие символов BELL, он все равно может подать звуковой сигнал. Это связано с настройками шрифта и преобразованием юникода. Соответствующий символ U + 2022 , Bullet.

Раймонд Чен объясняет :

В кодовой странице OEM символ маркера преобразуется в звуковой сигнал. Но почему это так?

То, что вы видите, это MB_USEGLYPHCHARS в обратном направлении. Майкл Каплан обсуждали MB_USEGLYPHCHARS некоторое время назад. Это определяет, является ли определенный символы должны рассматриваться как управляющие символы или как печатные символы при конвертации в Unicode. Например, он контролирует должен ли ASCII-символ колокола 0x07 быть преобразован в Символ колокольчика Юникод U + 0007 или пуля Юникод U + 2022. Вы нужен флаг MB_USEGLYPHCHARS, чтобы решить, каким путем идти, когда преобразование в Unicode, но нет соответствующей неопределенности, когда конвертирование из Unicode. При конвертации из Unicode, U + 0007 и U + 2022 соответствует символу ASCII.

3 голосов
/ 03 июня 2009

Если вы не хотите подавать звуковой сигнал, вам придется либо заменить символ 0x7 перед его выводом, либо отключить драйвер устройства «Beep», который вы найдете в разделе «Драйверы без Plug and Play». , отображается, если вы включите параметр Показать скрытые устройства. Или вынуть динамик.

1 голос
/ 03 июня 2009

\ b в выходной строке вызовет звуковой сигнал, если не отключен на уровне ОС.

...