-
mciSendString
鎖定
- 中文名
- mciSendString
- 外文名
- mciSendString
- 頭文件
- mmsystem.h
- DLL 文件
- winmm.dll
- LIB 文件
- winmm.lib
- 功 能
- 執行MCI指令, 以達到播放暫停音頻視頻等.
mciSendString頭文件
#include <mmsystem.h>
mciSendString函數原型簡介
mciSendString(發送命令串),函數原型為:
MCIERROR mciSendString( // 出錯返回非零值(錯誤代碼)
// 可用mciGetErrorString獲得錯誤的文本描述
LPCTSTR lpszCommand, // 指向以null結尾的命令字符串:”命令 設備[ 參數]”
LPTSTR lpszReturnString,// 指向接收返回信息的緩衝區,為NULL時不返回信息
UINT cchReturn, // 上述緩衝區的大小
HANDLE hwndCallback // 在命令串中含notify時,它指定一個回調窗口的句柄
// 一般為NULL
);
如:mciSendString(L"open sample.wav type waveaudio alias wave", NULL, 0, NULL);
MCI函數中還有一個只適用於命令串接口的函數為mciExcute,mciExcute(執行)是mciSendString的簡化形式:
BOOL mciExcute(LPCTSTR lpszCommand); // 成功返回TRUE
該函數只有Win16支持,Win32不支持,可自寫一函數實現:
BOOL mciExcute(LPCTSTR lpszCommand) {
if (mciSendString(lpszCommand, NULL, 0, NULL)) return FALSE;
return TRUE;
}
如:mciExcute(L"open sample.wav type waveaudio alias wave");
mciSendString官方文檔
The mciSendString function sends a command string to an MCI device. The device that the command is sent to is specified in the command string. (這個mciSendString函數發送一個指令字符串到一個MCI設備, 指令發送的設備在這個指令字符串中被指定.)
mciSendString函數原型
MCIERROR mciSendString( LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback);
[1]
mciSendString差異比較
mciSendString與mciExecute都是常用的執行MCI指令的函數, 在使用mciSendString執行時, 如若遇到異常, 僅會返回一個錯誤碼, 而mciExecute還會彈出一個窗口.
所以, mciSendString常用於程序的最終發佈版本, mciExecute由於會彈出窗口, 所以很少在發佈版本中使用, 反而在調試版本中常用, 因為彈出窗口中會包含錯誤信息, 易於調試.
mciSendString使用方法
mciSendString簡略概述
一,打開多媒體文件。
首先在Dialog上面放一個Picture控件,MCISendString就在這個Picture控件的平面上播放多媒體文件,
設Picture控件的ID為IDC_STATIC1:
CString open1;
char buf[256];
open1.Format("open f:\\mpeg\\mpeg1.avi type MPEGVideo Alias movie parent %u Style %u notify", h,WS_CHILD);
mciSendString(open1.GetBuffer(open1.GetLength()),buf,sizeof(buf),NULL);
這樣F盤下面的mpeg目錄下的mpeg1.avi就打開了,其中的type MPEGVideo是指打開MPEG,AVI等類型,如果不加type MPEGVideo這一句,就是打開WAV,MP3等,Alias movie定義了mpeg1.avi的別名為movie,以後可以通過操作movie就可以操作mpeg1.avi。
二,播放多媒體文件。
上面我們已經打開了f:"mpeg"mpeg1.avi,現在我們來播放它:
mciSendString("play movie",buf,sizeof(buf),NULL);
如果想全屏播放:
mciSendString("play movie fullscreen",buf,sizeof(buf),NULL);
三,暫停播放。
mciSendString("pause movie",buf,sizeof(buf),NULL);
四,停止播放。
mciSendString("close movie",buf,sizeof(buf),NULL);
五,得到所播放文件的長度。
char sPosition[256];long lLength;
mciSendString("Status movie length", sPosition, 255,0);lLength=strtol(sPosition, NULL, 10);
其中lLength就是所播放文件的長度。注意:該長度單位是毫秒。
六,得到所播放文件的聲音大小。
char chVolume[256];long lVolume;mciSendString("status movie volume",chVolume,255,0);lVolume=strtol(chVolume,NULL,10);其中lVolume就是所播放文件的聲音大小。
七,到你指定的位置播放。
CString step1;long lPosition;
lPosition=100;
step1.Format("seek movie to %ld",lPosition);
mciSendString(step1.GetBuffer(step1.GetLength()),buf,sizeof(buf),0);
其中lPosition就是要到的播放位置,可以由你指定。
mciSendString詳細內容
mciSendString程序示例
命令串
1)CD
wchar_t buf[256];
MCIERROR err = mciSendString(L"open cdaudio alias cd", NULL, 0, NULL); // 打開CD
if (err) {
if (mciGetErrorString(err, buf, 256))
MessageBox(buf, L"Error"); // 獲得並顯示錯誤串
return;
}
mciSendString(L"status cd number of tracks", buf, 256, NULL); // 獲得音軌總數
m_nTracks = wcstol(buf, NULL, 10); // 這裏使用了寬字符版的字符串到整數的
// 轉換函數:long wcstol( const wchar_t *nptr, wchar_t **endptr, int base );
wsprintf(buf, L"play cd from %d to %d", m_nFrom, m_nTo);
mciSendString(buf, NULL, 0, NULL); // 從音軌m_nFrom頭播放到音軌m_nTo–1尾
其他常用命令:
mciSendString(L"set cd time format tmsf", NULL,0,NULL); // 設置時間格式為
// 軌(<100):分(<100):秒(<60):幀(<75),一秒=75塊,一塊=98幀
mciSendString(L"set cd door open", NULL, 0, NULL); // 打開光驅
mciSendString(L"set cd door closed", NULL, 0, NULL); // 關閉光驅
mciSendString(L"pause cd", NULL, 0, NULL); // 暫停播放
mciSendString(L"resume cd", NULL, 0, NULL); // 恢復播放
mciSendString(L"stop cd", NULL, 0, NULL); // 停止播放
mciSendString(L"close cd", NULL, 0, NULL); // 關閉CD設備
mciSendString(L"status cd length", buf, 256, NULL); // 獲得整個CD的音軌總長度
mciSendString(L"status cd length track 5", buf, 256, NULL); // 獲得第5個音軌的長度
mciSendString(L"status cd current track", buf, 256, NULL); // 獲得當前音軌號
注意:
"play cd from m_nFrom to m_nTo"是完整形式,它還有其他形式:
"play cd from m_nFrom"從m_nFrom播放到盤尾
"play cd to m_nTo"從當前位置播放到指定音軌
"play cd" 從當前位置播放到盤尾
例如播放最後一首歌:"play cd from m_nLast"
2)WAV
wchar_t buf[256];
wsprintf(buf, L"open \"%s\" alias sound type waveaudio", pDoc->strFilePath);
MCIERROR err = mciSendString(buf, NULL, 0, NULL);
if (err) {
if (mciGetErrorString(err, buf, 256)) MessageBox(buf, L“Error”);
return;
}
// t1和t2為用户指定的起止時間(單位為秒,浮點變量)
DWORD start = (DWORD)(t1 * 1000 + 0.5), end = (DWORD)(t2 * 1000 + 0.5);
wsprintf(buf, L"play sound from %ld to %ld", start, end);
mciSendString(buf, NULL, 0, NULL);
其他常用命令:
mciSendString(L"status sound length", buf, 256, NULL);
mciSendString(L"pause sound", NULL, 0, NULL);
mciSendString(L"play sound", NULL, 0, NULL); // 從當前位置播放到文件尾
mciSendString(L"stop sound", NULL, 0, NULL);
mciSendString(L"close sound", NULL, 0, NULL);
3).MP3
下面看一個播放mp3音樂的簡單示例:
#include<Windows.h> #include<mmsystem.h> #pragma comment(lib,"WINMM.LIB") int main(int argc,char*argv[]) { mciSendString(TEXT("open 難忘的一天.mp3 alias mysong"),NULL,0,NULL); mciSendString(TEXT("play MySong"),NULL,0,NULL); Sleep(50000); return0; }
該函數還可以播放avi視頻等。
- 參考資料
-
- 1. mciSendString function (Windows) | Microsoft Docs .Microsoft Docs | 微軟文檔[引用日期2021-02-08]
- 2. mciSendString 和 mciSendCommand 函數的簡單使用 .CSDN | 中國軟件開發網[引用日期2021-02-08]
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:33次歷史版本
- 最近更新: 君伟junwei521