> また、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
以上です。