コード:
//文字列配列
static array<System::String^>^ files;
static array<System::String^>^ iType={".3g2",".3gp",".3gp2",".3gpp",".aac",
".adt",".adts",".aif",".aifc",".aiff",
".asf",".asx",".au",".dat",".ivf",
".m1v",".m2t",".m2ts",".m2v",".m3u",
".m4a",".m4v",".mod",".mov",".mp2",
".mp2v",".mp3",".mp4",".mp4v",".mpa",
".mpe",".mpeg",".mpg",".mpv2",".mts",
".snd",".ts",".tts",".wax",".wm",
".wma",".wmv",".wmx",".wpl",".wvx",
".avi",".cda",".wav",".mid",".midi",
".rmi"
};
//ファイルドラッグアンドドロップ
private: System::Void Form1_DragDrop(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) {
//if
if(e ->Data ->GetDataPresent(DataFormats::FileDrop)){//もしファイルドロップされた場合
//文字列配列
files=array<System::String^>(e->Data->GetData(DataFormats::FileDrop , false));
//if
if(setPlayer((char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(findType(0)).ToPointer(),
(char*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(files[0]).ToPointer())==true){
//playMusicメソッド
playMusic();//playMusicメソッド呼び出し
}
}//if終了
}//メソッド終了
//playMusicメソッド
private: void playMusic(){
//char配列
char buf[1000];
//MCI
MCIERROR ret=mciSendCommand(mop.wDeviceID,MCI_PLAY,0,0);//MCIコマンド
//if
if(ret){//もしエラーがある場合
//エラー内容取得
mciGetErrorString(ret,buf,sizeof(buf));
//エラー内容をメッセージボックスに表示
MessageBox::Show(gcnew String(buf),"error");
}//if終了
}//playMusicメソッド終了
//setPlayerメソッド
private: bool setPlayer(char* type,char* file){
//char配列
char buf[1000];
//DWORD
DWORD dwFlags=0;
//MCIのオープンタイプ設定
dwFlags|=MCI_OPEN_TYPE;
//タイプ名記入
mop.lpstrDeviceType=type;
//MCIのオープンエレメント設定
dwFlags|=MCI_OPEN_ELEMENT;
//ファイル先記入
mop.lpstrElementName=file;
//MCIのウェイト設定
dwFlags|=MCI_WAIT;
//MCIコマンド
MCIERROR ret=mciSendCommand(NULL,MCI_OPEN,dwFlags,(DWORD)&mop);
//エラー確認
//if
if(ret==0){//もしエラー無ければ
//return
return true;
//if
}else{//もしエラー有れば
//エラー内容取得
mciGetErrorString(ret,buf,sizeof(buf));
//エラー内容をメッセージボックスに表示
MessageBox::Show(gcnew String(buf),"error");
//return
return false;
}//if終了
}//setPlayerメソッド終了
//findTypeメソッド
private: System::String^ findType(int x){
//int
int mType;
//文字列
String^ sType;
//for
for(int i=0;i<iType->Length;i++){
//if
if(files[x]->Substring(files[x]->Length-4)->ToLower()==iType[i]){//ファイル拡張子見つけた場合
//int
mType=i;//i数字をmTypeにコピー
}//if終了
}//for終了
//if
if(mType<45){
//文字列
sType="MPEGVideo";//MPEGVideoをsTypeに入れる
//if
}else if(mType==45){
//文字列
sType="avivideo";//avivideoをsTypeに入れる
//if
}else if(mType==46){
//文字列
sType="CDAudio";//CDAudioをsTypeに入れる
//if
}else if(mType==47){
//文字列
sType="WaveAudio";//WaveAudioをsTypeに入れる
//if
}else{
//文字列
sType="Sequencer";//SequencerをsTypeに入れる
}//if終了
return sType;
}//findTypeメソッド終了