www.pudn.com > gate.rar > Command.asm
mov eax,wParam shr eax,16 movzx ecx,ax mov eax,wParam and eax,0FFFFh .if (eax==97) invoke SendMessage,hWin,WM_COMMAND,99,242 .elseif (eax==95) .if PlayMode==TRUE invoke LoadString,hInstance,9,addr TempBuff,sizeof TempBuff invoke SetDlgItemText,hWin,1001,addr TempBuff .else invoke SendMessage,hWin,WM_COMMAND,99,0 .endif .elseif (eax==99) cmp lParam,0 jz @SkipTest ;如果是添加新的东东则跳过播放模式检测 .if PlayMode==TRUE mov CurrentTrack,1 invoke SendMessage,hWin,WM_COMMAND,102,lParam ;在继续播放之前先关闭驱动器 lea eax,OpenCD invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin .if DoorMode==FALSE lea eax,OpenDoor invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin mov DoorMode,TRUE .else lea eax,CloseDoor invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin mov DoorMode,FALSE invoke SendMessage,hWin,WM_COMMAND,100,0 ret .endif invoke SendMessage,hWin,WM_COMMAND,102,lParam ;在继续播放之前先关闭驱动器 ret .endif ;--------------------------------------- @SkipTest: ;浏览文件,在每次打开打开文件对话框时清除保存的文件路径缓存 lea edi,Buffer mov ecx,sizeof Buffer mov al,0 rep stosb ;打开文件 lea eax,FileFilter mov ofn.lpstrFilter,eax invoke LoadString,hInstance,11,offset TempBuffer,sizeof TempBuffer mov ofn.lpstrTitle,offset TempBuffer mov ofn.lpstrFile,offset Buffer mov ofn.nMaxFile,sizeof Buffer invoke GetOpenFileName,offset ofn .if (eax!=0) .if (lParam!=0) invoke SendMessage,hWin,WM_COMMAND,201,0 mov TempNum,0 .else invoke SendMessage,hList1,LB_GETCOUNT,0,0 mov TempNum,eax .endif ;把选择的文件加入到播放列表中。 invoke lstrlen,offset Buffer movsx ecx,ofn.nFileOffset cmp eax,ecx jae OneOnly ;如果第一个文件在路径内表示只选择了一个文件,跳过 ;准备开始循环读取所有选择的文件 lea esi,Buffer movsx eax,ofn.nFileOffset add esi,eax ;把指针移到第一个文件开始处 lea edi,Buffer1 ;GO! @@: lodsb stosb cmp al,0 jnz @B ;如果不为0则表示第一个文件尚未读出 ;处理后增加到列表中 invoke wsprintf,offset TempBuffer,offset tempstr,TempNum,offset Buffer1 invoke SendMessage,hList,LB_ADDSTRING,0,offset TempBuffer invoke lstrcpy,offset MciResult,offset Buffer invoke lstrlen,offset Buffer cmp eax,3 je NotFirst invoke lstrcat,offset MciResult,offset PathStr NotFirst: invoke lstrcat,offset MciResult,offset Buffer1 invoke GetShortPathName,offset MciResult,offset Buffer1,sizeof Buffer1 invoke SendMessage,hList1,LB_ADDSTRING,0,offset Buffer1 mov ecx,esi mov al,[ecx+1] cmp al,0 jz Done ;如果0后仍然为0则表示已经结束 lea edi,Buffer1 inc TempNum jmp @B OneOnly: ;只选择了一个文件 invoke GetFileTitle,offset Buffer,offset Buffer1,MAX_PATH invoke wsprintf,offset TempBuffer,offset tempstr,TempNum,offset Buffer1 invoke SendMessage,hList,LB_ADDSTRING,0,offset TempBuffer invoke GetShortPathName,offset Buffer,offset Buffer1,sizeof Buffer1 invoke SendMessage,hList1,LB_ADDSTRING,0,offset Buffer1 Done: invoke SendMessage,hList1,LB_GETCOUNT,0,0 sub eax,1 invoke SendMessage,hScroll,TBM_SETRANGEMAX,TRUE,eax cmp lParam,0 jz @F invoke SendMessage,hWnd,WM_COMMAND,100,0 @@: .endif invoke LoadString,hInstance,11,addr TempBuff,sizeof TempBuff invoke SetDlgItemText,hWin,1001,addr TempBuff .elseif (eax==100) include play.asm .elseif (eax==101) ;暂停、继续 mov eax,PauseState .if (eax==FALSE) .if Mp3State==0 ret .endif invoke KillTimer,hWin,100 .if PlayMode==TRUE ;是播放CD lea eax,PauseCD invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin .else lea eax,PauseMp3 invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin .endif mov PauseState,TRUE invoke LoadString,hInstance,4,addr TempBuff,sizeof TempBuff invoke ModifyMenu,hMenu,101,MF_BYCOMMAND,101,addr TempBuff invoke GetDlgItem,hWin,11 invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hPauseBitmap2 mov Mp3State,2 invoke LoadString,hInstance,3,addr TempBuff,sizeof TempBuff invoke SetDlgItemText,hWin,1001,addr TempBuff .else invoke SetTimer,hWin,100,1000,offset TimeEventProc .if PlayMode==TRUE lea eax,ResumeCD invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin .else lea eax,PlayMp3 invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin .endif mov PauseState,FALSE invoke LoadString,hInstance,2,addr TempBuff,sizeof TempBuff invoke ModifyMenu,hMenu,101,MF_BYCOMMAND,101,addr TempBuff invoke GetDlgItem,hWin,11 invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hPauseBitmap .if PlayMode==TRUE lea eax,PlayCDStr invoke wsprintf,offset Buffer,eax,CurrentTrack invoke SetDlgItemText,hWin,1001,offset Buffer .else invoke SetDlgItemText,hWin,1001,offset Buffer1 .endif mov Mp3State,1 .endif invoke GetDlgItem,hWnd,9 invoke InvalidateRect,eax,NULL,TRUE .elseif (eax==102) .if Mp3State==0 ret .endif invoke KillTimer,hWin,100 ;清除全局缓存 lea edi,TimeBuffer mov ecx,sizeof TimeBuffer mov al,0 rep stosb lea edi,TempBuffer mov ecx,sizeof TempBuffer mov al,0 rep stosb lea edi,SecondSongWord mov ecx,sizeof SecondSongWord mov al,0 rep stosb lea edi,SongWordFile mov ecx,sizeof SongWordFile mov al,0 rep stosb lea edi,CurrFileName mov ecx,sizeof CurrFileName mov al,0 rep stosb invoke wsprintf,offset TimeBuffer,offset TimeShow,offset ZeroStr,0,offset ZeroStr,0 ;停止播放 .if PlayMode==TRUE lea eax,StopCD invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin .endif lea eax,CloseAll invoke mciSendString,eax,offset MciResult,sizeof MciResult,hWin mov PauseState,TRUE invoke SendMessage,hWin,WM_COMMAND,101,lParam invoke LoadString,hInstance,1,addr TempBuff,sizeof TempBuff invoke SetDlgItemText,hWin,1001,addr TempBuff invoke GetDlgItem,hWin,11 push eax invoke EnableWindow,eax,FALSE pop eax invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hPauseBitmap1 invoke GetDlgItem,hWin,12 push eax invoke EnableWindow,eax,FALSE pop eax invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hStopBitmap1 invoke EnableMenuItem,hMenu,101,MF_BYCOMMAND or MF_GRAYED invoke EnableMenuItem,hMenu,102,MF_BYCOMMAND or MF_GRAYED invoke SendMessage,hTrack,TBM_SETPOS,TRUE,0 mov Mp3State,0 mov ExistFile,FALSE invoke GetDlgItem,hWnd,1009 invoke InvalidateRect,eax,NULL,TRUE invoke SendMessage,hTrack,TBM_SETRANGEMAX,TRUE,0 invoke GetDlgItem,hWnd,9 invoke InvalidateRect,eax,NULL,TRUE .elseif (eax==103) ;是否随机播放 invoke GetMenuState,hMenu,103,MF_BYCOMMAND .if eax==MF_CHECKED invoke CheckMenuItem,hMenu,103,MF_BYCOMMAND or MF_UNCHECKED invoke GetDlgItem,hWnd,18 invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hLoopBitmap .else invoke CheckMenuItem,hMenu,103,MF_BYCOMMAND or MF_CHECKED invoke GetDlgItem,hWnd,18 invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hLoopBitmap1 .endif .elseif (eax==107) invoke GetMenuState,hMenu,107,MF_BYCOMMAND .if eax==MF_CHECKED invoke CheckMenuItem,hMenu,107,MF_BYCOMMAND or MF_UNCHECKED invoke GetDlgItem,hWnd,17 invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hSkipBitmap .else invoke GetDlgItem,hWnd,17 invoke SendMessage,eax,STM_SETIMAGE,IMAGE_BITMAP,hSkipBitmap1 invoke CheckMenuItem,hMenu,107,MF_BYCOMMAND or MF_CHECKED .endif .elseif (eax==108) invoke SendMessage,hTrack,TBM_GETPOS,0,0 sub eax,5000 invoke SendMessage,hTrack,TBM_SETPOS,TRUE,eax invoke SendMessage,hTrack,WM_LBUTTONUP,0,0 .elseif (eax==109) invoke SendMessage,hTrack,TBM_GETPOS,0,0 add eax,5000 invoke SendMessage,hTrack,TBM_SETPOS,TRUE,eax invoke SendMessage,hTrack,WM_LBUTTONUP,0,0 .elseif (eax==104) invoke SendMessage,hWin,MM_MCINOTIFY,MCI_NOTIFY_SUCCESSFUL,0 .elseif (eax==105) invoke SendMessage,hWin,MM_MCINOTIFY,MCI_NOTIFY_SUCCESSFUL,1 .elseif (eax==200) ;删除选择的项目 ;初始化 invoke SendMessage,hList,LB_GETSELCOUNT,0,0 mov TempNum,eax mov Num,0 mov Index,-1 ;开始 @@: invoke SendMessage,hList,LB_GETSELITEMS,1,addr Index ;一次读取一条 invoke SendMessage,hList,LB_DELETESTRING,Index,0 invoke SendMessage,hList1,LB_DELETESTRING,Index,0 inc Num mov eax,Num cmp eax,TempNum jl @B ;如果小于继续删除下一条 invoke SendMessage,hList1,LB_GETCOUNT,0,0 sub eax,1 invoke SendMessage,hScroll,TBM_SETRANGEMAX,TRUE,eax .elseif (eax==201) ;全部删除 invoke SendMessage,hList,LB_RESETCONTENT,0,0 invoke SendMessage,hList1,LB_RESETCONTENT,0,0 invoke SendMessage,hScroll,TBM_SETRANGEMAX,TRUE,0 .elseif (eax==300) ;关于 mov eax,offset AboutDlgProc invoke DialogBoxParam,hInstance,103,hWnd,eax,0 .elseif (eax==301) ;设置 mov eax,offset SettingDlgProc invoke DialogBoxParam,hInstance,106,hWnd,eax,0 .elseif (eax==106) ;退出 invoke SendMessage,hWin,WM_CLOSE,0,0 .elseif (eax==5 && ecx==LBN_DBLCLK) ;如果在列表框上双击 invoke SendMessage,hList,LB_GETCURSEL,0,0 invoke SendMessage,hList1,LB_SETCARETINDEX,eax,TRUE .if PlayMode==TRUE invoke SendMessage,hList,LB_GETCURSEL,0,0 add eax,1 mov CurrentTrack,eax .endif invoke SendMessage,hWin,WM_COMMAND,100,0 .elseif (eax==202) ;重新载入列表 cmp PlayMode,TRUE jnz @F ret @@: invoke SendMessage,hWin,WM_COMMAND,201,0 push 1111 push hWin call LoadList .elseif (eax==110) invoke SendMessage,hWin,WM_COMMAND,102,0 .if PlayMode==TRUE mov PlayMode,FALSE invoke SendMessage,hWin,WM_COMMAND,202,0 invoke GetDlgItem,hWin,22 INVOKE EnableWindow,eax,TRUE .else invoke GetDlgItem,hWin,22 INVOKE EnableWindow,eax,FALSE mov PlayMode,TRUE invoke SendMessage,hWin,WM_COMMAND,201,0 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 cmp eax,0 jz NotCD mov TempNum,eax invoke SendMessage,hScroll,TBM_SETRANGEMAX,TRUE,eax mov Index,1 @@: invoke wsprintf,offset Buffer,offset CDAudioName,Index invoke SendMessage,hList,LB_ADDSTRING,0,offset Buffer inc Index mov eax,Index cmp eax,TempNum jbe @B NotCD: cmp lParam,10001 jnz @F ret @@: .endif invoke SendMessage,hWin,WM_COMMAND,102,0 .endif