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 );エラーコードをエラー文字列に変換します