找回密码
 注册
搜索
查看: 4395|回复: 0

MCI(媒体控制接口)相关知识

[复制链接]
发表于 2008-1-30 16:37:11 | 显示全部楼层 |阅读模式
MCI(Media Control Interface)媒体控制接口是MircroSoft提供的一组多媒体设备和文件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。但是古人云:成也萧何,败也萧何。MCI虽然看上去高大全,但对于一些高级应用来说,它是远远不够的。9 e* `2 {' Q( ~9 m5 Z9 X
4 @; X' u3 G, _/ T; x' r
MCI的控制方式:' c, \3 L( N2 O: u0 F+ H9 K0 x

# Q! W9 a, t3 r一般说来,程序员使用两个函数就可以与MCI打交道了:
: L+ u; O7 {& D3 s
: V& S1 o+ q' c. X2 @6 D! ~& e& gMCIERROR mciSendCommand(MCIDEVICEID wDeviceID, UINT uMsg, DWORD dwFlags, DWORD dwParam);; W4 x1 K, s2 J
命令字符串方式,用接近于日常生活用语的方式发送控制命令,适用于高级编程如VB、TOOLBOOK等。
2 U% c  k8 \* S; l5 x! q( C; O; o* P7 _+ h$ A+ U5 H1 x
MCIERROR mciSendString(LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback);
, g: |& l: }) [7 q命令消息方式,用专业语法发送控制消息,适用于VC等语言编程,此方式直接与MCI设备打交道。6 q( U: S( w/ L8 j; j0 g

( u. d$ x; g$ k对于mciSendCommand,第一个参数指定了设备标识,这个标识会在程序员打开MCI设备时由系统提供。第二个参数指定将如何控制设备,详细请查阅后面“MCI指令”一栏。第三个参数为访问标识,第四个参数一般是一个数据结构,标识程序在访问MCI时要的一些信息。有关详细资料,请查阅本光盘配套书。
7 z4 F; H3 }% u9 l2 ]/ O' c/ C5 R# M8 E3 V  c7 M% o
对于mciSendString,第一个参数为一串控制字符串,返回信息由系统填入第二个参数,第三个参数指明返回信息的最大长度,若对MCI装置设定了"notify"标志则需要在第四个参数填上返回窗口句柄。
2 F3 e/ v" ?- t8 z3 Z5 z1 E: D$ ]: U% x* N, H" `
举例:
% M' x/ V8 d" L# g  [' a+ AmciSendCommand(DeviceID, MCI_CLOSE, NULL, NULL); // 关闭一个MCI设备! e( t/ }2 k# x  b* Q+ @
mciSendString("open aaa.avi", 0, 0, 0); // 打开文件"aaa.avi"
9 ?7 p$ d- ~& z$ A+ `6 m6 [+ G5 }- m, F' R, m( U$ c  W/ F. w3 ~
MCI的设备类型:3 ^3 ]8 k" K. R

! n7 {3 ?, |' V" [  o5 y设备描述                    描述字符串      说明
+ s9 l/ E& o; k7 I) A2 S( YMCI_ALL_DEVICE_ID                           所有设备
- w# o/ E' C7 t# b, hMCI_DEVTYPE_ANIMATION       Animation       动画设备
6 X( T0 B4 t% b" p" H( v# R. J1 sMCI_DEVTYPE_CD_AUDIO        Cdaudio         CD音频% |; k4 U% j& u& A5 J" Q, D* c
MCI_DEVTYPE_DAT             Dat             数字音频
! W- g, f, Q& @9 {9 ]3 _MCI_DEVTYPE_DIGITAL_VIDEO   Digitalvideo    数字视频4 {3 Z, ]) n* V9 U) @) z
MCI_DEVTYPE_OTHER           Other           未定义设备1 w, R: V& T9 A3 P% h7 E2 u8 P3 R+ d
MCI_DEVTYPE_OVERLAY         Overlay         重叠视频2 }8 j$ e  ~* E
MCI_DEVTYPE_SCANNER         Scanner         扫描仪6 E. w1 C# n- Z2 U* @7 }; z
MCI_DEVTYPE_SEQUENCER       Sequencer MIDI  序列器
  s6 b9 r& M" w* Y# s* ^( s5 `3 k% KMCI_DEVTYPE_VCR             Vcr             合式录像机
! H0 N3 c3 H9 \, h+ e" e2 y4 @MCI_DEVTYPE_VIDEODISC       Videodisc       激光视盘
) ^$ X& ]# \3 Z- n1 H, ]- ~MCI_DEVTYPE_WAVEFORM_AUDIO  waveaudio Wave  音频
1 j6 y6 _' t& u6 |& l
* p8 x; b8 Y$ R; a1 B) t对于未在上面定义的MCI设备,用户可查看system.ini文件中[mci]部分,例如:) w4 P: ^, l& V( w. A$ M  S

0 R% a& h) w% g/ e6 c& j) _[mci]) i. N( g" f- R1 ~! @7 O5 f* e; {
cdaudio=mcicda.drv; Y# ?7 c: I( y& L, k
sequencer=mciseq.drv: R" W/ ?- G  _
waveaudio=mciwave.drv
4 M6 j% g# X* l4 ]avivideo=mciavi.drv
5 |( K( @$ }* n4 |6 \- ^videodisc=mcipionr.drv
0 U0 X, P$ [* [  ?5 o. Svcr=mcivisca.drv
' e8 X; l1 z' BActiveMovie=mciqtz.drv
7 G7 o* J5 u! M, h& {1 [" S- q& aQTWVideo=mciqtw.drv2 K8 Z' t" O$ H" r1 c
MPEGVideo=C:\PROGRA~1\XING\XINGMP~1\xmdrv95.dll8 S4 Z2 }/ Z( g

' U2 e3 [  J8 J1 Q6 D其中最后两句分别指明了Apple的QuickTime设备,设备名为"QTWVidio"、MPEG影像设备,设备名为"MPEGVideo"。+ u. F5 z  I7 U" q5 D/ q
//------------------------------4 j! L. d" o! N/ _3 ?
// 广告时间:
# E9 }) T; z4 S) U// 欢迎访问 C++ Builder 研究 - http://www.ccrun.com
* q& N. l" V& B4 W3 s//------------------------------
8 a. u4 Y( F4 k" F' d& S8 N: W在MCI编程中,既可以将设备描述当设备名,也可以将描述字符串当设备名,一个极端偷懒的办法是程序员不要在程序中指定设备名,Windows将自动根据文件扩展名识别设备类型。
0 n. A. L' w/ B: L6 @" ~举个例子来说,打开一个多媒体文件有以下三种方式:3 z0 R3 w* w8 D8 V. v* F( s( }

0 S1 G4 r7 w. C$ [[1]:自动识别:打开一个"WAV"文件
" s, j9 @# O# H5 KMCI_OPEN_PARMS mciOpen;
% P" {& W3 K1 A0 P! f; S6 L9 RmciOpen.lpstrDeviceType = 0;
0 y* L5 ?  f9 r( TmciOpen.lpstrElementName = "aaa.wav";
, Z1 u. Y, ~' R6 p+ VmciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mciOpen);& g) T: [3 k% K% J4 Q( a
  B3 c( \& q% \* X. @: l- `
[2]:指定设备描述:打开CD播放器3 [# [2 Z/ G9 y6 T
MCI_OPEN_PARMS mciOpen;
* ~2 e8 z" |+ v2 \; bmciOpen.lpstrDeviceType = (LPSTR)MCI_DEVTYPE_CD_AUDIO ;
8 |1 Q  P& c) k' g! I5 omciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID, (DWORD)&mciOpen);
# C3 t- f) r  O+ R. O! d6 G# t1 P( ?* }2 w- D; X8 b
[3]:指定描述字符串: 打开一个AVI文件. z* d8 H2 ?. P1 Q  h  X& l( X$ i1 k
MCI_OPEN_PARMS mciOpen;+ {. T& K( C% T7 Z
mciOpen.lpstrDeviceType = "avivideo";
( M# h  k( {, i. i% f4 ?/ ^' mmciOpen.lpstrElementName = "aaa.avi";
8 W- y" j' O) Z! H4 R) `- R# L  @mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD)&mciOpen);
1 V2 l4 E7 L5 l  J* h$ E& b
, }2 W9 w. p" N' h注意三种打开方式中,函数第三个参数的区别,后面会讲到这种区别。
: A+ M- t9 U5 B, S, a0 ~8 Q8 b1 E4 |+ m; }
MCI指令 9 L) U+ y0 R  B  ?

/ F; q0 A0 H8 S: O# lMCI_BREAK        设置中断键,缺省是”CTRL+BREAK"
8 c) I0 \- e8 C1 TMCI_CAPTURE      抓取当前帧并存入指定文件,仅用于数字视频
. a% m/ f/ y7 R) Y. N4 jMCI_CLOSE        关闭设备' z( g4 @3 Z/ F1 g
MCI_CONFIGURE    弹出配置对话框,仅用于数字视频7 w( k/ w% T& e
MCI_COPY         拷贝数据至剪贴板
; h2 d  d, x0 Z8 _. FMCI_CUE          延时播放或录音
+ m% Z7 B* D( M# H& _) P" v' G9 mMCI_CUT          删除数据& C8 v  T( x' w! D. [  X
MCI_DELETE       删除数据
/ N; {+ t5 d! S$ cMCI_ESCAPE       仅用于激光视频
! u9 U3 E2 x; `/ F" Z+ n! E" HMCI_FREEZE       将显示定格
4 U; ~4 f& C+ `  ?0 D. H: E' QMCI_GETDEVCAPS   获取设备信息
' ~( t( X9 e4 dMCI_INDEX        当前屏幕显示与否,仅用于VCR设备
. B+ K* P$ q* z" N& `MCI_INFO         获取字符串信息- a: l7 L7 C. ?
MCI_LIST         获取输入设备数量,支持数字视频和VCR设备6 z! {, l% S2 b9 t
MCI_LOAD         装入一个文件2 J. b; f9 I4 o% k; Y
MCI_MARK         取消或做一个记号,与MCI_SEEK配套  D, S8 [' b- u8 n' n* s+ W
MCI_MARK         取消或做一个记号,与MCI_SEEK配套! \! V% A/ M3 K) w3 a" k
MCI_MONITOR      为数字视频指定报告设备$ T5 i. ?+ ^! ]( a  m
MCI_OPEN         打开设备
- f; w' e- g8 @* ZMCI_PASTE        粘帖数据
8 u0 H5 r% m; j: w' T- Z7 [3 KMCI_PAUSE        暂停当前动作- K# F" {9 s3 |. |6 h
MCI_PLAY         播放7 a2 R  ?  e& G/ L
MCI_PUT          设置源、目的和边框矩形% e) X+ r2 s* g' U: @
MCI_QUALITY      定义设备缺省质量: B. a1 ]4 C$ ~4 {% @  B
MCI_RECORD       开始录制2 m! S, z) }+ S- V% |5 y2 l
MCI_RESERVE      分配硬盘空间
2 ^: j  H" o% g. C- v+ q% X8 ~MCI_RESTORE      拷贝一个bmp文件至帧缓冲
# f% l# B6 b5 y- Q; E5 K- UMCI_RESUME       使一个暂停设备重新启动. ]' H7 M, [5 Q) g
MCI_SAVE         保存数据
, [4 {! ~2 x, o0 S* e# [% qMCI_SEEK         更改媒体位置
* c1 y4 k8 g2 C* AMCI_SET          设置设备信息
: ~( i- G( o' |) Y2 G" rMCI_SETAUDIO     设置音量
8 h% n% k; S" M. g% j) cMCI_SETTIMECODE  启用或取消VCR设备的时间码
  w) v; v0 f6 e3 m- [% {" f' tMCI_SETTUNER     设置VCR设备频道
! B% {) a2 G9 W: C2 W$ B/ tMCI_SETVIDEO     设置video参数; i0 u( \4 _# b4 z9 z
MCI_SIGNAL       在工作区上设置指定空间
/ u# K, z0 Y' i! n7 q( NMCI_STATUS       获取设备信息
6 N; f8 T; J# U+ j8 Y; DMCI_STEP         使播放设备跳帧$ X1 Q. F2 J3 Y& X$ I& Z: {2 z
MCI_STOP         停止播放! Y7 W' k( |+ r9 O& o
MCI_SYSINFO      返回MCI设备信息9 X. G- C. {- ^( B
MCI_UNDO         取消操作7 X8 h$ [' S% N) u* j
MCI_UNFREEZE     使使用MCI_UNFREEZE的视频缓冲区恢复运动
+ C# j6 k( x6 q2 g4 q" vMCI_UPDATE       更新显示区域$ m& @8 C; S5 G& ]4 x
MCI_WHERE        获取设备裁减矩形- k5 Z* I+ s: e/ |6 R
MCI_WINDOW       指定图形设备窗口和窗口特性$ Y: @: S4 }5 z1 O/ n9 O" U' [
3 M5 f- Q, T. |! X7 }0 E
其中比较常用的指令有MCI_OPEN、MCI_CLOSE、MCI_PLAY、MCI_STOP、MCI_PAUSE、MCI_STATUS等等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2025-9-30 09:09 , Processed in 0.035267 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表