赞助论坛
  • 4044阅读
  • 0回复

播放MP3,AVI,等多媒体文件的源程序 [复制链接]

楼层直达
张淼  

发帖
670
精华
0
金币
757
威望
13
贡献
35
好评
24
注册
2010-05-06
楼主    张淼 发表于: 2010-10-14 20:59:05 
播放MP3,AVI,等多媒体文件的源程序
; #########################################################################     .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   --