📄 播放mp3,avi,等多媒体文件的程序.txt
字号:
; #########################################################################
.386
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive
include Project.inc ; local includes for this file
; #########################################################################
.code
start:
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke GetCommandLine
mov CommandLine, eax
invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess,eax
; #########################################################################
WinMain proc hInst :DWORD,
hPrevInst :DWORD,
CmdLine :DWORD,
CmdShow :DWORD
;====================
; Put LOCALs on stack
;====================
LOCAL wc :WNDCLASSEX
LOCAL msg :MSG
;==================================================
; Fill WNDCLASSEX structure with required variables
;==================================================
invoke LoadIcon,hInst,500 ; icon ID
mov hIcon, eax
szText szClassName,"Project_Class"
mov wc.cbSize, sizeof WNDCLASSEX
mov wc.style, CS_HREDRAW or CS_VREDRAW \
or CS_BYTEALIGNWINDOW
mov wc.lpfnWndProc, offset WndProc;when the windows change,ok It wi
ll call the winproc program
mov wc.cbClsExtra, NULL
mov wc.cbWndExtra, NULL
m2m wc.hInstance, hInst ;mov the hInst to wc.hInstance
mov wc.hbrBackground, COLOR_BTNFACE+1
mov wc.lpszMenuName, NULL
mov wc.lpszClassName, offset szClassName
m2m wc.hIcon, hIcon
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor, eax
m2m wc.hIconSm, hIcon
invoke RegisterClassEx, ADDR wc
invoke CreateWindowEx,WS_EX_LEFT,
ADDR szClassName,
ADDR szDisplayName,
WS_OVERLAPPEDWINDOW,
200,200,200,100,
NULL,NULL,
hInst,NULL
mov hWnd,eax
invoke LoadMenu,hInst,600 ; menu ID
invoke SetMenu,hWnd,eax
invoke ShowWindow,hWnd,SW_SHOWNORMAL
invoke UpdateWindow,hWnd
;===================================
; Loop until PostQuitMessage is sent
;===================================
;Message loop
StartLoop:
invoke GetMessage,ADDR msg,NULL,0,0
cmp eax, 0
je ExitLoop
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
jmp StartLoop
ExitLoop:
return msg.wParam
WinMain endp
; #########################################################################
WndProc proc hWin :DWORD,
uMsg :DWORD,
wParam :DWORD,
lParam :DWORD
LOCAL var :DWORD
LOCAL caW :DWORD
LOCAL caH :DWORD
LOCAL Rct :RECT
LOCAL hDC :DWORD
LOCAL Ps :PAINTSTRUCT
LOCAL buffer1[128]:BYTE ; these are two spare buffers
LOCAL buffer2[128]:BYTE ; for text manipulation etc..
.if uMsg == WM_COMMAND
;======== menu commands ========
.if wParam == 1010
invoke SendMessage,hWin,WM_SYSCOMMAND,SC_CLOSE,NULL
.elseif wParam==1000
call _GetFileName
.elseif wParam==1020 ;play the mp3 file
xor ebx,ebx
mov ebx,MCI_PLAY
call _OpenMciDevice
call _Mp3
.elseif wParam==1030 ;pause the mp3 play
xor ebx,ebx
mov ebx,MCI_PAUSE
call _Mp3
.elseif wParam==1040 ;resume the mp3 play
xor ebx,ebx
mov ebx,MCI_RESUME
call _Mp3
.elseif wParam==1050 ;stop the mp3 play
xor ebx,ebx
mov ebx,MCI_STOP
call _Mp3
.elseif wParam == 1910
szText AMsg,"Prostart Pure Assembler Template",13,10,\
"Copyright ?Prostart 1999"
invoke ShellAbout,hWin,ADDR szDisplayName,ADDR AMsg,hIcon
.endif
;====== end menu commands ======
.elseif uMsg == WM_CREATE
invoke IconButton,hWin,10,0,150,26,900
;mov hBtn1, eax
.elseif uMsg == WM_SIZE
.elseif uMsg == WM_PAINT
invoke BeginPaint,hWin,ADDR Ps
mov hDC, eax
invoke Paint_Proc,hWin,hDC
invoke EndPaint,hWin,ADDR Ps
return 0
.elseif uMsg == WM_CLOSE
.elseif uMsg == WM_DESTROY
invoke PostQuitMessage,NULL
return 0
.endif
invoke DefWindowProc,hWin,uMsg,wParam,lParam
ret
WndProc endp
; ########################################################################
; #########################################################################
Paint_Proc proc hWin:DWORD, hDC:DWORD
LOCAL btn_hi :DWORD
LOCAL btn_lo :DWORD
LOCAL Rct :RECT
invoke GetSysColor,COLOR_BTNHIGHLIGHT
mov btn_hi, eax
invoke GetSysColor,COLOR_BTNSHADOW
mov btn_lo, eax
return 0
Paint_Proc endp
;取得
_GetFileName proc
mov stOpenFileName.Flags,OFN_PATHMUSTEXIST or OFN_FILEMUSTEX
IST
mov stOpenFileName.lStructSize,SIZEOF stOpenFileName
mov eax,hWinMain
mov stOpenFileName.hWndOwner,eax
mov stOpenFileName.lpstrFilter,offset szFilter ;扩展名
mov stOpenFileName.lpstrFile,offset szBuffer ;文件名
缓冲
mov stOpenFileName.nMaxFile,255 ;文件名
缓冲长度
mov stOpenFileName.lpstrInitialDir,0
mov stOpenFileName.lpstrTitle,offset szTitleSave
mov stOpenFileName.lpstrDefExt,offset szExt
invoke GetOpenFileName,offset stOpenFileName
.if eax == FALSE
ret
.endif
invoke MessageBox,NULL,addr str1,addr str2,MB_OK
; invoke SetDlgItemText,hWinMain,ID_FILE,addr szBuffer
; call _StopPlayMP3
ret
_GetFileName endp
; ########################################################################
_OpenMciDevice proc
local @stMCIOpen:MCI_OPEN_PARMS ;
mov @stMCIOpen.lpstrDeviceType,offset szDevice
mov @stMCIOpen.lpstrElementName,offset szBuffer
invoke mciSendCommand,0,MCI_OPEN,MCI_OPEN_TYPE or MCI_OPEN_ELEM
ENT,addr @s
tMCIOpen
mov eax,@stMCIOpen.wDeviceID
ret
_OpenMciDevice endp
; ########################################################################
_Mp3 proc
local @stMCIPlay:MCI_GENERIC_PARMS
mov hDevice,eax
mov eax,hWinMain
mov @stMCIPlay.dwCallback,eax
invoke mciSendCommand,hDevice,ebx,MCI_NOTIFY,addr @stMCIPlay ;
EBX THE CONTROL MESSAGE
.if eax == 0
;invoke SetDlgItemText,hWinMain,IDOK,offset szStop
mov dwFlag,1
.else
invoke MessageBox,hWinMain,addr szError,addr szCaption,
MB_OK
.endif
xor ebx,ebx
ret
_Mp3 endp
; ########################################################################
IconButton proc hParent :DWORD,a:DWORD,b:DWORD,wd:DWORD,ht:DWORD,ID:DWORD
; IconButton PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
; invoke IconButton,hWnd,20,20,100,25,500
szText icoBtnCl,"COMBOBOX"
szText blnk1,0
invoke CreateWindowEx,0,
ADDR icoBtnCl,ADDR blnk1,
WS_CHILD or WS_VISIBLE or CBS_DROPDOWNLIST or CBS_SIMPLE or WS_
SYSMENU,
a,b,wd,ht,hParent,ID,
hInstance,NULL
ret
IconButton endp
;
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -