カスタム検索
Delphi Tips
mciSendStringの使い方 トップページ

Delphiプログラマーの皆様へ以下ソースはDelphi4で作成しています。
他のバージョンでも恐らく動作すると思われます。
Apiを使い単にMCIデバイスを操作しているだけですので、
Delphi以外の言語(VBやC++)をお使いの方も、
概ね共通で使えると思います。
どうぞご自由にお使いください。
動作環境:Win7、VISTA、XP、Me、98、95で恐らくOKでしょう。


■mciSendString
■コラム
詳しく解説するのは億劫なので、簡単な説明ですが、十分お役に立てると思います。
ネットで検索すれば、多くの方の解説が色々出て来ますので、詳しくはそちらを参考にしてください。MCIは珍しく日本語の解説が多い手法です。

「mciSendString」とはString・・文字列を引数に指定することで、MCIデバイスに命令をするApi関数です。動画(Mpeg1/2、WMV、AVI)音楽(MP3、WMA、MIDI、WAV)ファイルを操作出来ます。
また、DVDの「VOB」ファイルも実体はMPEG2なので、MCI操作で再生だけなら可能です。
MCIデバイスを操作するには「mciSendString」とは別に「mciSendComand」もありますが、使いやすさでは文字列を渡すだけの「mciSendString」の方が一枚上手の様です。
MCIデバイスタイプには色々有りますが、type 「MPEGVideo」を指定しておけば、大方の環境で動作すると思われます。


private
{ Private 宣言 }
mciError: LongInt;
FMCIEriasName:String;
FMCIDsphandle:integer
FMCISpeed:String;

public
{ Public 宣言 }
end;

var
Form1: TForm1;

//implementationの前に以下関数をインポートする必要が有ります。

//mciSendString関数をインポートする
//mmSystemで無くDLL使うとPcha型キャスト不要

fnction mciSendString(lpstrCommand: string; lpSectorsPerCluster : string ; uReturnLength : Integer; hwndCallback : integer): integer;Stdcall;
external 'winmm.dll' Name 'mciSendStringA';

implementation

{$R *.DFM}

■MCIの色々な操作方法

●MCIデバイスオープン
//「MPEGVideo」を指定しておけば大方の環境で動作することでしょう。
//ファイル名をダブルクォーテーション「
""」で囲むと長いファイル名にも対応します。
mciError := mciSendString('open
"' + AFName +'" type MPEGVideo'+ ' alias '+FMCIEriasName, '', 0, 0) ;

//aliasを指定すると以降alias名のみで操作出来ます。
//例では変数「FMCIEriasName」にて指定しています。
//上記関数が成功するとmciErrorに「0」が戻ります。

●MCI 動画再生画面のHandle指定
//(FMCIDsphandle・・FormでもPanelでも指定出来ます。)

mciSendString('window '+FMCIEriasName+' handle ' +
IntToStr(FMCIDsphandle),'',0,0);

●MCI 動画再生領域の座標指定
//座標は数値なので、文字列に変換して渡す必要が有ります。
//DelphiではIntToStr()の様に使います。

mciSendString('put '+FMCIEriasName+' destination at '
+IntToStr(FMCIDspLeft)+' '
+IntToStr(FMCIDspTop)+' '
+IntToStr(FMCIDspWidth)+' '
+IntToStr(FMCIDspHeight),'',0,0);

●MCI 再生開始
//動画再生でfrom「0」指定をしないと、再生後直ぐ止まってしまいます。

mciError := mciSendString('play '+FMCIEriasName+' from '+IntToStr(0), '', 0, 0);

●MCI 再生停止
mciSendString('stop '+FMCIEriasName, '', 0, 0);

●MCI デバイス開放
//MCIデバイスを使用中止する時(Formの開放など)には必ずMciをCloseしなければ
//なりません。

mciSendString('close '+FMCIEriasName, '', 0, 0);

●MCI 再生スピード設定
//値「1000」が標準のスピードになります。
//2倍速は2000、1/2倍速は500です。

mciSendString('set '+FMCIEriasName+' speed '+ FMCISpeed, '', 0, 0) ;

●MCI 再生位置Position取得
const
Len: Cardinal = MAX_PATH;
var
BufPos:String;
//初期化
BufPos := '';
SetLength(BufPos, Len);
mciSendString('status '+FMCIEriasName+' Position ',BufPos, Len, 0) ;

●MCI 動画、曲の長さ取得
const
Len: Cardinal = MAX_PATH;
var
BufLen:String;
//初期化
BufLen := '';
SetLength(BufLen, Len);
mciError:= mciSendString('status '+FMCIEriasName+' Length ',BufLen, Len, 0) ;

●MCI シーク
// mciSendString('seek MCISound to '+IntToStr(APosition), '', 0, 0);
//動画再生で上記シークさせると再生が止まってしまう為
//以下回路で、一旦StopさせてからPositionを指定して再生させること

mciSendString('stop '+FMCIEriasName, '', 0, 0);
//再生位置を指定してPkayさせる
mciSendString('play '+FMCIEriasName+' from '+IntToStr(APosition), '', 0, 0);




Kobロゴ