5

我有以下代码:

#include <windows.h>
#include <stdio.h>

int main(void)
{
        Beep(523, 500);
        Sleep(1000);
        return 0;
}

我正在使用 MinGW 和 Dev-C++ 编译它。我的问题是我什么都听不见,虽然我没有收到错误。我有 Windows 7。有什么想法吗?

4

1 回答 1

7

打开你的扬声器。如果它们已经打开,请调高音量。如果您的计算机上没有安装扬声器和声卡,请获取并安装它们,然后再次尝试运行该程序。

所有这些都是在 Windows 7 上听到该Beep功能所必需的。它不再从内置硬件系统扬声器播放声音。而是将声音传递给用户会话的默认声音设备。在标准的本地用户会话中,那将是您的声卡。文档在“备注”部分解释了这一重要细节:

很久以前,所有 PC 计算机共享一个通用的 8254 可编程间隔定时器芯片,用于生成原始声音。该Beep函数是专门为在该硬件上发出哔哔声而编写的。

Beep在这些较旧的系统上,静音和音量控制对;没有影响。你仍然会听到音调。要使音调静音,您使用了以下命令:

net stop beep  
sc config beep start= disabled

从那时起,声卡已成为几乎所有 PC 计算机的标准设备。随着声卡变得越来越普遍,制造商开始从计算机中移除旧的计时器芯片。这些芯片也被排除在服务器计算机的设计之外。结果是在Beep没有芯片的所有计算机上都无法工作。这没关系,因为大多数开发人员已经开始调用使用默认声音设备而不是 8254 芯片的MessageBeep函数。

最终由于缺乏与之通信的硬件,Beep在 Windows Vista 和 Windows XP 64 位版本中不再支持。

在 Windows 7 中,Beep 被重写以将哔声传递给会话的默认声音设备。这通常是声卡,除非在终端服务下运行,在这种情况下会在客户端上呈现哔声。

于 2012-04-22T09:19:32.970 回答