by yu0627 » 2005年6月18日(土) 13:23
			
			
			> また、OSの種類の判断についてですが、将来のバージョンのWindowsではMPEGVideoがサポートされない可能性があるし、2000/XPでも、MPEGVideoのサポート状況について、Microsoftから正式な資料はないので、従来どおり、bErrでの判定を推奨します。
次世代のWindowsはロングホーンということらしいですが、今のところかなり先のことなのですので、そのことについては考えていません。また、もしMPEGVideo=MPEG1ということなら、MPEG1のコーデックは全てのWindowsに搭載されているはずですので。
> 確か、MCI_SYSINFOコマンドでデバイス対応状況を取得出来た筈です。それについて場合分けをすればよいでしょう。
MCI_SYSINFOコマンドってどのように使うのでしょうか...。
とりやえず修正してみました。
コード: 全て選択
'MCIデバイスをオープンする為の自作関数。
Function OpenMciDevice(FileName As BytePtr) As Long
	Dim bErr As DWord
	Dim dwError As DWord
	Dim buffer[255] As Byte				'MCIエラーを格納する変数
	Dim OsVerInfo As OSVERSIONINFO		'OSのバージョンを格納する構造体
	'メッセージ通知のためのウィンドウを指定
    mop.dwCallback=hMainWnd
	'OsVerInfo.dwOSVersionInfoSizeのサイズを指定
	OsVerInfo.dwOSVersionInfoSize=Len(OsVerInfo)
	'OSのバージョンを取得
	GetVersionEx(OsVerInfo)
    'もしOSがWin2KかWinXPでファイルがMIDIならMPEGVideoデバイスを指定
	If OsVerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT and Right$(FileName, 3)="mid" Then
		If OsVerInfo.dwMinorVersion=0 or OsVerInfo.dwMinorVersion=1 Then
			mop.lpstrDeviceType="MPEGVideo"
			mop.lpstrElementName=FileName
			bErr=mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT or MCI_OPEN_TYPE, mop)
			If bErr Then
				mciGetErrorString(dwError, buffer, 255)
				MessageBox(hMainWnd, buffer, "SameFolder MusicPlayer Error", MB_OK or MB_ICONERROR)
				OpenMciDevice=0
				CloseMciDevice()
				Exit Sub
			End If
		End If
    Else
		mop.lpstrElementName=FileName
		bErr=mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT, mop)
		If bErr Then
			mciGetErrorString(dwError, buffer, 255)
			MessageBox(hMainWnd, buffer, "SameFolder MusicPlayer Error", MB_OK or MB_ICONERROR)
			OpenMciDevice=0
			CloseMciDevice()
			Exit Sub
		End If
	End If
	OpenMciDevice=1
End Function
以上です。
> また、OSの種類の判断についてですが、将来のバージョンのWindowsではMPEGVideoがサポートされない可能性があるし、2000/XPでも、MPEGVideoのサポート状況について、Microsoftから正式な資料はないので、従来どおり、bErrでの判定を推奨します。
次世代のWindowsはロングホーンということらしいですが、今のところかなり先のことなのですので、そのことについては考えていません。また、もしMPEGVideo=MPEG1ということなら、MPEG1のコーデックは全てのWindowsに搭載されているはずですので。
> 確か、MCI_SYSINFOコマンドでデバイス対応状況を取得出来た筈です。それについて場合分けをすればよいでしょう。
MCI_SYSINFOコマンドってどのように使うのでしょうか...。
とりやえず修正してみました。
[code]
'MCIデバイスをオープンする為の自作関数。
Function OpenMciDevice(FileName As BytePtr) As Long
	Dim bErr As DWord
	Dim dwError As DWord
	Dim buffer[255] As Byte				'MCIエラーを格納する変数
	Dim OsVerInfo As OSVERSIONINFO		'OSのバージョンを格納する構造体
	'メッセージ通知のためのウィンドウを指定
    mop.dwCallback=hMainWnd
	'OsVerInfo.dwOSVersionInfoSizeのサイズを指定
	OsVerInfo.dwOSVersionInfoSize=Len(OsVerInfo)
	'OSのバージョンを取得
	GetVersionEx(OsVerInfo)
    'もしOSがWin2KかWinXPでファイルがMIDIならMPEGVideoデバイスを指定
	If OsVerInfo.dwPlatformId=VER_PLATFORM_WIN32_NT and Right$(FileName, 3)="mid" Then
		If OsVerInfo.dwMinorVersion=0 or OsVerInfo.dwMinorVersion=1 Then
			mop.lpstrDeviceType="MPEGVideo"
			mop.lpstrElementName=FileName
			bErr=mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT or MCI_OPEN_TYPE, mop)
			If bErr Then
				mciGetErrorString(dwError, buffer, 255)
				MessageBox(hMainWnd, buffer, "SameFolder MusicPlayer Error", MB_OK or MB_ICONERROR)
				OpenMciDevice=0
				CloseMciDevice()
				Exit Sub
			End If
		End If
    Else
		mop.lpstrElementName=FileName
		bErr=mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT, mop)
		If bErr Then
			mciGetErrorString(dwError, buffer, 255)
			MessageBox(hMainWnd, buffer, "SameFolder MusicPlayer Error", MB_OK or MB_ICONERROR)
			OpenMciDevice=0
			CloseMciDevice()
			Exit Sub
		End If
	End If
	OpenMciDevice=1
End Function
[/code]
以上です。