返回列表 回复 发帖

[贴士] 在脚本中播放声音

在从零开始学起时,在我硬盘上一些曾经帮助我很多的小纸条!--Sz

您可以搜遍 VBScript文档,但是您无法找到任何方法可让您通过脚本直接播放声音,即便只是“吱吱”声也办不到。或者,在这种情况下可能是“嘀嘀”声。

因此,必须调用另一个实用程序,以便播放声音。要是声音文件采用 .WAV 格式,最好使用 Windows 录音机。对于这一点,至少有两个理由。首先,录音机较为小巧,可以非常快地进行加载;Media Player 要强大得多,但是对于只是播放“嘀嘀”声,太大材小用了。其次,通过传递适当的命令行参数,可以隐式运行录音机;因此,您(或用户)将听到声音,但不会在屏幕上看到录音机。

以下脚本可以播放 Notify.wav(在 Windows\Media 文件夹下找到的一个标准的操作系统声音文件):

VBS strSoundFile = "C:\Windows\Media\Notify.wav"
VBS Set objShell = CreateObject("Wscript.Shell")
VBS strCommand = "sndrec32 /play /close " & chr(34) & strSoundFile & chr(34)
VBS objShell.Run strCommand, 0, True

该脚本的前两行非常简单。在第一行中,我们将该文件路径指派给了 strSoundFile 变量;在第二行中,我们创建了 Wscript Shell 对象(将用于实际运行录音机的对象)的一个实例。

第三行稍微麻烦一点。为了从命令提示符运行录音机,需要键入该命令:

sndrec32 /play /close "C:\Windows\Media\Notify.wav"
前两个命令行参数告诉录音机播放该文件,然后自动终止;当然,第三个参数就是所要播放的文件的名称。在该例中,不需要对文件路径加双引号;只有当路径名中含有空格时,才需要加引号。我们预先加了引号,以便为您提供模板,供您在播放路径名中确实含有空格的声音文件时使用。因此:

sndrec32 /play /close "C:\Windows\Media\Windows XP Error.wav"
为了对该文件路径加双引号,我们使用了 Chr(34) 命令(可在字符串中插入双引号)。因此,这行代码将 sndrec32 /play /close、前双引号 (“) 文件 C:\Windows\Media\Notify.wav 以及后双引号 (”) 串在了一起:

strCommand = "sndrec32 /play /close " & chr(34) & strSoundFile & chr(34)
最后,在第四行中使用了 Run 方法,传递刚才构建的命令字符串。参数 0 可以让录音机在隐藏窗口中运行;参数 True 告诉该脚本等到声音播放结束后,再重新进行播放。

那么,至于在弹出消息框的同时播放声音,您会发现这几乎不可能;这是因为,录音机需要一两秒的时间来加载并开始播放。最好做两件事。首先,在调用录音机时,使用参数 False;这将告诉该脚本启动录音机并无需等到声音播放结束后就可以继续播放。

其次,使用 Wscript.Sleep 命令将脚本暂停大约一秒钟;从而让录音机有时间进行加载,幸运的话,大约会在弹出消息框时开始播放该声音。能否恰好在弹出消息框的同时播放声音呢?一般不会。但至少可以接近于同时进行。

这里有一个示例脚本也可以大约在弹出消息框的同时播放声音:

VBS strSoundFile = "C:\windows\Media\Notify.wav"
VBS Set objShell = CreateObject("Wscript.Shell")
VBS strCommand = "sndrec32 /play /close " & chr(34) & strSoundFile & chr(34)
VBS objShell.Run strCommand, 0, False
VBS Wscript.Sleep 1000
VBS Msgbox "A problem has occurred."
简单就好!
感谢楼上的指正
还是同样的问题,代码是使用在按键精灵中的,所以只支持按键精灵的VBS
另外播放一声提示声启动Windows Media Player将会在程序运行时很卡的,系统录音机能解决的问题为什么要用庞大的Windows Media Player呢?
简单就好!
返回列表