首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

【问】怎么用纯代码来控制WMP的播放

2012-01-16 
【问】如何用纯代码来控制WMP的播放?就像Winamp一样,仅用SendMessage发送消息,就可控制其播放、上下曲,还有关

【问】如何用纯代码来控制WMP的播放?
就像Winamp一样,仅用SendMessage发送消息,就可控制其播放、上下曲,还有关键的能控制进度。    
这是一种很安全干净的办法,不依赖于任何控件,不依赖于版本(只要高版本的关键消息不变)    
虽然,可能功能有限,但兼容性超强!    
(偶也只要最基本的几个功能而已:    
播放、暂停、停止、上下曲、当前进度(并能控制)、当前曲总时间)    
 
请问,如何做到?  

总不见得说Winamp这样无意义吧?    
 
任何出名的播放器都有其自己的特色,    
目前还没有一个播放器能做到所有播放器的优点    
(至少强大的功能与资源的占用永远是一对不可调和的矛盾)    
还要漂亮的外观,简单的操作,超强的兼容,还要不收费,还要。。。还要。。。    
 
醒醒吧,甭想了,这辈子恐怕也没人能编出来这样的东东(如果电脑还是这样发展的话)。。。    
 
既然已经有各种现成的,在某些方面自有其特长的软件,干嘛不用啊?    
(偶要的只是播放器的控制而已,关键就是那个时间进度啦:)    
 
感觉Winamp的这种接口做的相当明智,留给其它软件编写者很大的自由度!    
只要干净的发送消息,干净的查询消息,就可实现基本的功能(偶只要基本就够了!)    
 
最讨厌的就是Real了,一旦引用了它的控件,即使好像打包了进来,到时,十有八九还是不能用,保险的办法只能在目标机上安装全套的RealPlayer,真讨厌!    
 
所以,还是打算利用WMP,毕竟它的占有量(不管你用不用)是相当可观的。    
但绝对不依赖它的控件,不依赖它的版本(不看看它现在更新多少快,动不动俺的软件就废掉了,多郁闷!)    
所以,也想找干净的发送消息的办法来进行简单的控制(偶才不需要它什么的高级功能呢,要用也是用户直接打开WMP去操作)    
大不了新版WMP对旧消息进行扩充、增加(呵呵,好像MS很在意向前兼容性的,这点到是让偶们省心了不少)    
 
所以,偶只想找简单的发送消息的方法来控制WMP的基本功能!    
(最最关键的——一定要有时间进度控制哦:)    


但是,请不要再提MCI了,老掉牙的东东了,    
对于现在常见的媒体格式,MCI早就应付不过来了!    
不支持VBR、不支持亮度调整、不支持MP3的声道分离、不能正确的变速、    
不支持变速不变调(偶就是看中了WMP的这点,偶最想要的也就是这个功能)    
不能直接抓图、错误的录音格式、好像也不能直接压缩MP3、不支持外挂音效处理。。。。    
 
以上功能,现在流行的播放器基本上都带点,甚至带很多,可MCI。。。一个也不支持!    
 
MCI。。。实在是。。。老了。。。    
 
最彻底的办法就是,谁支持就用谁,管它什么播放器呢,    
偶们只要外壳进行驱动,万能播放器就是这样诞生的,呵呵!    
(当然,要想不崩溃的话,用API传递消息才是最安全的)    


即使用最土的办法,控制鼠标到相应位置去点击(只要事先确定一下它的类名)    
至少也算是从外部控制WMP了呀(当然这种方法有太多的弊端,偶不会用它)    
所以,偶希望能找到一种直接控制WMP的方法,让WMP在后台运行,偶就做它的外壳。    
关键的前提——绝对不能依赖某个特定的WMP版本,至少要考虑兼容6.x到11的所有版本。    
(播放、取得当前时间进度,这两个功能应该所有的版本都有的吧?)


另外,确切的说,就是要编一个东东能适合各种WMP的版本。    
 
因为一台机子里可能有不只一个WMP,(偶就有6。4     和11并存)    
有时候会用6.x快速的浏览曲目(启动快),有时候就用11来听。    
 
要编的东东兼容性一定要超强(不能依赖系统默认WMP的安装路径来判断版本)    
只能根据当前已运行的WMP版本来选择发送相应的消息。



[解决办法]
播放视频文件很简单,拖一个控件就搞定了。但是那个玩意速度太慢。效果差,
而且可以让你方便的控制放大吗?


在Windows\System下可找到一个动态链接库quartz.dll,
这是Windows中带的用于控制运动图像的播放的一个类型库,
只要在VB的 "引用 "菜单中将它添加进来即可使用。该库中定义了IBasicAudio,
IBasicVideo和IBasicVideo2,IMediaEvent 、IMediaEventEx、IMediaPosition等类,
可方便地在CommandButton控件的Click等事件中添加代码设置和读取Audio的相关值,
设置或读取Video的输入输出源的相关参数,直接调用无参函数Run、Pause、Stop等控制播放事件进程,
利用IMediaPosition类对具体播放细节进行操作
[解决办法]
http://www.cnspica.com/article.asp?id=708


属性/方法名: 说明:
[基本属性]  
URL:String; 指定媒体位置,本机或网络地址
uiMode:String; 播放器界面模式,可为Full, Mini, None, Invisible
playState:integer; 播放状态,1=停止,2=暂停,3=播放,6=正在缓冲,9=正在连接,10=准备就绪
enableContextMenu:Boolean; 启用/禁用右键菜单
fullScreen:boolean; 是否全屏显示
[controls] wmp.controls //播放器基本控制
controls.play; 播放
controls.pause; 暂停
controls.stop; 停止
controls.currentPosition:double; 当前进度
controls.currentPositionString:string; 当前进度,字符串格式。如“00:23”
controls.fastForward; 快进
controls.fastReverse; 快退
controls.next; 下一曲
controls.previous; 上一曲
[settings] wmp.settings //播放器基本设置


settings.volume:integer; 音量,0-100
settings.autoStart:Boolean; 是否自动播放
settings.mute:Boolean; 是否静音
settings.playCount:integer; 播放次数
[currentMedia] wmp.currentMedia //当前媒体属性
currentMedia.duration:double; 媒体总长度
currentMedia.durationString:string; 媒体总长度,字符串格式。如“03:24”
currentMedia.getItemInfo(const string); 获取当前媒体信息 "Title "=媒体标题, "Author "=艺术家, "Copyright "=版权信息, "Description "=媒体内容描述, "Duration "=持续时间(秒), "FileSize "=文件大小, "FileType "=文件类型, "sourceURL "=原始地址
currentMedia.setItemInfo(const string); 通过属性名设置媒体信息
currentMedia.name:string; 同 currentMedia.getItemInfo( "Title ")
[currentPlaylist] wmp.currentPlaylist //当前播放列表属性
currentPlaylist.count:integer; 当前播放列表所包含媒体数
currentPlaylist.Item[integer]; 获取或设置指定项目媒体信息,其子属性同wmp.currentMedia

[解决办法]
汗.....友情帮顶........
[解决办法]
用api来创建相应的wmp的COM对象
CoInitialize
CoCreateInstance
不过这样非常麻烦的
[解决办法]
一个简单的用API实现的媒体播放器源码:

http://www.egooglet.com/static_html/200511072157345670admin.html

热点排行