关于Windows Media Player v8.0 的Automation.(300分)

  • 主题发起人 主题发起人 DragonPC_???
  • 开始时间 开始时间
D

DragonPC_???

Unregistered / Unconfirmed
GUEST, unregistred user!
我计划通过Automation调用Windows Media Player,首先,我Import了有关的Type Library,
可是我实在是搞不清楚接口之间的对应关系,可是Microsoft网站确写的明明白白,Media Player
支持Automation。请各位大侠给个简单示例,只要能把Media Player叫出来即可。

 
你看看Demo里面Word,Excel的那些例子就明白的了。。
 
CJF兄,我不是没有搞过 Automation,我只是不了解 Windows Media Player的Automation
而已,对于Media Player,好像要通过com调用不是那么容易里,相关的接口和类的数目超过
Word,感觉比较复杂,也可能我没有找到窍门,特此一问。
 
哦,这样。。

不知道你Import的是那个ActiveX,版本是什么?
 
直接Import
"C:/Program Files/Windows Media Player/wmplayer.exe"
你可以试试看看
 
哦?安装的时候有两个命令不通过哦。。
 
right,Delphi Bug,但是可以改改的
 
我的注册表怎么没有 'WMPlayer.Application' 项目呢,只有 'WMPlayer.OCX'
一CreateOLEObject就报错

Windows Media Player 7.1 + Win 2000
Windows Media Player 8 + Win 2000
两个平台都没有 [:(!]
 
uses ComObj, ActiveX;
//常量和变量声明及单元引用声明
var MediaPlayer, Part: Variant;
//声明为OLE Automation 对象
Filename : String;
//Filename用于存放要保存的文件的名称
const
CLSID_DelphiFormViewerContextMenu: TGUID =
'{22D6F312-B0F6-11D0-94AB-0080C74C7E95}';
function GetOLeCreateObject (const ClassName: string): IDispatch;
var //根据Windows Media Player的运行情况创建获取对象
ClassID: TGUID;
Unknown: IUnknown;
begin

ClassID := ProgIDToClassID (ClassName);
if Succeeded (GetActiveObject (ClassID, nil, Unknown)) then

OleCheck (Unknown.QueryInterface (IDispatch, Result))
else

Result := CreateOleObject (ClassName);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin

MediaPlayer := GetOLeCreateObject ('WMPlayer.Application');

MediaPlayer.Visible := True;

end;


。。。。。。
 
你试试 TActiveMovie 控件,如何?
TActiveMovie is a VCL component for Delphi or C++ Builder. TActiveMovie now gives you full control on the
Microsoft's Media Player from your project. You can adjust the sound volume, the speed rate, zoom in, zoom
out, scroll horizontally and vertically, display video clips in full screen mode.You can capture frames to
TBitmap, TImage or directly to files. Register and you will get the full source code.
http://www.delphicity.com/amovie/scrshots.htm
or
http://www.softpile.com/Development/Miscellaneous/Review_02305_index.html
 
我不想自己再写一个Windows Media Player出来呀,没有必要吗,我只是想通过Automation
进行操作Media Player而已,开始俺以为小case,谁TMD的知道这么麻烦,各位富翁没有成功
的例子吗?Media Player甚至可以通过VB Script在WEB页面被调用(可惜俺看不懂VB)
 
希望对你有所帮助!

在WEB页上观看DVD

Microsoft Windows Media Player(简称WMP)控件自动的调用Microsoft DirectShow API有关DVD-Video特定的界面,
方法,事件和属性。作为ActiveX控件,WMP控件可以作为WEB页的组件。透过增强的DVD回放能力,WMP可在静态的WEB页
面中添加令人激动的动态内容。

通过访问Microsoft VBScript样例页面展示的DVD回放功能,你可以建立本文所要论述的一个概念。注意:要正确的观
看样例程序,你的系统必须能够回放DVD-Video,并安装了Microsoft Direct Show驱动程序。

本文包含以下内容:

定制用于DVD回放的控件

建立可以回放DVD的WEB 页面

定制用于DVD回放的控件
通过使用脚本语言,如VBScript和Microsoft Jscript,都可以很容易的在HTML文档中放置WMP控件。本段内容说明如
下问题。如何在HTML页面中内嵌WMP控件;如何使WMP控件回放DVD,如何用VBScript操作控制。

插入WMP控件
通过PARAM标记设置控件的属性
添加简单的用户界面
添加脚本代码
插入WMP控件
我们知道,OBJECT标记用来将ActiveX控件嵌入到HTML页面中。下列代码是将WMP控件插入页面的例子:

<OBJECT CLASSID="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" WIDTH="652" HEIGHT="382" ID="MediaPlayer1">
</OBJECT>

下列的OBJECT表技属性是必需的。

ID — 控件实例的参考名字
CLSID — WMP组件的类标示符(CLSID). CLSID 是组件对象模型 (COM)对象标示符。
通过PARAM标记设置控件的属性
设置控件的属性的可选方法是在OBJECT标记间加入PARAM标记。该方法是设置设计时属性的理想方法。下面的代码显示了
在OBJECT标记中的PARAM标记的用法。

<OBJECT CLASSID="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95" WIDTH="652" HEIGHT="382" ID="MediaPlayer1">
<PARAM NAME="AutoStart" VALUE="0"> <PARAM NAME="Filename" VALUE="DVD:"> <PARAM NAME="ShowControls" VALUE="0">
</OBJECT>

在前面所提到的例子中的PARAM有两个属性,第一个是属性的名字,第二个是属性的值。第一个PARAM标记将AutoStart设为False,
紧接着的两个PARAM标记改变FileName属性为DVD:,并将ShowControls属性设为False。注意:DVD的特别属性是不能用PARAM标记设定。

用于激活DVD回放的关键设定是将FileName的属性设为DVD:,它通知WMP控件在本地系统上搜寻DVD驱动器。如果AutoStart属性为True(
默认选项),WMP控件会自动的回放DVD,否则必须将一个事件和DVD的回访关联起来,比如说按钮。

添加简单的用户界面
建立简单的界面提供对DVD回放的控制是必要的,我们建立了两组按钮,一组用来控制菜单选择,另一组用来控制回放状态。

下面的代码建立控制DVD菜单选择的按钮

<INPUT TYPE="BUTTON" STYLE="WIDTH:70" NAME="cmdTopSelect" VALUE="Top">

<INPUT TYPE="BUTTON" STYLE="WIDTH:70" NAME="cmdLeftSelect" VALUE="Left">

<INPUT TYPE="BUTTON" STYLE="WIDTH:70" NAME="cmdRightSelect" VALUE="Right">

<INPUT TYPE="BUTTON" STYLE="WIDTH:70" NAME="cmdBottomSelect" VALUE="Bottom">

<INPUT TYPE="BUTTON" STYLE="WIDTH:70" NAME="cmdButtonActivate" VALUE="Select">


下面的代码建立控制基本操作的按钮(播放,暂停和停止),当然还包括章节搜索和快进。

<INPUT TYPE="BUTTON" STYLE="WIDTH:60" NAME="cmdPlay" VALUE="Play">

<INPUT TYPE="BUTTON" STYLE="WIDTH:60" NAME="cmdPause" VALUE="Pause">

<INPUT TYPE="BUTTON" STYLE="WIDTH:60" NAME="cmdStop" VALUE="Stop">

<INPUT TYPE="BUTTON" STYLE="WIDTH:60" NAME="cmdResume" VALUE="Resume">

<INPUT TYPE="BUTTON" STYLE="WIDTH:60" NAME="cmdShowMenu" VALUE="Menu">

<INPUT TYPE="BUTTON" NAME="cmdPrevChapter" VALUE="|<<">

<INPUT TYPE="BUTTON" NAME="cmdRewind" VALUE="<<">

<INPUT TYPE="BUTTON" NAME="cmdFastForward" VALUE=">>">

<INPUT TYPE="BUTTON" NAME="cmdNextChapter" VALUE=">>|">
 
添加脚本代码

脚本代码为页面添加了交互性,允许程序响应事件,调用方法,改变运行时属性。下列代码显示每
一个按钮相对应的子过程,他们由Onclick事件激活。当事件被触发后产生一个调用(或者是一系
列的调用),控制WMP控件产生相应的动作。

显示样例代码


<SCRIPT LANGUAGE="VBScript">
<!--
Dim isScanning

isScanning = False

Sub cmdPlay_OnClick()
If isScanning then

MediaPlayer1.DVD.ForwardScan(1)
else

MediaPlayer1.Play()
End If

isScanning = False
End Sub

Sub cmdPause_OnClick()
MediaPlayer1.Pause()
End Sub

Sub cmdStop_OnClick()
MediaPlayer1.Stop()
End Sub

Sub cmdResume_OnClick()
MediaPlayer1.DVD.ResumeFromMenu()
End Sub

Sub cmdShowMenu_OnClick()
MediaPlayer1.DVD.MenuCall(3)
End Sub

Sub cmdPrevChapter_OnClick()
MediaPlayer1.DVD.PrevPGSearch()
End Sub

Sub cmdNextChapter_OnClick()
MediaPlayer1.DVD.NextPGSearch()
End Sub

Sub cmdFastForward_OnClick()
isScanning = True
MediaPlayer1.DVD.ForwardScan(5)
End Sub

Sub cmdRewind_OnClick()
isScanning = True
MediaPlayer1.DVD.BackwardScan(5)
End Sub

Sub cmdTopSelect_OnClick()
MediaPlayer1.DVD.UpperButtonSelect()
End Sub

Sub cmdLeftSelect_OnClick()
MediaPlayer1.DVD.LeftButtonSelect()
End Sub

Sub cmdRightSelect_OnClick()
MediaPlayer1.DVD.RightButtonSelect()
End Sub

Sub cmdBottomSelect_OnClick()
MediaPlayer1.DVD.LowerButtonSelect()
End Sub

Sub cmdButtonActivate_OnClick()
Dim buttonNumber
buttonNumber = MediaPlayer1.DVD.CurrentButton
MediaPlayer1.DVD.ButtonSelectAndActivate(buttonNumber)
End Sub

-->
</SCRIPT>


建立可以回放DVD的WEB 页面
在混合了刚才我们讨论的元素后,将每一个片断的拼接在一起就形成了下面的代码。

将下列的代码拷贝到某个.HTM文件中,就可以看到效果。

显示样例代码



<HTML>
<HEAD>
<TITLE>DVD_Demo</TITLE>
</HEAD>
<BODY BGCOLOR="#000000" TEXT="#00FFFF">

<CENTER>
<TABLE>
<TR>
<TD VALIGN="TOP" WIDTH="10%">
</TD>
<TD>
<P ALIGN="center">
<OBJECT CLASSID="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" WIDTH="652"
HEIGHT="382" ID="MediaPlayer1">
<PARAM NAME="AutoStart" value="0">
<PARAM NAME="Filename" value="DVD:">
<PARAM NAME="ShowControls" value="0">
</OBJECT>
</P>
</TD>
<TD VALIGN="TOP" WIDTH="10%">
Menu Select
<BR>
<INPUT TYPE="BUTTON" STYLE="WIDTH:70" NAME="cmdTopSelect" VALUE="Top">
<BR>
<INPUT TYPE="BUTTON" STYLE="WIDTH:70" NAME="cmdLeftSelect" VALUE="Left">
<BR>
<INPUT TYPE="BUTTON" STYLE="WIDTH:70" NAME="cmdRightSelect" VALUE="Right">
<BR>
<INPUT TYPE="BUTTON" STYLE="WIDTH:70" NAME="cmdBottomSelect" VALUE="Bottom">
<P>
<INPUT TYPE="BUTTON" STYLE="WIDTH:70" NAME="cmdButtonActivate" VALUE="Select">
<P>
</TD>
</TR>
</TABLE>
</CENTER>

<CENTER>
<INPUT TYPE="BUTTON" STYLE="WIDTH:60" NAME="cmdPlay" VALUE="Play">
<INPUT TYPE="BUTTON" STYLE="WIDTH:60" NAME="cmdPause" VALUE="Pause">
<INPUT TYPE="BUTTON" STYLE="WIDTH:60" NAME="cmdStop" VALUE="Stop">
<INPUT TYPE="BUTTON" STYLE="WIDTH:60" NAME="cmdResume" VALUE="Resume">
<INPUT TYPE="BUTTON" STYLE="WIDTH:60" NAME="cmdShowMenu" VALUE="Menu">
<P>
<INPUT TYPE="BUTTON" NAME="cmdPrevChapter" VALUE="| < <">
<INPUT TYPE="BUTTON" NAME="cmdRewind" VALUE=" < <">
<INPUT TYPE="BUTTON" NAME="cmdFastForward" VALUE=" > >">
<INPUT TYPE="BUTTON" NAME="cmdNextChapter" VALUE=" > >|">
</CENTER>

<SCRIPT LANGUAGE="VBScript">
<!--
Dim isScanning

isScanning = False

Sub cmdPlay_OnClick()
If isScanning then

MediaPlayer1.DVD.ForwardScan(1)
else

MediaPlayer1.Play()
End If

isScanning = False
End Sub

Sub cmdPause_OnClick()
MediaPlayer1.Pause()
End Sub

Sub cmdStop_OnClick()
MediaPlayer1.Stop()
End Sub

Sub cmdResume_OnClick()
MediaPlayer1.DVD.ResumeFromMenu()
End Sub

Sub cmdShowMenu_OnClick()
MediaPlayer1.DVD.MenuCall(3)
End Sub

Sub cmdPrevChapter_OnClick()
MediaPlayer1.DVD.PrevPGSearch()
End Sub

Sub cmdNextChapter_OnClick()
MediaPlayer1.DVD.NextPGSearch()
End Sub

Sub cmdFastForward_OnClick()
isScanning = True
MediaPlayer1.DVD.ForwardScan(5)
End Sub

Sub cmdRewind_OnClick()
isScanning = True
MediaPlayer1.DVD.BackwardScan(5)
End Sub

Sub cmdTopSelect_OnClick()
MediaPlayer1.DVD.UpperButtonSelect()
End Sub

Sub cmdLeftSelect_OnClick()
MediaPlayer1.DVD.LeftButtonSelect()
End Sub

Sub cmdRightSelect_OnClick()
MediaPlayer1.DVD.RightButtonSelect()
End Sub

Sub cmdBottomSelect_OnClick()
MediaPlayer1.DVD.LowerButtonSelect()
End Sub

Sub cmdButtonActivate_OnClick()
Dim buttonNumber
buttonNumber = MediaPlayer1.DVD.CurrentButton
MediaPlayer1.DVD.ButtonSelectAndActivate(buttonNumber)
End Sub
-->
</SCRIPT>
</BODY>
</HTML>

 
虽然暂时没有搞定,但是俺还是结了算了,谢谢各位的帮助。
 
真是,wmplayer我倒是连接上了,但怎么调出我找不到合适的方法,毕竟ole编程非可是的没有code insight。
uses ComObj;
const
Guid:TGuid='{22D6F312-B0F6-11D0-94AB-0080C74C7E95}';
var
c:OleVariant;
begin

c:=CreateComObject(Guid)as IDispatch;
c.AutoStart:=true;
c.ShowControls:=false;
c.FileName:='DVD';
c.Open('g:/Tools/dsj2.wmv');
end;

谁会就添上打开的方法,如果有完整的wmplayer的方法集更好了。
 

Similar threads

后退
顶部