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