我想播放Windows系统声音,如错误和信息对话框。
我尝试了Beep API:
Public Declare Function Beep Lib "kernel32" _
(ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Beep 200, 2000
问题是它只适用于XP / 2000,但不适用于Win 7.此外,我希望能够播放不同的声音。
答案 0 :(得分:2)
您可以通过拨打MessageBeep
function来播放标准的Windows提醒音。要从VB 6调用它,您需要编写如下声明:
Public Declare Function MessageBeep Lib "user32" (ByVal wType As Long) As Long
然后你需要指定要发出哔哔声类型的常量:
Public Const MB_DEFAULTBEEP As Long = -1 ' the default beep sound
Public Const MB_ERROR As Long = 16 ' for critical errors/problems
Public Const MB_WARNING As Long = 48 ' for conditions that might cause problems in the future
Public Const MB_INFORMATION As Long = 64 ' for informative messages only
Public Const MB_QUESTION As Long = 32 ' (no longer recommended to be used)
请注意,它们与消息框(MsgBox)显示的图标完全匹配。每个可用图标都具有与其关联的不同默认警报声音。适用于在消息框中正确使用这些图标的guidance也适用于它们作为独立的独立警报声音使用。
当然,因为这些是标准的系统声音,所以不能保证它们始终播放相同的声音。使用的确切声音可由用户配置。但这可能就是你想要的。
至于为什么Beep
不起作用,这是一个相当悲伤和复杂的故事。 function documentation包含大部分详细信息:
很久以前,所有PC计算机共享一个通用的8254可编程间隔定时器芯片,用于生成原始声音。 Beep功能专门用于在该硬件上发出蜂鸣声 [...]
从那时起,声卡已经成为几乎所有PC机上的标准设备。随着声卡变得越来越普遍,制造商开始从计算机中移除旧计时器芯片。这些芯片也被排除在服务器计算机的设计之外。结果是Beep在没有芯片的所有计算机上都不起作用。这没关系,因为大多数开发人员已经开始调用MessageBeep函数,该函数使用默认声音设备而不是8254芯片。最终由于缺乏与之通信的硬件,在Windows Vista和Windows XP 64位版本中删除了对Beep的支持。
在Windows 7中,重写了Beep以将蜂鸣声传递给会话的默认声音设备。这通常是声卡,除非在终端服务下运行,在这种情况下,蜂鸣声在客户端上呈现。
您可以在Larry Osterman的博客上找到更多信息:What's up with the Beep driver in Windows 7?
因此 应该在Windows 7上运行,但它要求您的计算机安装了声音生成器硬件,连接了扬声器,并且它们已打开。当然,MessageBeep
函数也是如此。