*コード変更しました2012/12/12/20:07
char buf[1000];
DWORD dwFlags=0;
MCI_OPEN_PARMS mop;
dwFlags|=MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID;
mop.lpstrDeviceType="Sequencer";
dwFlags|=MCI_OPEN_ELEMENT;
mop.lpstrElementName="test.Mid";
dwFlags|=MCI_WAIT;
MCIERROR ret=mciSendCommand(NULL,MCI_OPEN,dwFlags,(DWORD)&mop);
if(ret==0){
mciSendCommand(mop.wDeviceID,MCI_PLAY,0,0);
}else{
mciGetErrorString(ret,buf,sizeof(buf));
MessageBox::Show(gcnew String(buf),"error");
}
*追記:lpstrDeviceTypeにMCI_DEVTYPE_SEQUENCER入れたら再生できたけど文字列指定だと何故か「指定されたファイル名拡張子からデバイスの種類を判断できません。」がでる。
ちなみにデフォルト再生はWindows Media
*追記:レジストエディターのHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensionsでは、ちゃんと名前のMidとデータのSequencerが入ってます。
*自己解決:デバイスID使わないのに何故必要なのか?と思ってのMCI_OPEN_TYPE_ID;を消したら上手く文字列指定で再生できました!