www.pudn.com > gate.rar > HEAD.ASM
;___________________________________________________________________________ Include windows.inc Include user32.inc Include kernel32.inc include winmm.inc include comdlg32.inc include masm32.inc include gdi32.inc include shell32.inc include comctl32.inc includelib comctl32.lib includelib shell32.lib includelib gdi32.lib includelib masm32.lib includelib comdlg32.lib includelib winmm.lib IncludeLib user32.lib IncludeLib kernel32.lib include macro.asm ;___________________________________________________________________________ ; 全局宏 ;szText用于在过程中声明变量,类似于VB中的DIM与Delphi中的VAR szText MACRO Name, Text:VARARG LOCAL lbl jmp lbl Name db Text,0 lbl: ENDM RGB MACRO blue,green,red xor eax,eax mov al,blue shl eax,8 mov al,green shl eax,8 mov al,red ENDM ;___________________________________________________________________________ ;声明定义的过程(必需) WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD StrToNum proto :DWORD StrToDword proto :DWORD ButtProc proto :DWORD,:DWORD,:DWORD,:DWORD DragProc proto :DWORD,:DWORD,:DWORD,:DWORD StaticProc proto :DWORD,:DWORD,:DWORD,:DWORD SongEditProc proto :DWORD,:DWORD,:DWORD,:DWORD TimeProc proto :DWORD,:DWORD,:DWORD,:DWORD ; DrawButt proto :DWORD,:DWORD TrackProc proto :DWORD,:DWORD,:DWORD,:DWORD SoundProc proto :DWORD,:DWORD,:DWORD,:DWORD SoundProc1 proto :DWORD,:DWORD,:DWORD,:DWORD ControlProc proto :DWORD,:DWORD,:DWORD,:DWORD ScrollProc proto :DWORD,:DWORD,:DWORD,:DWORD ListProc proto :DWORD,:DWORD,:DWORD,:DWORD SoundConProc proto :DWORD,:DWORD,:DWORD,:DWORD SongWordProc proto :DWORD,:DWORD,:DWORD,:DWORD InputProc proto :DWORD,:DWORD,:DWORD,:DWORD EQProc proto :DWORD,:DWORD,:DWORD,:DWORD TimeEventProc proto :DWORD,:DWORD,:DWORD,:DWORD EQConProc proto :DWORD,:DWORD,:DWORD,:DWORD WaveShowProc proto :DWORD,:DWORD,:DWORD,:DWORD ;___________________________________________________________________________ ALLHEIGHT equ 274 ;高度 SOUNDWIDTH equ 65 ;宽度 ;全局变量声明 .DATA szClassName db "CoCoPlayer_Class",0 PlayCDStr db " CD%02d (歌名未知) ...",0 FileFilter db "所有支持文件(*.wav,*.mp3,*.mid)",0,"*.wav;*.mp3;*.mid",0 PathFileFilter db "所有文件(*.*)",0,"*.*",0,0 LrcFileFilter db "歌词文件(*.lrc)",0,"*.lrc",0,0 SongWordExt db ".lrc",0 NotEq db "均衡器功能尚未完成",0 HelpFile db "readme.txt",0 OpenMp3 db "open %s alias MP3",0 PlayMp3 db "play MP3 notify",0 GetMp3Length db "status MP3 length",0 SetMp3TimeFormat db "set MP3 time format ms",0 ;时间格式 PlayMp3From db "seek MP3 to %d",0 GetMp3CurrentPos db "status MP3 position",0 ;MP3当前位置 PauseMp3 db "pause MP3",0 CloseAll db "close all",0 OpenCD db "open CDAudio Alias CD",0 PlayCD db "play CD from %d notify",0 StopCD db "stop CD",0 GetCDLength db "status CD length track %d",0 ;正在播放的音轨文件长度 SetTimeFormat db "set CD time format ms",0 ;时间格式 SetTimeFormatAsTime db "set CD time format tmsf",0 GetTrack db "status CD number of tracks",0 ;总共的音轨数 CloseDoor db "set CD door Closed",0 ;关闭驱动器 OpenDoor db "set CD door Open",0 ;打开 GetCDCurrentPos db "status CD position",0 ;CD当前位置 GetCDCurrentTrackPos db "status CD position track %d",0 ;CD当前位置 PauseCD db "pause CD",0 ResumeCD db "play CD notify",0 CDAudioName db "CD %02d - (未知)",0 MP3List db "Sound List",0 temp db "S%d",0 tempnum db "%d",0 QuickFind db "[%s",0 PreReadStaticStr db "*%d",0,0 TimeShow db "%s%d:%s%d",0 PathStr db "\",0 ZeroStr db "0",0 EmptyStr db 0 EndStr db "...",0 CuPathStr db ">",0 SaveSongWord db "[%s.00]",0 SongSleep db "Sleep",0 SongPreRead db "PreRead",0 tempstrs db "*%-2d *%-2d",0 ;设置的索引 Config db "Config",0 FileName db "%s\CoCoPlayer.ini",0 RandPlay db "RandPlay",0 LoopPlay db "LoopPlay",0 CreateHotKey db "CreateHotKey",0 AlwaysTop db "AlwaysTop",0 NotReadSongWordSet db "NotReadSongWordSet",0 NotReadSongWord db "NotReadSongWord",0 PlayDoneReset db "PlayDoneReset",0 AppDirEnable db "AppDirEnable",0 ;音乐目录有效 AppDirPath db "AppDirPath",0 ;指定的目录有效 SongWordSet db "[%s:%d]",0 SongReadTime db "WordReadSleep",0 SongWordShowTime db "SongWordShowTime",0 SongWordShowModeSave db "SongWordShowMode",0 Window db "Window",0 left db "left",0 top db "top",0 CurrentTrack dd 1 SonText db "⊕","×","_","■",0 SubString db "-",0 PlayStr db ">",0 PauseStrn db "<",0 StopStrn db "#",0 tempstr db "%-2d %s",0 te db "%d %d",0 ProgMin dd FALSE .data? ofn OPENFILENAME > inf NOTIFYICONDATA> hInstance DD ? hWnd dd ? hFile dd ? CommandLine dd ? hList dd ? hList1 dd ? hList2 dd ? hTrack dd ? hSongEdit dd ? hScroll dd ? ;如果缓存过小将无法正确打开所有文件,正确的方法是使用动态内存分配,俺懒。 Buffer db MAX_PATH*30 dup(?) ReadLoad dd ? SongWordFile db 5000 dup (?) Buffer1 db MAX_PATH dup(?) MciResult db MAX_PATH dup(?) OnlyFileName db MAX_PATH dup(?) CurrFileName db MAX_PATH dup(?) CurrSongWord db 50 dup(?) SecondSongWord db 255 dup(?) CurrPlayFileName db MAX_PATH dup(?) INIPath db MAX_PATH dup(?) AppDirPathBuff db MAX_PATH dup(?) TempBuffer db 100 dup(?) StaticStr db 100 dup(?) TimeBuffer db 10 Dup(?) PauseState dd ? WindowMode dd ? ;窗口模式 hAcc dd ? SongWordShowMode dd ? hDlg dd ? ShowSleep dd ? ;歌词读取延迟 ExistFile dd ? ;存在歌词文件 Volume dd ? CurrPosition dd ? ;当前的位置 CurrCDPosition dd ? ;当前CD当前音轨的位置 TotalLength dd ? ;当前CD的总长度 TimeMode dd ? WordShowTime dd ? ;歌词显示的速度 AlwaysTopB dd ? NotReadSongWordSetB dd ? NotReadSongWordB dd ? PlayDoneResetB dd ? AppDirEnableB dd ? Menu dd ? hMenu dd ? hMenu1 dd ? Mp3State dd ? hBackBrush dd ? hBackBrush0 dd ? hBackBrush1 dd ? hBackBrush2 dd ? hListBrush dd ? hYJBrush dd ? hYJBrush0 dd ? hPen dd ? DoorMode dd ? PlayMode dd ? RecordMode dd ? hPlayBitmap dd ? hPlayBitmap0 dd ? hPauseBitmap dd ? hPauseBitmap0 dd ? hPauseBitmap1 dd ? hPauseBitmap2 dd ? hStopBitmap dd ? hStopBitmap0 dd ? hStopBitmap1 dd ? hPreBitmap dd ? hPreBitmap0 dd ? hNextBitmap dd ? hNextBitmap0 dd ? hOpenBitmap dd ? hOpenBitmap0 dd ? hExitBitmap dd ? hExitBitmap0 dd ? hExitBitmap1 dd ? hListBitmap dd ? hListBitmap0 dd ? hListBitmap1 dd ? hSongWordBitmap dd ? hSongWordBitmap0 dd ? hSongWordBitmap1 dd ? hSkipBitmap dd ? hSkipBitmap0 dd ? hSkipBitmap1 dd ? hLoopBitmap dd ? hLoopBitmap0 dd ? hLoopBitmap1 dd ? hEQBitmap dd ? hEQBitmap0 dd ? hEQBitmap1 dd ? SmallFont dd ? x dd ? y dd ? ;___________________________________________________________________________ ;代码开始 .CODE START: INVOKE FindWindow,offset szClassName,0 cmp eax,0 jnz exit invoke InitCommonControls invoke GetModuleHandle,NULL; mov hInstance, eax RGB 0,50,0 invoke CreateSolidBrush,eax mov hYJBrush,eax RGB 0,120,0 invoke CreateSolidBrush,eax mov hYJBrush0,eax RGB 40,40,40 invoke CreateSolidBrush,eax mov hBackBrush,eax RGB 80,80,80 invoke CreateSolidBrush,eax mov hBackBrush0,eax RGB 60,60,60 invoke CreateSolidBrush,eax mov hBackBrush2,eax RGB 110,120,120 invoke CreateSolidBrush,eax mov hBackBrush1,eax RGB 20,20,20 invoke CreateSolidBrush,eax mov hListBrush,eax RGB 50,0,0 invoke CreatePen,PS_SOLID,1,eax mov hPen,eax ;读取需要的图片 invoke LoadBitmap,hInstance,101 mov hPlayBitmap,eax invoke LoadBitmap,hInstance,102 mov hPauseBitmap2,eax invoke LoadBitmap,hInstance,103 mov hPauseBitmap,eax invoke LoadBitmap,hInstance,104 mov hPauseBitmap1,eax invoke LoadBitmap,hInstance,105 mov hStopBitmap,eax invoke LoadBitmap,hInstance,106 mov hStopBitmap1,eax invoke LoadBitmap,hInstance,107 mov hPreBitmap,eax invoke LoadBitmap,hInstance,109 mov hNextBitmap,eax invoke LoadBitmap,hInstance,111 mov hOpenBitmap,eax invoke LoadBitmap,hInstance,113 mov hExitBitmap,eax invoke LoadBitmap,hInstance,114 mov hExitBitmap1,eax invoke LoadBitmap,hInstance,115 mov hPlayBitmap0,eax invoke LoadBitmap,hInstance,116 mov hPauseBitmap0,eax invoke LoadBitmap,hInstance,117 mov hStopBitmap0,eax invoke LoadBitmap,hInstance,118 mov hPreBitmap0,eax invoke LoadBitmap,hInstance,119 mov hNextBitmap0,eax invoke LoadBitmap,hInstance,120 mov hOpenBitmap0,eax invoke LoadBitmap,hInstance,121 mov hExitBitmap0,eax ;播放列表按钮的图片 invoke LoadBitmap,hInstance,500 mov hListBitmap,eax invoke LoadBitmap,hInstance,501 mov hListBitmap0,eax invoke LoadBitmap,hInstance,502 mov hListBitmap1,eax ;歌词记录按钮的图片 invoke LoadBitmap,hInstance,503 mov hSongWordBitmap,eax invoke LoadBitmap,hInstance,504 mov hSongWordBitmap0,eax invoke LoadBitmap,hInstance,505 mov hSongWordBitmap1,eax ;EQ器图片 invoke LoadBitmap,hInstance,506 mov hEQBitmap,eax invoke LoadBitmap,hInstance,507 mov hEQBitmap0,eax invoke LoadBitmap,hInstance,508 mov hEQBitmap1,eax ;播放随机图片 invoke LoadBitmap,hInstance,509 mov hSkipBitmap,eax invoke LoadBitmap,hInstance,510 mov hSkipBitmap0,eax invoke LoadBitmap,hInstance,511 mov hSkipBitmap1,eax ;循环播放图片 invoke LoadBitmap,hInstance,512 mov hLoopBitmap,eax invoke LoadBitmap,hInstance,513 mov hLoopBitmap0,eax invoke LoadBitmap,hInstance,514 mov hLoopBitmap1,eax ;显示的小字体 invoke CreateFont,10,0,0,0,10,0,0,0,0,0,0,0,0,NULL mov SmallFont,eax ;INI文件路径 invoke GetAppPath,offset Buffer1 invoke lstrlen,offset Buffer1 cmp eax,3 jne @F lea eax,Buffer1 push 0 pop [eax+2] @@: lea eax,FileName invoke wsprintf,offset INIPath,eax,offset Buffer1 invoke GetCommandLine mov CommandLine,eax invoke WinMain,hInstance,0,0,SW_SHOWDEFAULT invoke DeleteObject,SmallFont invoke DestroyMenu,Menu invoke DeleteObject,hPlayBitmap invoke DeleteObject,hPlayBitmap0 invoke DeleteObject,hPauseBitmap invoke DeleteObject,hPauseBitmap0 invoke DeleteObject,hPauseBitmap1 invoke DeleteObject,hPauseBitmap2 invoke DeleteObject,hStopBitmap invoke DeleteObject,hStopBitmap0 invoke DeleteObject,hStopBitmap1 invoke DeleteObject,hPreBitmap invoke DeleteObject,hPreBitmap0 invoke DeleteObject,hNextBitmap invoke DeleteObject,hNextBitmap0 invoke DeleteObject,hOpenBitmap invoke DeleteObject,hOpenBitmap0 invoke DeleteObject,hExitBitmap invoke DeleteObject,hExitBitmap0 invoke DeleteObject,hExitBitmap1 invoke DeleteObject,hListBitmap invoke DeleteObject,hListBitmap0 invoke DeleteObject,hListBitmap1 invoke DeleteObject,hSongWordBitmap invoke DeleteObject,hSongWordBitmap0 invoke DeleteObject,hSongWordBitmap1 invoke DeleteObject,hSkipBitmap invoke DeleteObject,hSkipBitmap0 invoke DeleteObject,hSkipBitmap1 invoke DeleteObject,hLoopBitmap invoke DeleteObject,hLoopBitmap0 invoke DeleteObject,hLoopBitmap1 invoke DeleteObject,hEQBitmap invoke DeleteObject,hEQBitmap0 invoke DeleteObject,hEQBitmap1 invoke DeleteObject,hYJBrush0 invoke DeleteObject,hYJBrush invoke DeleteObject,hListBrush invoke DeleteObject,hBackBrush invoke DeleteObject,hBackBrush0 invoke DeleteObject,hBackBrush1 invoke DeleteObject,hBackBrush2 exit: push eax invoke ShowWindow,eax,SW_SHOWNORMAL pop eax invoke SetForegroundWindow,eax invoke ExitProcess,0