⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 播放mp3,avi,等多媒体文件的程序.txt

📁 用汇编语言写得一个小程序,可以播放mp3,avi等多媒体文件.源代码在txt文件里面
💻 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 + -