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

Posted

技术标签:

【中文标题】Windows - 控制台输出是不是会无意中导致系统发出蜂鸣声?【英文标题】:Windows - Can console output inadvertently cause a system beep?Windows - 控制台输出是否会无意中导致系统发出蜂鸣声? 【发布时间】:2009-06-03 13:28:14 【问题描述】:

我有一个 C# 控制台应用程序,它向控制台记录了很多内容(使用 Trace)。它记录的一些内容是网络消息的压缩表示(因此其中很多都呈现为时髦的非字母字符)。

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

(我所说的系统哔声,是指来自 PC 机箱内的低技术扬声器,而不是任何类型的 Windows 声音方案 WAV)


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

【问题讨论】:

请编辑您的问题,而不是添加答案。几个答案已经表明如何在不检查每个数据包的情况下执行此操作,但本质上是机器级别的问题。最终将原始字节输出到控制台是一个坏主意,因为控制台粗略地说,需要文本 在十六进制转储中显示二进制数据而不是将其全部输出到控制台不是更有意义吗? 【参考方案1】:

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

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

【讨论】:

我不会那样做。扬声器是您诊断硬件问题的第一个工具。当电脑无法开机时 在百万分之一的那一天,我将重新连接电线(或者更有可能只是升级到最新最好的 :-)。 挖掉所有用户的硬件可能不切实际:-)【参考方案2】:
HKEY_CURRENT_USER\Control Panel\Sound

将“哔”键设置为“否”。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

即使您检查 BELL 字符的输入,它仍可能会发出蜂鸣声。这是由于字体设置和 unicode 转换造成的。有问题的角色是U+2022,Bullet。

陈瑞峰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 响铃字符。

【讨论】:

【参考方案6】:

\b 在输出字符串中,如果未在操作系统级别禁用,则会发出哔声。

【讨论】:

以上是关于Windows - 控制台输出是不是会无意中导致系统发出蜂鸣声?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 termcolor 在 Windows 控制台中输出控制字符而不是彩色文本?

关于乱码

输出时异步 Windows 控制台输入

Tomcat控制台总是打印日志问题的解决办法

在 API Gateway 中映射 Lambda 输出会导致服务器错误

为啥WIN10会自动开机?