简介
Stereoscopic Player播放器的官网提供了VBS的DEMO程序控制播放器,这样就可以打开,停止播放器。这样对于第三的程序控制播放器很方便。但是要在程序代码中获取播放器的状态就不好搞了。这样就不能使用VBS控制了。由于VB脚本是通过调用CreateObject函数来创建COM对象来操作播放器的,这样就可以直接创建COM对象,之后通过IDispatch接口的 Invoke函数来控制播放器。Invoke动态调用的函数的参数和返回类型可以从StereoPlayerInterface.cs文件中获取。下面是获取播放器状态的代码:
int GetPlaybackState()
{
int rState = -1;
CLSID clsid;// 通过 ProgID 取得组件的 CLSID
HRESULT hr = ::CLSIDFromProgID( L"StereoPlayer.Automation", &clsid );
CComPtr<IUnknown> spUnk;// 由 CLSID 启动组件,并取得 IUnknown 指针
if(SUCCEEDED(hr))
{
hr = ::CoCreateInstance(clsid, NULL, CLSCTX_ALL, IID_IUnknown, (LPVOID *)&spUnk );
if(SUCCEEDED(hr))
{
CComDispatchDriver spDisp( spUnk );
CComVariant v,vResult;
auto_ptr<VARIANT> var(new VARIANT);
var->vt = VT_INT;
var->dblVal = 0;
v.vt = VT_BYREF|VT_VARIANT; //引用类型,表示参数的返回值
v.pvarVal = var.get();
spDisp.Invoke1(L"GetPlaybackState",&v,&vResult);
rState = var->intVal;
}
}
return rState;
}
这个函数就可以实时获取播放器的状态,如果返回2表示播放器已经停止,0表示正在播放,1表示暂停。