MCIERROR mciSendCommand( MCIDEVICEID IDDevice , UINT uMsg , DWORD fdwCommand , DWORD dwParam );IDDevice には、コマンドメッセージを受ける MCI デバイスの識別子を指定します
| 定数 | 解説 |
|---|---|
| MCI_NOTIFY | デバイスは、アクションを完了すると 親ウィンドウに MM_MCINOTIFY メッセージをポストする このメッセージは、コマンドが処理を終了した時に送られてくる |
| MCI_TEST | デジタルビデオデバイス、またはVCR デバイスに問い合わせ コマンドを実行できるかどうかを求める 実行できない場合はエラーを返します 子のフラグが指定されたコマンドは、実際の処理を行いません |
| MCI_WAIT | 要求されたアクションが終了するまで制御を返さない |
BOOL mciGetErrorString( DWORD fdwError, LPTSTR lpszErrorText , UINT cchErrorText );fdwError には、MCI API が返したエラーコードを指定します
| 定数 | 解説 |
|---|---|
| MCI_OPEN_ALIAS | 所定の構造体の lpstrAlias メンバに別名が格納されている |
| MCI_OPEN_SHAREABLE | デバイス、またはファイルを共有可能として開く このフラグを指定せずに開かれたデバイス、またはファイルは 後続する MCI_OPEN で開くことができない |
| MCI_OPEN_TYPE | 所定の構造体の lpstrDeviceType メンバに デバイスタイプの名前、またはそれを表す定数が格納されている 定数を用いる場合は MCI_OPEN_TYPE_ID フラグも指定する |
| MCI_OPEN_TYPE_ID | 所定の構造体の lpstrDeviceType メンバの下位ワードに 標準 MCI デバイスタイプ識別子が格納されている 必要に応じ、上位ワードにデバイスインデックスを格納できる |
| 複合デバイス | |
| MCI_OPEN_ELEMENT | 所定の構造体の lpstrElementName メンバに ファイル名が格納されている 自動タイプ選択を使うには、lpstrDeviceType メンバを NULL にする |
| MCI_OPEN_ELEMENT_ID | 所定の構造体の lpstrElementName メンバを ダブルワードの値として解釈する |
| アニメーションフラグ | |
| MCI_ANIM_OPEN_NOSTATIC | デバイスは、パレット内の静的システムカラーの数を 2つにしなければならない |
| MCI_ANIM_OPEN_PARENT | 親ウィンドウのハンドルを MCI_ANIM_OPEN_PARMS 構造体の hWndParent メンバで指定する |
| MCI_ANIM_OPEN_WS | ウィンドウスタイルを MCI_ANIM_OPEN_PARMS 構造体の dwStyle メンバで指定する これは、アプリケーションがウィンドウを提供しない場合 ドライバが作成し、表示するウィンドウのスタイルです |
| デジタルビデオフラグ | |
| MCI_ANIM_OPEN_NOSTATIC | デバイスは、パレット内の静的システムカラーの数を 2つにしなければならない |
| MCI_DGV_OPEN_PARENT | 親ウィンドウのハンドルを MCI_DGV_OPEN_PARMS 構造体の hWndParent メンバで指定する |
| MCI_DGV_OPEN_WS | ウィンドウスタイルを MCI_DGV_OPEN_PARMS 構造体の dwStyle メンバで指定する |
| ビデオオーバレイフラグ | |
| MCI_OVLY_OPEN_PARENT | 親ウィンドウのハンドルを MCI_OVLY_OPEN_PARMS 構造体の hWndParent メンバで指定する |
| MCI_OVLY_OPEN_WS | ウィンドウスタイルを MCI_OVLY_OPEN_PARMS 構造体の dwStyle メンバで指定する |
| ウェーブフォームオーディオフラグ | |
| MCI_WAVE_OPEN_BUFFER | MCI_WAVE_OPEN_PARMS 構造体の dwBufferSeconds メンバでバッファの長さを指定する |
typedef struct {
DWORD dwCallback;
MCIDEVICEID wDeviceID;
LPCSTR lpstrDeviceType;
LPCSTR lpstrElementName;
LPCSTR lpstrAlias;
} MCI_OPEN_PARMS;
dwCallback には、MCI_NOTIFY フラグを指定している場合| 名前 | 定数 | 解説 |
|---|---|---|
| animation | MCI_DEVTYPE_ANIMATION | アニメーションデバイス |
| cdaudio | MCI_DEVTYPE_CD_AUDIO | CD オーディオデバイス |
| dat | MCI_DEVTYPE_DAT | デジタルオーディオデバイス |
| digitalvideo | MCI_DEVTYPE_DIGITAL_VIDEO | 非 GDI ベースのウィンドウ内デジタルビデオ |
| other | MCI_DEVTYPE_OTHER | 未定義デバイス |
| overlay | MCI_DEVTYPE_OVERLAY | オーバーレイデバイス |
| scanner | MCI_DEVTYPE_SCANNER | イメージスキャナ |
| sequencer | MCI_DEVTYPE_SEQUENCER | MIDI シーケンサデバイス |
| vcr | MCI_DEVTYPE_VCR | ビデオカセットレコーダー、またはプレーヤー |
| videodisc | MCI_DEVTYPE_VIDEODISC | ビデオディスクプレーヤー |
| waveaudio | MCI_DEVTYPE_WAVEFORM_AUDIO | ウェーブフォームオーディオデバイス |
| 定数 | 解説 |
|---|---|
| MCI_FROM | 所定の構造体の dwFrom メンバに 現在の時間フォーマットでの開始位置が格納されている |
| MCI_TO | 所定の構造体の dwTo メンバに 現在の時間フォーマットでの終了位置が格納されている |
| アニメーションフラグ | |
| MCI_ANIM_PLAY_FAST | 高速再生する |
| MCI_ANIM_PLAY_REVERSE | 逆再生する |
| MCI_ANIM_PLAY_SCAN | できる限り高速で再生する |
| MCI_ANIM_PLAY_SLOW | 低速再生する |
| MCI_ANIM_PLAY_SPEED | 再生速度が MCI_ANIM_PLAY_PARMS 構造体の dwSpeed メンバに格納されている |
| デジタルビデオフラグ | |
| MCI_DGV_PLAY_REPEAT | 内容の最後に達したら、再び先頭から再生する |
| MCI_DGV_PLAY_REVERSE | 逆再生する |
| MCI_MCIAVI_PLAY_FULLSCREEN | 再生では、フルスクリーンディスプレイを使う 圧縮ファイル、または8ビットファイルの再生にのみ有効 |
| MCI_MCIAVI_PLAY_WINDOW | 再生は、デバイスインスタンスに 関連付けられているウィンドウで行う(デフォルト) |
| VCR フラグ | |
| MCI_VCR_PLAY_AT | MCI_VCR_PLAY_PARMS 構造体の dwAt メンバに、コマンド全体を開始する時刻が格納されている デバイスにキューを出した場合、MCI_CUE コマンドで指定された 開始位置に達する時刻が格納されている |
| MCI_VCR_PLAY_REVERSE | 逆再生する |
| MCI_VCR_PLAY_SCAN | できる限り高速で再生する |
| ビデオディスクフラグ | |
| MCI_VD_PLAY_FAST | 高速再生する |
| MCI_VD_PLAY_REVERSE | 逆再生する |
| MCI_VD_PLAY_SCAN | 高速スキャンする |
| MCI_VD_PLAY_SLOW | 低速再生する |
| MCI_VD_PLAY_SPEED | 再生速度が MCI_VD_PLAY_PARMS 構造体の dwSpeed メンバに格納されている |
typedef struct {
DWORD dwCallback;
DWORD dwFrom;
DWORD dwTo;
} MCI_PLAY_PARMS;
dwCallback は、メッセージを通知するウィンドウのハンドルを指定しますtypedef struct {
DWORD dwCallback;
} MCI_GENERIC_PARMS;
dwCallback には、メッセージを通知する親ウィンドウのハンドルを指定します#include <windows.h>
#define TITLE TEXT("Kitty on your lap")
PSTR strFile;
LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) {
static MCI_OPEN_PARMS mop;
int iErr;
TCHAR strErr[1024];
switch (msg) {
case WM_DESTROY:
mciSendCommand(mop.wDeviceID , MCI_CLOSE , 0 , 0);
PostQuitMessage(0);
return 0;
case WM_CREATE:
mop.dwCallback = (DWORD)hWnd;
mop.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
mop.lpstrElementName = strFile;
iErr = mciSendCommand(0 , MCI_OPEN , MCI_OPEN_TYPE |
MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT , (DWORD)&mop);
if (iErr) {
mciGetErrorString(iErr , strErr , 1024);
MessageBox(hWnd , strErr , NULL , MB_OK);
}
mciSendCommand(mop.wDeviceID , MCI_PLAY , 0 , 0);
return 0;
}
return DefWindowProc(hWnd , msg , wp , lp);
}
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
HWND hWnd;
MSG msg;
WNDCLASS winc;
strFile = lpCmdLine;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT("KITTY");
if (!RegisterClass(&winc)) return -1;
hWnd = CreateWindow(
TEXT("KITTY") , TITLE ,
WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
CW_USEDEFAULT , CW_USEDEFAULT ,
CW_USEDEFAULT , CW_USEDEFAULT ,
NULL , NULL , hInstance , NULL
);
if (hWnd == NULL) return -1;
while(GetMessage(&msg , NULL , 0 , 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
このプログラムは、コマンドライン引数で指定した WAVE ファイルを再生しますtypedef struct {
DWORD dwCallback;
MCIDEVICEID wDeviceID;
LPCSTR lpstrDeviceType;
LPCSTR lpstrElementName;
LPCSTR lpstrAlias;
DWORD dwStyle;
HWND hWndParent;
} MCI_ANIM_OPEN_PARMS;
typedef struct {
DWORD dwCallback;
UINT wDeviceID;
LPSTR lpstrDeviceType;
LPSTR lpstrElementName;
LPSTR lpstrAlias;
DWORD dwStyle;
HWND hWndParent;
} MCI_DGV_OPEN_PARMS;
typedef struct {
DWORD dwCallback;
MCIDEVICEID wDeviceID;
LPCSTR lpstrDeviceType;
LPCSTR lpstrElementName;
LPCSTR lpstrAlias;
DWORD dwStyle;
DWORD hWndParent;
} MCI_OVLY_OPEN_PARMS;
見てのとおり、これらの構造体は名前と論理的な意味が異なるだけでtypedef struct {
DWORD dwCallback;
DWORD dwFrom;
DWORD dwTo;
DWORD dwSpeed;
} MCI_ANIM_PLAY_PARMS;
typedef struct {
DWORD dwCallback;
DWORD dwFrom;
DWORD dwTo;
DWORD dwSpeed;
} MCI_VD_PLAY_PARMS;
dwCallback メンバから dwTo メンバまでは MCI_PLAY_PARMS 構造体と同じです#include <windows.h>
#define TITLE TEXT("Kitty on your lap")
PSTR strFile;
LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) {
static MCI_ANIM_OPEN_PARMS maop;
static MCI_ANIM_PLAY_PARMS mapp;
int iErr;
TCHAR strErr[1024];
switch (msg) {
case WM_DESTROY:
mciSendCommand(maop.wDeviceID , MCI_CLOSE , 0 , 0);
PostQuitMessage(0);
return 0;
case WM_CREATE:
maop.dwCallback = (DWORD)hWnd;
maop.lpstrDeviceType = NULL;
maop.lpstrElementName = strFile;
maop.dwStyle = WS_CHILD | WS_VISIBLE;
maop.hWndParent = hWnd;
iErr = mciSendCommand(0 , MCI_OPEN , MCI_OPEN_ELEMENT |
MCI_ANIM_OPEN_PARENT | MCI_ANIM_OPEN_WS , (DWORD)&maop);
if (iErr) {
mciGetErrorString(iErr , strErr , 1024);
MessageBox(hWnd , strErr , NULL , MB_OK);
}
mapp.dwCallback = (DWORD)hWnd;
mciSendCommand(maop.wDeviceID , MCI_PLAY , 0 , (DWORD)&mapp);
return 0;
}
return DefWindowProc(hWnd , msg , wp , lp);
}
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
PSTR lpCmdLine , int nCmdShow ) {
HWND hWnd;
MSG msg;
WNDCLASS winc;
strFile = lpCmdLine;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT("KITTY");
if (!RegisterClass(&winc)) return -1;
hWnd = CreateWindow(
TEXT("KITTY") , TITLE ,
WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
CW_USEDEFAULT , CW_USEDEFAULT ,
CW_USEDEFAULT , CW_USEDEFAULT ,
NULL , NULL , hInstance , NULL
);
if (hWnd == NULL) return -1;
while(GetMessage(&msg , NULL , 0 , 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
このプログラムは、コマンドライン引数で指定した動画ファイルを再生しますMCIERROR mciSendCommand( MCIDEVICEID IDDevice , UINT uMsg , DWORD fdwCommand , DWORD dwParam );MCI デバイスにコマンドメッセージを送信します
BOOL mciGetErrorString( DWORD fdwError, LPTSTR lpszErrorText , UINT cchErrorText );エラーコードをエラー文字列に変換します