日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言mcisendstring函数,mciSendString用法

發布時間:2023/11/30 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言mcisendstring函数,mciSendString用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用MCI API,源文件中需要包含頭文件 Mmsystem.h,在Project->Settings->Link->Object/libray module中加入庫 Winmm.lib。 VS2008在源文件加上#include "mmsystem.h" #pragma comment(lib,"winmm.lib")

1、MCI簡介

MCI(Media Control Interface,媒體控制接口)向Windows程序提供了在高層次上控制媒體設備接口的能力。程序不必關心具體設備,就可以對激光唱機(CD)、視盤機、波形音頻設備、視頻播放設備和MIDI設備等媒體設備進行控制。

對于程序員來說,可以把MCI理解為設備面板上的一排按鍵,通過選擇不同的按鍵(發送不同的MCI命令)可以讓設備完成各種功能,而不必關心設備內部實現。

比如,對于play,視盤機和CD機有不同的反應(一個是播放視頻,一個播放音頻),而對用戶來說卻只需要按同一按鈕。

應用程序通過向MCI發送命令來控制媒體設備。MCI命令接口分命令字符串和命令消息兩種,兩者具有相同的功能。命令字符串具有使用簡單的特點,但是它的執行效率不如命令消息。

所有的MCI命令字符串都是通過多媒體API函數mciSendString傳遞給MCI的,該函數的聲明為:

MCIERROR mciSendString(

LPCTSTR lpszCommand,    //MCI命令字符串

LPTSTR lpszReturnString, //存放反饋信息的緩沖區

UINT  cchReturn,     //緩沖區的長度

HANDLE hwndCallback    //回調窗口的句柄,一般為NULL

); //若成功則返回0,否則返回錯誤碼。

該函數返回的錯誤碼可以用mciGetErrorString函數進行分析,該函數的聲明為:

BOOL mciGetErrorString(

DWORD fdwError,   //函數mciSendString返回的錯誤碼

LPTSTR lpszErrorText, //接收描述錯誤的字符串的緩沖區

UINT  cchErrorText  //緩沖區的長度

);

下面是使用mciSendString函數的一個簡單例子:

char buf[50];

MCIERROR mciError;

mciError=mciSendString("open cdaudio",buf,strlen(buf),NULL);

if(mciError)

{

mciGetErrorString(mciError,buf,strlen(buf));

AfxMessageBox(buf);

return;

}

open cdaudio命令打開CD播放器,如果出錯(如驅動器內沒有CD)則返回錯誤碼,此時可以用mciGetErrorString函數取得錯誤信息字符串。

2、MCI設備

open是MCI打開設備的命令,cdaudio是MCI設備名。MCI的設備類型如下:

animation  動畫設備

cdaudio   CD播放器

dat     數字音頻磁帶機

digitalvideo 某一窗口中的數字視頻(不基于GDI)

other    未定義的MCI設備

overlay   重疊設備(窗口中的模擬視頻)

scanner   圖象掃描儀

sequencer  MIDI序列器

videodisc  視盤機

waveaudio  播放數字波形文件的音頻設備

設備名是在注冊表或SYSTEM.INI的[mci]部分定義的,典型的[mci]段如下:

[mci]

cdaudio=mcicda.drv

sequencer=mciseq.drv

waveaudio=mciwave.drv

avivideo=mciavi.drv

videodisc=mcipionr.drv

等號的左邊是設備名,右邊是對應的MCI驅動程序。當安裝了新的MCI驅動程序時,系統要用不同的設備名來區分。

3、MCI命令

使用MCI設備一般包括打開、使用和關閉三個過程,常用的MCI命令有:

open    打開設備

close    關閉設備

play    開始設備播放

stop    停止設備的播放或記錄

record   開始記錄

save    保存設備內容

pause    暫停設備的播放或記錄

resume   恢復暫停播放或記錄的設備

seek    改變媒體的當前位置

capacility 查詢設備能力

info    查詢設備的信息

status   查詢設備狀態信息

MCI的大部分命令可以控制不同的媒體設備,但其中record和save命令并不是所有MCI設備都可以使用。

MCI命令的使用是很隨意的,只要先打開,最后關閉,中間可以隨意調用各種命令。

(1) open 打開設備

MCI設備使用前必須先打開,當然,使用后也必須要關閉,以免影響他人的使用。

open device_name type device_type alias device_alias

device_name     要使用的設備名,通常是文件名。

type device_type  設備類型,例如waveaudio或sequencer,可省略。

alias device_alias 設備別名,指定后可在其他命令中代替設備名。

(2) play 開始設備播放

MCI設備打開后即可以播放,可使用設備名或別名。

play device_alias from pos1 to pos2 wait repeat

若省略from則從當前磁道開始播放,若省略to則播放到結束。

若指明wait則等到播放完畢命令才返回。

若指明repeat則會不停的重復播放。

若同時指明wait和repeat則命令不會返回,本線程產生堵塞,通常會引起程序失去響應。

(3) 播放CD

void CTttView::OnOpenCD()

{

mciSendString("open cdaudio",NULL,0,NULL);

mciSendString("play cdaudio",NULL,0,NULL);

);

void CTttView::OnStopCD()

{

mciSendString("stop cdaudio",NULL,0,NULL);

mciSendString("close cdaudio",NULL,0,NULL);

);

還可以:

pause cdaudio  暫停播放。

resume cdaudio 繼續被暫停的播放。

seek cdaudio to  移動到指定磁道。

set cdaudio door open/closed 彈出或縮進CD盤。

(4) 播放多媒體文件

void CTttView::OnMyMenu()

{

mciSendString("open myfolder\\tada.wav alias aa",NULL,0,NULL);

或 mciSendString("open myfolder\\flourish.mid alias aa",NULL,0,NULL);

或 mciSendString("open myfolder\\clock.avi alias aa",NULL,0,NULL);

mciSendString("play aa wait",NULL,0,NULL);

mciSendString("close aa",NULL,0,m_hWnd);

);

(5) 錄制聲音

void CTttView::OnStartRecord()

{

mciSendString("open new type waveaudio alias aa",NULL,0,NULL);

mciSendString("record aa",NULL,0,NULL);

);

void CTttView::OnStopRecord()

{

mciSendString("save aa c:\\aaa.wav wait",NULL,0,NULL);

mciSendString("close aa",NULL,0,NULL);

);

4、MCI命令消息

到目前為止,我們使用的都是MCI命令字符串。可以發現,命令字符串具有簡單易學的優點,但這種接口與C/C++的風格相去甚遠,如果程序要查詢和設置大量數據,那么用字符串的形式將很不方便。

MCI的命令消息接口提供了C語言接口,它速度更快,并且更能符合C/C++程序員的需要。

所有MCI命令消息都是通過mciSendCommand函數發送的,函數聲明為:

MCIERROR mciSendCommand(

MCIDEVICEID wIDDevice,  //設備的ID,在打開設備時不用該參數

UINT    uMsg,    //命令消息

DWORD    fdwCommand, //命令消息的標志

DWORD    dwParam   //指向包含命令消息參數的結構

); //若成功則返回0,否則返回錯誤碼

命令消息uMsg與命令字符串是對應的,例如,open與MCI_OPEN完成的是一樣的功能。

變量wDeviceID用來保存設備的ID,系統用ID來標識不同的設備,以保證命令發給正確的對象。

void CTttView::OnMyMenu()

{

MCI_OPEN_PARMS mciOpen;

UINT wDeviceID;

mciOpen.lpstrDeviceType = "avivideo";

mciOpen.lpstrElementName = "myfolder\\clock.avi";

mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mciOpen);

wDeviceID=mciOpen.wDeviceID;

MCI_PLAY_PARMS mciPlay;

mciSendCommand(wDeviceID, MCI_PLAY, MCI_WAIT, (DWORD)&mciPlay);

);

可以看出,用命令消息比用命令字符串要復雜的多,但它的執行效率高。

總結

以上是生活随笔為你收集整理的c语言mcisendstring函数,mciSendString用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。