by M.S. » 2005年9月04日(日) 14:55
Toshi さんが教えて下さった「mciSendString」をやってみたのですが、どうやってもうまくいきません。
コードを貼り付けておきますので、「何処がいけないか」もしくは「どうすればよくなる」などを教えていただければ幸いです。
コード: 全て選択
Sub MainWnd_CDPlayButton_Click()
Dim dwError As DWord
Dim buffer[255] As Byte
Dim msep As MCI_SET_PARMS
Dim mpp As MCI_PLAY_PARMS
Dim dwParms As DWord
If mop.wDeviceID=0 Then
'-----------------------------
' 新たにMCIデバイスをオープン
'-----------------------------
'リストボックスで選択されているトラックを取得
TrackNum=SendDlgItemMessage(hMainWnd,TrackList,LB_GETCURSEL,0,0)
If TrackNum=LB_ERR Then Exit Sub
TrackNum=TrackNum+1 '(0,1,2...)を、(1,2,3...)に修正
'MCIデバイスをオープン
If OpenMciDevice()=0 Then Exit Sub
'--------------------------
' トラックバーの範囲を設定
'--------------------------
'時刻形式にMSFを指定
msep.dwTimeFormat = MCI_FORMAT_MSF
mciSendCommand(mop.wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,msep)
'サウンドの長さを取得
Dim msp As MCI_STATUS_PARMS
msp.dwItem=MCI_STATUS_LENGTH
msp.dwTrack=TrackNum
mciSendCommand(mop.wDeviceID,MCI_STATUS,MCI_STATUS_ITEM or MCI_TRACK,msp)
'トラックバーの範囲を設定
Dim nMax As Integer
Dim hTrackBar As DWord
hTrackBar=GetDlgItem(hMainWnd,TrackBar1)
nMax=(MCI_MSF_MINUTE(msp.dwReturn)*60 + MCI_MSF_SECOND(msp.dwReturn)) * 10
SendMessage(hTrackBar,TBM_SETRANGE,0,MAKELONG(0,nMax))
SendMessage(hTrackBar,TBM_SETPOS,1,0)
'------------
' 演奏を開始
'------------
'時刻形式にTMSFを指定
msep.dwTimeFormat = MCI_FORMAT_TMSF
mciSendCommand(mop.wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,msep)
'mciSendString----------------------------------------------
dim ReturnString[1024] As Byte
mciSendString("open cdaudio alias cda",ReturnString,1024,NULL)
mciSendString("set cda time format tmsf",ReturnString,1024,NULL)
mciSendString("play cda from 1 to 99",ReturnString,1024,NULL)
'-----------------------------------------------------------
dwError=mciSendCommand(mop.wDeviceID,MCI_PLAY,dwParms,mpp)
Else
'-------------------------------------------
' 演奏を再開(一時停止からの復帰、シーク時)
'-------------------------------------------
'再生
mpp.dwCallback=hMainWnd
If TrackNum=SendDlgItemMessage(hMainWnd,TrackList,LB_GETCOUNT,0,0) Then
dwParms=MCI_NOTIFY
Else
mpp.dwTo=MCI_MAKE_TMSF(TrackNum+1,0,0,0)
dwParms=MCI_TO or MCI_NOTIFY
End If
dwError=mciSendCommand(mop.wDeviceID,MCI_PLAY,dwParms,mpp)
'mciSendString(終了)---------------------------------------
mciSendString("stop cda",ReturnString,1024,NULL)
mciSendString("close cda",ReturnString,1024,NULL)
'----------------------------------------------------------
End If
If dwError Then
'MCI_PLAYでエラーが出たとき
mciGetErrorString(dwError,buffer,255)
MessageBox(hMainWnd,buffer,"Missed to play of device.",MB_OK)
'MCIデバイスを閉じる
CloseMciDevice()
Exit Sub
End If
'再生ボタンを無効化し、一時停止・停止ボタンを有効化する
EnableWindow(GetDlgItem(hMainWnd,CDPlayButton),0)
EnableWindow(GetDlgItem(hMainWnd,CDPauseButton),1)
EnableWindow(GetDlgItem(hMainWnd,CDStopButton),1)
'タイマー処理を開始する
SetTimer(hMainWnd,ID_TIMER,100,0)
End Sub
お願いします。
Toshi さんが教えて下さった「mciSendString」をやってみたのですが、どうやってもうまくいきません。
コードを貼り付けておきますので、「何処がいけないか」もしくは「どうすればよくなる」などを教えていただければ幸いです。
[code]
Sub MainWnd_CDPlayButton_Click()
Dim dwError As DWord
Dim buffer[255] As Byte
Dim msep As MCI_SET_PARMS
Dim mpp As MCI_PLAY_PARMS
Dim dwParms As DWord
If mop.wDeviceID=0 Then
'-----------------------------
' 新たにMCIデバイスをオープン
'-----------------------------
'リストボックスで選択されているトラックを取得
TrackNum=SendDlgItemMessage(hMainWnd,TrackList,LB_GETCURSEL,0,0)
If TrackNum=LB_ERR Then Exit Sub
TrackNum=TrackNum+1 '(0,1,2...)を、(1,2,3...)に修正
'MCIデバイスをオープン
If OpenMciDevice()=0 Then Exit Sub
'--------------------------
' トラックバーの範囲を設定
'--------------------------
'時刻形式にMSFを指定
msep.dwTimeFormat = MCI_FORMAT_MSF
mciSendCommand(mop.wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,msep)
'サウンドの長さを取得
Dim msp As MCI_STATUS_PARMS
msp.dwItem=MCI_STATUS_LENGTH
msp.dwTrack=TrackNum
mciSendCommand(mop.wDeviceID,MCI_STATUS,MCI_STATUS_ITEM or MCI_TRACK,msp)
'トラックバーの範囲を設定
Dim nMax As Integer
Dim hTrackBar As DWord
hTrackBar=GetDlgItem(hMainWnd,TrackBar1)
nMax=(MCI_MSF_MINUTE(msp.dwReturn)*60 + MCI_MSF_SECOND(msp.dwReturn)) * 10
SendMessage(hTrackBar,TBM_SETRANGE,0,MAKELONG(0,nMax))
SendMessage(hTrackBar,TBM_SETPOS,1,0)
'------------
' 演奏を開始
'------------
'時刻形式にTMSFを指定
msep.dwTimeFormat = MCI_FORMAT_TMSF
mciSendCommand(mop.wDeviceID,MCI_SET,MCI_SET_TIME_FORMAT,msep)
'mciSendString----------------------------------------------
dim ReturnString[1024] As Byte
mciSendString("open cdaudio alias cda",ReturnString,1024,NULL)
mciSendString("set cda time format tmsf",ReturnString,1024,NULL)
mciSendString("play cda from 1 to 99",ReturnString,1024,NULL)
'-----------------------------------------------------------
dwError=mciSendCommand(mop.wDeviceID,MCI_PLAY,dwParms,mpp)
Else
'-------------------------------------------
' 演奏を再開(一時停止からの復帰、シーク時)
'-------------------------------------------
'再生
mpp.dwCallback=hMainWnd
If TrackNum=SendDlgItemMessage(hMainWnd,TrackList,LB_GETCOUNT,0,0) Then
dwParms=MCI_NOTIFY
Else
mpp.dwTo=MCI_MAKE_TMSF(TrackNum+1,0,0,0)
dwParms=MCI_TO or MCI_NOTIFY
End If
dwError=mciSendCommand(mop.wDeviceID,MCI_PLAY,dwParms,mpp)
'mciSendString(終了)---------------------------------------
mciSendString("stop cda",ReturnString,1024,NULL)
mciSendString("close cda",ReturnString,1024,NULL)
'----------------------------------------------------------
End If
If dwError Then
'MCI_PLAYでエラーが出たとき
mciGetErrorString(dwError,buffer,255)
MessageBox(hMainWnd,buffer,"Missed to play of device.",MB_OK)
'MCIデバイスを閉じる
CloseMciDevice()
Exit Sub
End If
'再生ボタンを無効化し、一時停止・停止ボタンを有効化する
EnableWindow(GetDlgItem(hMainWnd,CDPlayButton),0)
EnableWindow(GetDlgItem(hMainWnd,CDPauseButton),1)
EnableWindow(GetDlgItem(hMainWnd,CDStopButton),1)
'タイマー処理を開始する
SetTimer(hMainWnd,ID_TIMER,100,0)
End Sub
[/code]
お願いします。