我一直在使用 Applescript 来控制 OSX 下 Quicktime Player 的播放,现在正尝试在 Windows 7 和 Windows Media Player 上执行同样的操作窗户。
我需要做的就是
- 启动WMP并加载音频文件
- 切换播放
- 向前或向后跳过 x 秒。
- 获取其在音频文件中的位置。
- 跳转播放至我选择的任意位置。
- 亚秒级定位。(见下文编辑)
SDK 位于微软网站似乎提供了我需要的一切,但下面的代码不起作用。
Set oWmp = CreateObject("WMPlayer.OCX")
' Launches WMP window
oWmp.openPlayer("F:\2014-04-27.mp3")
' This launches background process, don't want this...
'oWmp.url = "file:///F:/2014-04-27.mp3"
' Wait for file to load...
wscript.sleep 200
' Check the state of the player...
While oWmp.Playstate <> 3
log "Waiting for player. Current state is: " & oWmp.Playstate
WScript.Sleep 100
Wend
oWmp.controls.pause()
wscript.sleep 2000
oWmp.controls.play()
唯一起作用的是openPlayer
语句。其他一切都执行,但没有错误或执行任何操作。即使我转到 WMP 窗口并单击暂停/播放或停止,Playstate 也始终为 0。我正在使用带有 WMP12 的 Windows 7 32 位
我不想在后台播放音频。我想控制 WMP 窗口中的播放。使用.url = ...
后代码就可以正常工作。不过这是在后台运行的。请参阅这里了解更多信息。
以上内容是否适用于 WMP?我很乐意使用 VBS 或 JScript。
编辑:经过进一步研究,我发现 Apple 的 iTunes 有一个不错的脚本接口,它可以完成我上面列出的所有功能。但在测试时,我记得我需要亚秒级定位,而 iTunes COM 接口不提供这种定位…… :(
答案1
openPlayer
开始其他完整模式下的 WMP 实例。脚本中的所有其他 WMP 调用仅影响通过调用创建的 WMP 内部实例CreateObject
。在这种情况下,该内部实例是不可见的,但也可以可见,例如当 WMP 控件嵌入到网页中时。
与完整模式 WMP 交互称为“远程处理”,请参阅这里了解更多信息。但恐怕无法通过脚本执行此操作。您需要用 C++ 等语言编写特殊程序。
答案2
尽管蒂姆已经按照发布的方式回答了这个问题,但我还是想添加这个答案,以供将来尝试做同样事情的人参考。
正如我在编辑问题时提到的,Windows 版 Quicktime Player 很接近,但还不够。所以我继续搜索,找到了一个脚本插件适用于古老的 WinAmp 音频播放器,效果非常好!我获得了毫秒级定位和我需要的一切。
唯一的一个小问题是它是 32 位的,并且在 Windows x64 环境中运行它意味着我必须记住使用正确的 VBS 引擎,这没什么大不了的。