You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBScript使用过时MediaPlayer ProgID报错,如何更新实现后台音频播放?

解决VBScript后台播放音频时"WMPlayer.OCX.7"创建失败的问题

问题根源

WMPlayer.OCX.7这个ActiveX对象已被Windows系统弃用或移除,导致抛出800A01AD(ActiveX组件无法创建对象)错误。

替代方案

方案1:使用无版本号的WMPlayer对象

部分系统仍兼容不带版本后缀的WMPlayer.OCX对象,修改代码如下:

Set Sound = CreateObject("WMPlayer.OCX")
Sound.URL = "C:\Windows\Media\Alarm01.wav"
Sound.settings.volume = 100 ' 按需调整音量
Sound.Controls.play

' 等待媒体元数据加载完成
Do While Sound.currentMedia.duration = 0
    WScript.Sleep 100
Loop

' 等待播放结束后退出
WScript.Sleep (Int(Sound.currentMedia.duration) + 1) * 1000
Sound.close
Set Sound = Nothing

方案2:通过WScript.Shell调用系统播放器后台运行

如果方案1仍失效,直接调用系统自带的Windows Media Player,通过命令行参数实现后台播放:

Set WshShell = CreateObject("WScript.Shell")
' 参数说明:/play /close 播放完成自动关闭;/background 后台运行;0 隐藏窗口;True 等待播放结束
WshShell.Run """C:\Program Files\Windows Media Player\wmplayer.exe"" ""C:\Windows\Media\Alarm01.wav"" /play /close /background", 0, True
Set WshShell = Nothing

该方案依托系统原生播放器,兼容性最强,无需依赖易弃用的ActiveX对象。

方案3:使用SAPI语音对象(仅适用于WAV音频)

如果只是播放简单的WAV文件,也可以用系统的语音合成对象间接播放:

Set voice = CreateObject("SAPI.SpVoice")
Set audioFile = CreateObject("SAPI.SpFileStream")
audioFile.Open("C:\Windows\Media\Alarm01.wav")
voice.SpeakStream audioFile, 0 ' 0 = SVSFlagsAsync,异步播放
' 等待播放完成
Do While voice.WaitUntilDone(100) = False
    WScript.Sleep 100
Loop
audioFile.Close
Set audioFile = Nothing
Set voice = Nothing

注意事项

  • 确保音频文件路径正确,脚本有读取该文件的权限
  • 方案2中,若系统是32位,播放器路径需改为C:\Program Files (x86)\Windows Media Player\wmplayer.exe

内容的提问来源于stack exchange,提问作者samcosmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 05:45:14