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