Windows - 控制台输出是否会无意中导致系统发出蜂鸣声?

时间:2009-06-03 13:28:15

标签: c# .net windows console beep

我有一个C#控制台应用程序,可以将很多日志记录到控制台(使用Trace)。它记录的一些东西是网络消息的压缩表示(因此很多都被渲染为时髦的非字母字符)。

在应用程序运行时,我经常会发出系统蜂鸣声。我写入控制台的某些“文本”是否可能导致它们?

(系统发出哔哔声,我的意思是来自PC机箱内部的低技术扬声器,而不是任何一种Windows声音方案WAV)


如果是这样,有没有办法为我的应用程序禁用它?我希望能够输出任何可能的文本而不将其解释为声音请求。

6 个答案:

答案 0 :(得分:19)

这通常是由输出字符代码7 CTRL-G引起的,这是BEL(铃声)字符。

购买新电脑或主板时,我通常做的第一件事就是确保从主板到扬声器的电线没有连接。从指挥官Keen那天开始,我就没有使用过扬声器(除去那根导线是与操作系统无关的最佳停止声音的方式: - )。

答案 1 :(得分:5)

HKEY_CURRENT_USER\Control Panel\Sound

将“Beep”键设置为“no”。

答案 2 :(得分:4)

绝对,如果您将ASCII控制代码“Bell”(0x7)输出到控制台,它会发出哔哔声。

答案 3 :(得分:3)

如果你不想要发出蜂鸣声,你必须在输出前更换0x7字符,或者禁用“Beep”设备驱动程序,你可以在非即插即用驱动程序部分找到它,如果打开“显示隐藏设备”选项,则可见。或者把扬声器拿出来。

答案 4 :(得分:3)

即使您检查BELL字符的输入,它仍可能会发出哔声。这是由于字体设置和unicode转换。有问题的字符是U+2022,子弹。

Raymond Chen explains

  

在OEM代码页中,项目符号字符正在转换为   嘟。但那为什么呢?

     

你所看到的是反过来的MB_USEGLYPHCHARS。迈克尔卡普兰   前一段时间讨论过MB_USEGLYPHCHARS。它决定是否确定   字符应被视为控制字符或可打印   转换为Unicode时的字符。例如,它控制   是否应将ASCII响铃字符0x07转换为   Unicode铃声字符U + 0007或Unicode子弹U + 2022。您   需要MB_USEGLYPHCHARS标志来决定何时去   转换为Unicode,但没有相应的歧义   从Unicode转换。从Unicode转换时,U + 0007和   U + 2022映射到ASCII铃声字符。

答案 5 :(得分:1)

输出字符串中的

\ b将导致蜂鸣声,如果未在操作系统级别禁用。