Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带Windows Media Player的Excel VBA:获取视频时间码时出现运行时错误_Vba_Excel_Windows Media Player - Fatal编程技术网

带Windows Media Player的Excel VBA:获取视频时间码时出现运行时错误

带Windows Media Player的Excel VBA:获取视频时间码时出现运行时错误,vba,excel,windows-media-player,Vba,Excel,Windows Media Player,我在Excel工作表中添加了一个Windows Media Player ActiveX控件(WMPlayer2)和两个命令按钮,即cmd_PlayVideo和cmd_GetTimeCode。我想在Windows Media Player中播放视频,并在播放视频时单击cmd_GetTimeCode按钮时捕获视频的时间码 由于在IWMPControls3接口中提供了“currentPositionTimecode”属性,因此我将返回值从WMPlayer2.controls强制转换到IWMPCont

我在Excel工作表中添加了一个Windows Media Player ActiveX控件(WMPlayer2)和两个命令按钮,即cmd_PlayVideo和cmd_GetTimeCode。我想在Windows Media Player中播放视频,并在播放视频时单击cmd_GetTimeCode按钮时捕获视频的时间码

由于在IWMPControls3接口中提供了“currentPositionTimecode”属性,因此我将返回值从WMPlayer2.controls强制转换到IWMPControls3接口。但是,行“MsgBox controls.currentPositionTimecode”抛出:

运行时错误430:“类不支持自动化或不支持预期接口。”

IWMPControls3接口的其他属性,如audioLanguageCount、currentAudioLanguage、currentItem、controls.getAudioLanguageID、getLanguageName、, 而且getAudioLanguageDescription工作正常

如何获取视频的时间码

这是我的代码在两个按钮

Private Sub cmd_PlayVideo_Click()

MsgBox Application.Sheets("Sheet1").Range("B2")
WMPlayer2.URL = Application.Sheets("Sheet1").Range("B2")

End Sub


我注意到读取currentPositionTimecode参数只会在媒体开始播放时抛出错误。也就是说,仅当介质位置重置为零(例如[00000]00:00:00)时,它才会读取时间码位置而不出错。我怀疑必须有一个标志才能启用此功能(如CanScan?),或者媒体不支持SMPTE时间码。我还在研究

Private Sub cmd_GetTimeCode_Click()

Dim controls As WMPLib.IWMPControls3
Dim Media As WMPLib.IWMPMedia
Set controls = WMPlayer2.controls

MsgBox controls.audioLanguageCount
MsgBox controls.currentAudioLanguage
If controls.isAvailable("currentItem") Then
    Set Media = controls.currentItem
    MsgBox Media.durationString
    MsgBox Media.Name
    MsgBox Media.SourceUrl
End If

MsgBox controls.getAudioLanguageID(1)
MsgBox controls.getLanguageName(1)
MsgBox controls.getAudioLanguageDescription(1)
MsgBox controls.currentPositionTimecode

End Sub