mci播放視頻
❶ 本人目前在用MCI製作視頻播放器,想獲得視頻文件的尺寸,但不知道用什麼介面函數獲得,求大神解答……
抱歉!!說的不夠明白,請補充詳細!
❷ 無法用MCI命令播放此視頻文件。MCI報告:指定的參數超出指定命令范圍
多媒體 MCI 應用
媒體控制介面( Media Control Interface , MCI )在控制音頻、視頻等設備方面,提供了與設備無關的控制方法。所謂與「設備無關」是指 Windows 提供了開放的介面標准,用戶或開發人員只需將多媒體設備生產廠商提供的驅動程序加入到 Windows 中,就可以加以利用,而不必考慮該設備的硬體信息。
每個 MCI 設備都由相應的驅動程序來管理,用戶或應用軟體開發人員只需向 MCI 發送簡單的命令字元或代碼就可以控制相關的設備。除一些標准設備外,多媒體設備的 MCI 驅動程序通常由該設備的生產廠家隨產品一起提供, Microsoft 公司為這些廠家提供編寫設備驅動程序的規范,以保證其能在 Windows 下正常工作。
Windows 應用程序通過設備的類型來區分設備,目前已定義的 MCI 設備類型如表 7.2 所示。
表 7.2MCI 所支持的常用的多媒體設備 設備類型
設備描述
類型
Animation
動畫設備
復合型
Cdaudio
CD-Audio
簡單型
Dat
數字音頻磁帶機
Digitalvideo
在某個窗口的數字視頻
Other
未定義的 MCI 設備
Overlay
重疊設備(某個窗口的模擬視頻)
Scanner
圖像掃描儀
Sequencer
MIDI 音序器(文件擴展名為 .mid )
復合型
Videodisc
激光視盤播放器
Waveaudio
數字波形音頻(文件擴展名為 .wav )
MCI的設備類型有兩種 ,一是 簡單設備,如 CD 、視盤演播器;二是復合設備(需要文件的設備,如數字視頻及波形音頻設備等。
如果需要通過 MCI 去控制設備,必須將相應的 MCI 驅動程序和設備的驅動程序(擴展名是 DRV )、 DLL 裝入。 Windows 中的控制面板可完成 MCI 驅動程序的安裝。在 Windows 中, WIN.INI 文件中的 [mci] 部分包括一個已安裝了的設備類型表,如下所示。
[mci extensions]
wav=waveaudio
mid=Sequencer
rmi=Sequencer
avi=AVIVideo
m1v=MpegVideo
mpe=MpegVideo
dat=MpegVideo1
Windows 採用兩種 MCI 介面與 MCI 設備通信。一是 命令消息介面函數,直接控制 MCI 設備;二是使用命令字元串介面函數,基於文本介面命令或命令腳本來控制 MCI 設備。
MCI 的命令消息介面傳送方式
命令消息的函數及命令消息
Windows 多媒體擴充軟體為使用命令消息介面發送 MCI 命令提供 3 個函數:
MciSendCommand 發送一個命令消息到一個 MCI 設備;
MciGetDeviceID 當打開一個設備時,返回設備的 ID 號;
MciGetErrorString 返回對應一個錯誤代碼的字元串。
以 MciSendCommand 為例說明。利用消息和數據結構來給多媒體發送命令並接收設備傳來的信息,用函數 MCISendCommand ,格式為:
DWORD MciSendCommand(WORD Device,Word Message,DWORD Param1,DWORD Param2)
其中 :DeviceID 標識一個 MCI 設備 ;
Message 標識要發出的消息 , 又稱為命令消息如表 7 所示 .
Param1 為消息指定標記 ;
Param2 為指定一個指向消息數據結構的指針
MciSendCommand 調用成功返回 0, 否則返回一個錯誤代碼 , 將錯誤代碼發送到 MciGetErrorString 可獲得對這個錯誤的文本描述 .
表 7.3MCI 的命令消息功能及分類表
命令消息名
功能
使用方式
MCI_SYSINFO
返回有關 MCI 設備的消息
直接由 MCI 解釋的命令消息
MCI_BREAK
為一個指定的 MCI 設備設置一個中止鍵
MCI_SOUND
播放 WIN.INI 文件中的 [Sounds] 部分指定的系統聲音
MCI_CLOSE
關閉一個 MCI 設備
所有的 MCI 設備支持的命令消息
MCI_GETDEVICE
獲得一個 MCI 設備的性能
MCI_INFO
從一個 MCI 設備中得到有關的信息
MCI_OPEN
初始化一個 MCI 設備
MCI_STUTUS
從一個 MCI 設備返回有關的狀態信息
MCI_LOAD
從一個磁碟文件載入數據
基本命令消息
MCI_PAUSE
暫停播放或記錄
MCI_PLAY
開始傳送輸出數據
MCI_RECORD
開始傳送輸入數據
MCI_RESUME
重新開始播放或記錄
MCI_SAVE
將數據存儲到磁碟文件中
MCI_SEEK
向前或向後檢索
MCI_SET
設置設備信息
MCI_STATUS
從一個 MCI 設備返回有關的狀態信息
MCI_STOP
停止播放或記錄
MCI 指令概述
MCI 指令可分為四類:系統指令( System Commands )、需求指令( Required Commands )、基本指令( Basic Commands )及擴展指令( Extended Commands ) , 各類的功能見表 7.4 。
表 7.4MCI 指令分類表 指令分類
說明
System
不經過多媒體設備,而由 MCI 本身直接解釋並執行。
Required
取得多媒體設備的相關信息或開啟、關閉設備命令有 capability 、 info 、 status 、 open 及 close 。
Basic
直接對多媒體設備做存取的動作,如 load 、 pause 、 set 、 status 及 stop 。
Extended
特定設備所具有的命令。
MCI 指令由一字元串組成,語法如下:
Command device_name arguments
其中:
Command 表示所使用的 MCI 指令,如表 7.5 。
表 7.5 MCI 命令表
命令
描述
capacity
請求獲取某個設備能力的信息
info
獲取某個設備的信息
(如該設備的硬體描述)
close
關閉在使用的設備
open
打開並初始化某個設備
Alias 表示打開聲音文件的別名
pause
暫停正在播放和記錄的設備
play
開始設備播放
From start_time to end_time
通常以毫秒為單位
record
開始設備記錄
resume
恢復暫停設備和記錄設備
seek
搜索指定的媒體位置
To position ,to start,to end
set
改變控制設置
status
請求設備狀態的信息
stop
停止設備的播放或記錄
device_name 表示設備類型、文件名稱或別名( Alias )。對於不需要使用文件來播放或記錄的多媒體設備,如 CDAudio 設備或激光視盤機, device_name 只要以設備類型表示即可。
對於有些設備,如語音設備或動畫播放設備等須用到文件的復合設備,device_name 必須是文件名稱才行。必須使用標準的擴展文件名, MCI 會根據擴展文件名自動判別所使用的設備類型。這些標準的擴展文件名,可以在 WIN.INI 中的 [MCI extension] 段中找到 , 至於別名,則是為了簡化 MCI 指令字元串及避免使用重復的設備類型或文件名稱。例如:打開 canyon.mid 文件並播放, MCI 命令語句
open c:\win\canyon.mid type sequencer
play c:\win\canyon.mid
可以簡化為:
open c:\win\canyon.mid type sequencer alias MIDI
play MIDI
arguments 表示 MCI 語法中的參數部分,則是使用 MCI 指令時所需要的各種參數。例如使用 play 命令,可能就要用到 from 及 to 這兩個參數來表示起始及結束的位置。
例如: play cdaudio from 4 to 6
這行指令表示要演湊 CD 光碟中第四首到第六首曲目。
MCI 指令的使用
打開及關閉 MCI 設備 在使用 MCI 設備之前,必須使用 Open 指令將它啟動。至於系統能同時打開多少多媒體設備,完全取決於系統存儲器的大小。
Open 指令的語法如下:
Open device_name arguments
在前面已介紹過, device_name 可能是設備名稱或文件名稱,完全取決於使用的多媒體設備是否需要文件而定。 MCI 將不需要文件的設備稱為簡單設備,需要文件的設備則為復合設備,這兩種設備打開的方式也不同。表 6.4 列出了各種多媒體設備的類別。
注意, Device type 可在 WINDOWS 的 SYSTEM.INI 中 [MCI] 段中找到,通常在安裝多媒體設備時,安裝程序都會更新 SYSTEM.INI 中 [MCI] 段中,加入新的驅動程序。
[mci]
waveaudio=mciwave.drv
sequencer=mciseq.drv
cdaudio=mcicda.drv
avivideo=mciavi.drv
videodisc=mcipionr.drv
vcr=mcivisca.drv
等號「 = 」的左邊表示 DeviceType ,右邊表示控制此多媒體設備所需要的驅動程序。
打開簡單型 MCI 設備。簡單型設備只要在 device_name 的部分表示使用設備的類型就可以了,如: open cdaudio
打開復合型多媒體設備。復合型設備需要表明使用的文件,如:
open c:\cwin\chimes.wav type waveaudio
open c:\cwin\canyon.mid type sequencer
其中 type waveaudio 或 type sequencer 可以省略。因為 MCI 會根據擴展名 wav 及 mid 自動區別其設備名稱。
關閉 MCI 設備 當不使用多媒體設備時可以使用 close 指令來關閉打開的設備。請注意,最好不要在程序剛開始執行時就打開設備,並直到程序結束才關閉設備,這樣其他應用程序在該程序執行階段無法使用該設備。
播放多媒體設備 Play 命令是用來播放多媒體設備(或其他使用的文件)的。如果只使用 play 指令,而不加任何參數,則多媒體設備會從目前播放的位置播放到文件結束為止。例如:
playcdaudiofrom3000to15000
表示播放 CD 盤的第 3 秒至 15 秒(以毫秒為單位)
取得 MCI 設備的信息 每種多媒體設備都有支持 capability 、 status 和 info 指令。這些指令是用來取得多媒體設備的各項信息及狀態的。例如:
capability cdaudio can eject
這句 MCI 指令是詢問使用的光碟驅動器是否有退出 CD 光碟的功能。
Status cdaudio mode
這句 MCI 指令執行後,會傳回目前光碟驅動器的狀態,是在播放中( playing )還是在暫停( paused ),等等。
Info waveaudio proct
執行這句 MCI 指令後,會傳當前使用的 Waveform 語音設備的產品名稱。
參數的使用 在多媒體程序設計中為 MCI 指令設置合適的參數是十分重要的。常用的有 shareable 、 all 、 new 、 wait 等。
① 使用 shareable (可共享的)參數。如果在打開多媒體設備時,使用 shareable 參數,就能讓不同的應用程序同時使用相同的多媒體設備。例如:
open cdaudio shareable
執行該 MCI 指令將 CD 光碟驅動器設定為共享設備,此時,應用程序無法預期該光碟驅動器的狀態,因為它隨時都可能被其他應用程序所使用而改變狀態。注意不是每種多媒體設備都可設置為共享狀態,大部分復合型設備都有無法設置為共享,對於該類設備,可採用以不同的別名多次打開的方法,來實現多個應用程序使用一個設備。
② 使用 ALL 參數。對於某些指令可用 ALL 參數來描述。使用了該參數, MCI 會依次將這個指令傳送給每一個已打開的設備。例如:
close all
將關閉所有已打開的設備。
③ 使用 NEW 參數。 MCI 允許建立一個新文件。而不必給予文件名,只要在使用 save 指令存儲前,描述指定的文件名即可。例如:
open newtype waveaudio alias sounds
record sounds
save sounds test. wav
close sounds
④ wait 參數。因為 MCI 指令在執行之後會立即將控制權交回,所以有時需要在 MCI 指令後加上參數 wait 。如果輸入下面指令:
open e:\win\chimes.wav alias sounds
play sounds
stop sounds
執行的結果是聽不到任何聲音。因為 MCI 在執行 play 命令後,馬上去執行 stop 命令。若將其改寫如下,則能聽到完整的聲音了:
open e:\win\chimes.wav alias sounds
play sounds wait
stop sounds
以上只是介紹了 MCI 指令的一般用法,不同的操作指令及不同的參數,在此不詳細說明。
命令字元串介面傳送方式
Windows 多媒體擴充軟體為使用命令字元串介面傳送命令字元串提供了 3 個函數:
MciSendString 向一個 MCI 設備驅動程序發送一個命令字元串。這個函數同時也具有對於回調函數和返回字元串的參數。
語法格式如下:
DWORD Mcisendstring ( ipstrCommand, ipstrReturnString,WORD wReturnLenth,
hCallback);
其中: ipstrCommand 是 MCI 命令的字元串(用雙引號);
ipstrReturnString 是存放返回代碼的緩沖區地址;
wReturnLenth 是緩沖區長度;
hCallback 是返回函數地址。
MciGetErrorString 返回一個同錯誤代碼相對應的文本描述字元串。若函數調用成功,返回返回 TRUE ,否則返回錯誤代碼。
語法格式如下:
WORD MciGetErrorString ( DWORD Error,LpstrBuffer,WORD length )
其中: Error 是錯誤代碼,是 Mcisendstring 或 Mcisendcommand 函數調用返回值。
LpstrBuffer 指向一個緩沖區指針,用來接收系統返回的文本描述;
Length 指定緩沖區的長度。
MciExecute 向一個 MCI 設備驅動程序程序發送一個命令字元串。
語法格式如下:
BOOL MciExecute ( LpstrCommand )
其中: LpstrCommand 是一個指向以 NULL 結束的控制命令字元串。若函數調用成功,返回 TRUE ,不成功返回 FALSE 。
❸ 為什麼ppt插入的視頻和音樂都播放不了 說什麼 mci 損壞啊 求高手
在你所做PPT的電腦上 你是肯定能播放出來的 要在別的地方播放的話 要把視頻音樂一起拷過去 放在統一文件夾里 這樣在PPT中就能播放了 MCI ( Media Control Interface ) ,是媒體控制介面 一般的話是不會損壞的 不用擔心
❹ 電腦問題!」MCI」是什麼的簡稱和什麼意思
MCI(Media Control Interface,媒體控制介面)向Windows程序提供了在高層次上控制媒體設備介面的能力。程序不必關心具體設備,就可以對激光唱機(CD)、視盤機、波形音頻設備、視頻播放設備和MIDI設備等媒體設備進行控制。對於程序員來說,可以把MCI理解為設備面板上的一排按鍵,通過選擇不同的按鍵(發送不同的MCI命令)可以讓設備完成各種功能,而不必關心設備內部實現。比如,對於play,視盤機和CD機有不同的反應(一個是播放視頻,一個播放音頻),而對用戶來說卻只需要按同一按鈕。
應用程序通過向MCI發送命令來控制媒體設備。MCI命令介面分命令字元串和命令消息兩種,兩者具有相同的功能。命令字元串具有使用簡單的特點,但是它的執行效率不如命令消息
❺ 本人要用VC的mci不用控制項寫視頻播放器,但是不怎麼懂用VC和C++,那麼需要學些什麼呢可否提供書本和資料
在注冊表HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\MCI Extensions中有所有的文件類型,和相對應的播放設備。
MCI播放mp3的例子:
#include<windows.h>
#include<stdio.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
void main()
{
char buf[128];
//use mciSendString()
//mciSendString("play e:\\songs\\把根留住.mp3",buf,sizeof(buf),NULL);
//mciSendString("play e:\\songs\\zhj.mp3",buf,sizeof(buf),NULL);
char str[128] = ;
int i = 0;
//use mciSendCommand
MCI_OPEN_PARMS mciOpen;
MCIERROR mciError;
SetWindowText(NULL,"12345");
//mciOpen.lpstrDeviceType = (LPCTSTR)MCI_ALL_DEVICE_ID;
//mciOpen.lpstrDeviceType = "waveaudio"; //只能播放.wav文件
//mciOpen.lpstrDeviceType = "avivideo"; //*.avi
mciOpen.lpstrDeviceType = "mpegvideo";
//mciOpen.lpstrDeviceType = "sequencer";
mciOpen.lpstrElementName = "e:\\songs\\zhj.mp3";
//mciOpen.lpstrElementName = "e:\\movie\\first.avi";
//mciOpen.lpstrElementName = "c:\\winnt\\media\\Windows 登錄音.wav";
mciError = mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,(DWORD)&mciOpen);
if(mciError)
{
mciGetErrorString(mciError,buf,128);
printf("send MCI_OPEN command failed:%s\n",buf);
return;
}
UINT DeviceID = mciOpen.wDeviceID ;
MCI_PLAY_PARMS mciPlay;
mciError = mciSendCommand(DeviceID,MCI_PLAY,0 ,(DWORD)&mciPlay);
if(mciError)
{
printf("send MCI_PLAY command failed\n");
return;
}
/*
while(1)
{
sprintf(str,"now playing\t%d\tseconds",i);
printf("%s\r",str);
i++;
Sleep(1000);
}
*/
}
❻ MFC配合MCI函數播放AVI視頻問題沒圖像…
可以的,我來
❼ 急求一個用MCI設計的數字視頻播放器!
#include <MMSystem.h>
#include <Vfw.h>
#include <shlobj.H>
#pragma comment(lib, "winmm.lib")
#pragma comment(lib, "Vfw32.lib")
#define AudioStereo 0
#define AudioLeft 1
#define AudioRight 2
WNDPROC OldProc;
LPSTR GetDriverID(LPSTR ff);
bool OpenMusic(LPSTR FileName,HWND hWnd);
bool PlayMusic();
long GetMusicLength();
bool PutToWindow(RECT rc);
long GetMusicPos();
bool SetMusicPos(long Position);
bool PauseMusic();
bool CloseMusic();
bool SetAudioSource(int AudioSource);
bool PlayFullScreen();
bool SetVolume(int Volume);
bool SetSpeed(int Speed);
bool SetAudioOnOff(bool AudioOff);
bool SetWindowShow(bool WindowOff);
bool IsPlaying();
HWND GetWindowHandle();
MCIDEVICEID GetDeviceID();
LRESULT CALLBACK MCIWindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);
bool ShowOpenSave(LPSTR FileName,bool OpenOrSave,HWND hWnd);
bool SavePicture(LPSTR FileName,HWND hWnd);
/*'======================================================*\
'根據文件名,確定設備
\'=======================================================*/
LPSTR GetDriverID(LPSTR ff)
{
char aa[3];
int i;
char bb[3];
int lenff=strlen(ff);
for(i=0;i<3;i++){
aa[i]=ff[lenff-3+i];
if(aa[i]>=97||aa[i]<=122)aa[i]-=32;
}
aa[3]=0;
strcpy(bb,"MID");
if(strcmp(aa,bb)==0)return "Sequencer";
strcpy(bb,"RMI");
if(strcmp(aa,bb)==0)return "Sequencer";
strcpy(bb,"IDI");
if(strcmp(aa,bb)==0)return "Sequencer";
strcpy(bb,"WAV");
if(strcmp(aa,bb)==0)return "Waveaudio";
return "MPEGVideo";
}
//=======================================================
//打開MCI設備,FILENAME為文件名,傳值代表成功與否
//=======================================================
bool OpenMusic(LPSTR FileName,HWND hWnd=NULL)
{
CloseMusic();
CString ShortPathName;
CString tmpStr=FileName;
if(tmpStr.Left(7)=="http://")
ShortPathName=FileName;
else
GetShortPathName(FileName,
ShortPathName.GetBuffer(0), 255);
// MessageBox(NULL,ShortPathName.GetBuffer(0),"",MB_OK);
char *DrvID=GetDriverID(ShortPathName.GetBuffer(0));
CString lpstrCommand;
lpstrCommand.Format("open %s type %s alias NOWMUSIC",
ShortPathName.GetBuffer(0), DrvID);
if(strcmp(DrvID,"MPEGVideo")>=0)
{
if(hWnd!=NULL)
lpstrCommand.Format("open %s type %s alias NOWMUSIC parent %d style child",
ShortPathName.GetBuffer(0), DrvID,(int)hWnd);
else lpstrCommand+=" style overlapped ";}
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
{
OldProc=(WNDPROC)GetWindowLong(GetWindowHandle(),GWL_WNDPROC);
SetWindowLong(GetWindowHandle(),GWL_WNDPROC,(long)MCIWindowProc);
return true;
}
return false;
}
//=======================================================
//關閉MCI設備,FILENAME為文件名,傳值代表成功與否
//=======================================================
bool CloseMusic()
{
if(mciSendString("close NOWMUSIC", NULL, 0, 0)==0)
return true;
else return false;
}
//'======================================================
//'播放文件
//'======================================================
bool PlayMusic()
{
if(mciSendString("play NOWMUSIC", NULL, 0, 0)==0)
return true;
else return false;
}
//'======================================================
//'獲取媒體的長度
//'======================================================
long GetMusicLength()
{
char RefStr[80];
mciSendString("status NOWMUSIC length", RefStr, 80, 0);
return atol(RefStr);
}
//'======================================================
//'添充畫面
//'======================================================
bool PutToWindow(RECT rc)
{
CString lpstrCommand;
lpstrCommand.Format("put NOWMUSIC window at %d %d %d %d",
rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else return false;
}
//'======================================================
//'獲取當前播放進度
//'======================================================
long GetMusicPos()
{
char RefStr[80];
mciSendString("status NOWMUSIC position", RefStr, 80, 0);
return atol(RefStr);
}
//'======================================================
//'設置媒體的當前進度
//'======================================================
bool SetMusicPos(long Position)
{
CString lpstrCommand;
lpstrCommand.Format("seek NOWMUSIC to %d",
Position);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else return false;
}
//'======================================================
//'暫停播放
//'======================================================
bool PauseMusic()
{
if(mciSendString("pause NOWMUSIC", NULL, 0, 0)==0)
return true;
else return false;
}
//'======================================================
//'設置聲道
//'======================================================
bool SetAudioSource(int AudioSource)
{
CString lpstrCommand;
lpstrCommand="setaudio NOWMUSIC source to ";
switch(AudioSource){
case AudioStereo:
lpstrCommand+="stereo";
break;
case AudioLeft:
lpstrCommand+="left";
break;
case AudioRight:
lpstrCommand+="right";
break;
}
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else return false;
}
//'======================================================
//'全屏播放
//'======================================================
bool PlayFullScreen()
{
if(mciSendString("play NOWMUSIC fullscreen", NULL, 0, 0)==0)
return true;
else return false;
}
//'=====================================================
//'設置聲音大小1-1000
//'=====================================================
bool SetVolume(int Volume)
{
CString lpstrCommand;
lpstrCommand.Format("setaudio NOWMUSIC volume to %d",
Volume);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else return false;
}
//'=====================================================
//'設置播放速度1-2000
//'=====================================================
bool SetSpeed(int Speed)
{
CString lpstrCommand;
lpstrCommand.Format("set NOWMUSIC speed %d",
Speed);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
return true;
else return false;
}
//'====================================================
//'靜音True為靜音,FALSE為取消靜音
//'====================================================
bool SetAudioOnOff(bool AudioOff)
{
if(AudioOff){
if(mciSendString("setaudio NOWMUSIC off",NULL,0,0)==0)
return true;
}
else{
if(mciSendString("setaudio NOWMUSIC on",NULL,0,0)==0)
return true;
}
return false;
}
//'====================================================
//'是否有畫面True為有,FALSE為取消
//'====================================================
bool SetWindowShow(bool WindowOff)
{
if(WindowOff){
if(mciSendString("window NOWMUSIC state show",NULL,0,0)==0)
return true;
}
else{
if(mciSendString("window NOWMUSIC state hide",NULL,0,0)==0)
return true;
}
return false;
}
//'====================================================
//'獲得當前媒體的狀態是不是在播放
//'====================================================
bool IsPlaying()
{
// char RefStr[10];
CString RefStr;
if(mciSendString("status NOWMUSIC mode",
RefStr.GetBuffer(10), 10, 0)==0)
{
if(RefStr.Find("playing")>=0||
RefStr.Find("播放")>=0)
return true;
}
return false;
}
//'====================================================
//'獲得播放窗口的handle
//'====================================================
HWND GetWindowHandle()
{
char RefStr[80];
mciSendString("status NOWMUSIC window handle", RefStr, 80, 0);
return (HWND)atol(RefStr);
}
//'====================================================
//'獲取DeviceID
//'====================================================
MCIDEVICEID GetDeviceID()
{
return mciGetDeviceID("NOWMUSIC");
}
//'====================================================
//'處理窗口事件
//'====================================================
LRESULT CALLBACK MCIWindowProc(HWND hWnd,UINT message,
WPARAM wParam,LPARAM lParam)
{
// HDC hdc;
int wmId;
switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
//MessageBox(NULL,"OK","sd",MB_OK);
/*switch(wmId)
{
default:
break;
}//*/
break;
case WM_LBUTTONUP:
return 0;
break;
case WM_RBUTTONUP:
POINT pt;
GetCursorPos(&pt);
break;
case WM_PAINT:
break;
default:
break;
}
return CallWindowProc(OldProc,hWnd,
message,wParam,lParam);
}
這些都是沒用類的,直接用的MCI API,這玩意不用必須把它集合成類吧。
❽ MCI怎樣將視頻固定在當前窗口播放
BOOL CMciCmdDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
m_strFileName = "F:\\mywork\\mcicmd\\aaa.avi"; // 得到選中文件
Open(); // 打開選中文件
DWORD dwFlags;
MCI_DGV_PLAY_PARMS mciPlay;
mciPlay.dwCallback = (LONG)this->GetSafeHwnd();
mciPlay.dwFrom = mciPlay.dwTo = 0;
dwFlags = MCI_NOTIFY;
mciSendCommand(m_MCIDeviceID, MCI_PLAY, dwFlags,
(DWORD)(LPMCI_DGV_PLAY_PARMS)&mciPlay); // 播放
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
在OnInitDialog()中加入
m_strFileName = "F:\\mywork\\mcicmd\\aaa.avi"; // 得到選中文件
Open(); // 打開選中文件
DWORD dwFlags;
MCI_DGV_PLAY_PARMS mciPlay;
mciPlay.dwCallback = (LONG)this->GetSafeHwnd();
mciPlay.dwFrom = mciPlay.dwTo = 0;
dwFlags = MCI_NOTIFY;
mciSendCommand(m_MCIDeviceID, MCI_PLAY, dwFlags,
(DWORD)(LPMCI_DGV_PLAY_PARMS)&mciPlay); // 播放
關鍵是加入mciPlay.dwCallback = (LONG)this->GetSafeHwnd();
❾ VB如何用mcisengstring播放視頻
請問是什麼原因如何解決? 控制台可能不支持其它格式的多媒體文件 你可以用360安全衛士關了一個播放器,或關了一個佔用MIC的程序試一試
❿ 急!!請問VB中如何獲取mci控制項或API函數「mcisendstring 」默認播放視頻窗口的句柄
用FindWindow查找,mmcontrol控制項的默認播放窗口的標題就是它正在播放的文件的名字,知道了這個就能找到它Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
默認播放窗口句柄 = FindWindow(vbNullString, "正在播放的那個文件的文件名")