从VB6播放Windows系统声音

时间:2013-04-11 22:56:41

标签: audio vb6

我想播放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.此外,我希望能够播放不同的声音。

1 个答案:

答案 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函数也是如此。

相关问题