www.pudn.com > gate.rar > PLAY.ASM
;播放音乐文件 invoke SendMessage,hWin,WM_COMMAND,102,lParam ;在继续播放之前先关闭驱动器 invoke LoadString,hInstance,10,addr TempBuff,sizeof TempBuff invoke SetDlgItemText,hWin,1001,addr TempBuff cmp PlayDoneResetB,FALSE jz @F invoke GetDlgItem,hWnd,1007 invoke SendMessage,eax,TBM_SETPOS,TRUE,0 mov ShowSleep,0 mov WordShowTime,5 invoke GetDlgItem,hWnd,1006 invoke SendMessage,eax,TBM_SETPOS,TRUE,5 @@: .if PlayMode==TRUE ;是播放CD invoke mciSendString,offset CloseDoor,offset MciResult,sizeof MciResult,hWin mov DoorMode,FALSE lea eax,OpenCD invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin lea eax,GetTrack invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin invoke StrToDword,offset MciResult .if eax==0 ;是否是播放按钮,如果是则关闭驱动器进行读取 invoke GetDlgCtrlID,lParam cmp eax,10 jz @F invoke LoadString,hInstance,8,addr TempBuff,sizeof TempBuff invoke SetDlgItemText,hWin,1001,addr TempBuff invoke SendMessage,hWin,WM_COMMAND,201,0 ret @@: lea eax,CloseDoor invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin mov PlayMode,FALSE invoke SendMessage,hWin,WM_COMMAND,110,10001 .else invoke SendMessage,hList,LB_GETCOUNT,0,0 .if eax==0 mov PlayMode,FALSE invoke SendMessage,hWin,WM_COMMAND,110,10001 .endif .endif ;设置时间格式为毫秒 lea eax,SetTimeFormat invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin ;显示提示信息 lea eax,PlayCDStr invoke wsprintf,offset Buffer,eax,CurrentTrack invoke SetDlgItemText,hWin,1001,offset Buffer invoke lstrcpy,offset CurrPlayFileName,offset Buffer ;跳到指定音乐 lea eax,GetCDCurrentTrackPos invoke wsprintf,offset Buffer,eax,CurrentTrack invoke mciSendString,offset Buffer,offset MciResult,sizeof MciResult,hWin invoke StrToDword,offset MciResult mov CurrCDPosition,eax ;播放 lea ecx,PlayCD invoke wsprintf,offset Buffer,ecx,eax invoke mciSendString,offset Buffer,offset MciResult,sizeof MciResult,hWin lea eax,GetCDLength ;当前音乐的长度 invoke wsprintf,offset Buffer,eax,CurrentTrack invoke mciSendString,offset Buffer,offset MciResult,sizeof MciResult,hWin invoke StrToDword,offset MciResult .else ;是播放MP3 invoke SendMessage,hList,LB_GETCOUNT,0,0 .if (eax==0) ;如果为0表示没有音乐文件,则弹出打开文件对话框 invoke LoadString,hInstance,5,addr TempBuff,sizeof TempBuff invoke SetDlgItemText,hWin,1001,addr TempBuff invoke SendMessage,hWin,WM_COMMAND,99,lParam invoke SendMessage,hList,LB_SETCARETINDEX ,0,FALSE invoke SendMessage,hList,LB_GETCOUNT,0,0 cmp eax,0 jnz @F ret @@: .endif invoke SendMessage,hList1,LB_GETCURSEL,0,0 .if eax==-1 ;有错,先不要跳出,有可能是List没有获取焦点 invoke SendMessage,hList,LB_SETCARETINDEX ,0,FALSE invoke SendMessage,hList1,LB_GETCURSEL,0,0 cmp eax,-1 ;如果仍然为-1则表示列表为空 jnz @F ret @@: .endif mov TempNum,eax ;当前的索引值 invoke SendMessage,hList1,LB_GETTEXT,eax,offset Buffer1 ;是否可以读取歌词 cmp NotReadSongWordB,FALSE jz @@SKIP invoke GetLongPathName,offset Buffer1,offset Buffer,sizeof Buffer1 invoke GetFileTitle,offset Buffer,offset MciResult,sizeof MciResult invoke InString,1,offset MciResult,offset EndStr+2 cmp eax,0 jz @F lea edi,offset MciResult dec eax add edi,eax mov al,0 stosb @@: ;是否能搜索其它路径 cmp AppDirEnableB,0 jz @F invoke lstrcpy,offset CurrFileName,offset AppDirPathBuff invoke lstrcat,offset CurrFileName,offset PathStr invoke lstrcat,offset CurrFileName,offset MciResult invoke lstrcat,offset CurrFileName,offset SongWordExt invoke exist,offset CurrFileName .if eax==TRUE mov ExistFile,TRUE jz @@FindFile .endif @@: ;在播放器目录下是否有歌词 ; invoke GetAppPath,offset CurrFileName invoke lstrcat,offset CurrFileName,offset MciResult invoke lstrcat,offset CurrFileName,offset SongWordExt invoke exist,offset CurrFileName .if eax==TRUE mov ExistFile,TRUE .else mov ExistFile,FALSE ;在Mp3文件本目录下是否有歌词文件 invoke lstrcpy,offset CurrFileName,offset Buffer invoke lstrlen,offset CurrFileName lea esi,CurrFileName lea edi,CurrFileName sub eax,4 mov ecx,eax rep movsb mov al,0 stosb invoke lstrcat,offset CurrFileName,offset SongWordExt invoke exist,offset CurrFileName .if eax==TRUE mov ExistFile,TRUE .endif .endif @@FindFile: .if ExistFile==TRUE invoke CreateFile,offset CurrFileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,NULL,NULL mov hFile,eax invoke ReadFile,hFile,offset SongWordFile,sizeof SongWordFile,offset ReadLoad,NULL invoke CloseHandle,hFile ;读取歌词相关的信息 cmp NotReadSongWordSetB,0 jz @FF ;读取歌词读取Sleep invoke GetPrivateProfileInt,offset PathStr,offset SongSleep,0,offset CurrFileName .if eax>=5 && eax<=30 mov WordShowTime,eax invoke GetDlgItem,hWnd,1006 invoke SendMessage,eax,TBM_SETPOS,TRUE,WordShowTime .endif invoke GetPrivateProfileInt,offset PathStr,offset SongPreRead,0,offset CurrFileName ;cmp eax,-10 ;jl @FF ;cmp eax,10 ;jg @FF ;.if eax>=-10 && eax<=10 mov ShowSleep,eax invoke GetDlgItem,hWnd,1007 invoke SendMessage,eax,TBM_SETPOS,TRUE,ShowSleep ;.endif @FF: ;读取设置结束 .endif invoke SetDlgItemText,hSongEdit,1000,offset SongWordFile jmp @F @@SKIP: mov ExistFile,FALSE @@: invoke GetDlgItem,hWnd,1009 invoke InvalidateRect,eax,NULL,TRUE ;invoke SendMessage,hList,LB_SETCARETINDEX ,TempNum,FALSE invoke InvalidateRect,hList,NULL,TRUE invoke InvalidateRect,hScroll,NULL,TRUE invoke SendMessage,hList,LB_GETCARETINDEX,0,0 invoke SendMessage,hScroll,TBM_SETPOS,TRUE,eax invoke exist,offset Buffer1 .if eax!=TRUE jmp NotPlayExit .endif ;打开播放器 lea eax,OpenMp3 invoke wsprintf,offset Buffer,eax,offset Buffer1 invoke mciSendString,offset Buffer,offset MciResult,sizeof MciResult,hWin invoke StrToDword,offset MciResult cmp eax,0 ja @F NotPlayExit: invoke LoadString,hInstance,7,addr TempBuff,sizeof TempBuff invoke SetDlgItemText,hWin,1001,addr TempBuff invoke SendMessage,hWin,MM_MCINOTIFY,MCI_NOTIFY_SUCCESSFUL,3 ret @@: lea eax,PlayMp3 invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin ;显示提示信息 invoke SendMessage,hList,LB_GETTEXT,TempNum,offset Buffer1 invoke SetDlgItemText,hWin,1001,offset Buffer1 invoke lstrcpy,offset CurrPlayFileName,offset Buffer1 lea eax,SetMp3TimeFormat invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin ;获得它的长度并初始化TrackBar lea eax,GetMp3Length invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin invoke StrToDword,offset MciResult .endif ;=============================================================================== ;公共的部分 mov TotalLength,eax invoke SendMessage,hTrack,TBM_SETRANGEMAX,TRUE,eax invoke SendMessage,hTrack,TBM_SETPOS,TRUE,0 mov PauseState,TRUE invoke SendMessage,hWin,WM_COMMAND,101,lParam invoke EnableMenuItem,hMenu,101,MF_BYCOMMAND or MF_ENABLED invoke EnableMenuItem,hMenu,102,MF_BYCOMMAND or MF_ENABLED ;使暂停与停止按钮有效 invoke GetDlgItem,hWin,11 push eax invoke EnableWindow,eax,TRUE pop eax invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hPauseBitmap invoke GetDlgItem,hWin,12 push eax invoke EnableWindow,eax,TRUE pop eax invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hStopBitmap mov Mp3State,1 invoke SetTimer,hWin,100,1000,offset TimeEventProc