C语言网

 找回密码
 加入社区!

QQ登录

只需一步,快速开始

查看: 3091|回复: 28

共享我做的汇编Mp3 播放测试程序   [复制链接]

Rank: 4

主题
7
帖子
116
C币
244 枚
在线时间
101 小时
发表于 2010-7-29 09:39:50 |显示全部楼层
本帖最后由 klttl 于 2010-7-29 09:44 编辑

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 版本信息
; Mp3 播放测试程序 Ver 1.0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .386
  .model flat, stdcall
  option casemap :none   ; case sensitive
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include  windows.inc
include  user32.inc
include  kernel32.inc
include  comctl32.inc
include  comdlg32.inc
include  winmm.inc
includelib user32.lib
includelib kernel32.lib
includelib comctl32.lib
includelib comdlg32.lib
includelib winmm.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 数据
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN equ  1000
ID_BROWSE equ  1001
ID_FILE  equ  1002
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .data?
dwFlag  dd ?
hWinMain dd ?
hInstance dd ?
hDevice  dd ?
szBuffer db 256 dup (?)
stOpenFileName OPENFILENAME <?>
  .data
szCaption db "Error...",0
szError  db "Error to play MP3 file!",0
szPlay  db "&lay",0
szStop  db "&Stop",0
szDevice db "MPEGVideo",0
szTitleSave db "Open MP3 file...",0
szExt  db '*.mp3',0
szFilter db 'MP3 Files(*.mp3)',0,'*.mp3',0,'All Files(*.*)',0,'*.*',0,0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 子程序声明
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain PROTO WORD,:DWORD,:DWORD,:DWORD
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  .code
if  DEBUG
include  Debug.asm
endif
include  Win.asm
;********************************************************************
_GetFileName proc
  mov stOpenFileName.Flags,OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST
  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 SetDlgItemText,hWinMain,ID_FILE,addr szBuffer
  call _StopPlayMP3
  ret
_GetFileName endp
;********************************************************************
_PlayMP3 proc
  local @stMCIOpen:MCI_OPEN_PARMS
  local @stMCIPlay:MCI_PLAY_PARMS
  mov @stMCIOpen.lpstrDeviceType,offset szDevice
  mov @stMCIOpen.lpstrElementName,offset szBuffer
  invoke mciSendCommand,0,MCI_OPEN,MCI_OPEN_TYPE or MCI_OPEN_ELEMENT,addr @stMCIOpen
  mov eax,@stMCIOpen.wDeviceID
  mov hDevice,eax
  mov eax,hWinMain
  mov @stMCIPlay.dwCallback,eax
  invoke mciSendCommand,hDevice,MCI_PLAY,MCI_NOTIFY,addr @stMCIPlay
  .if eax == 0
   invoke SetDlgItemText,hWinMain,IDOK,offset szStop
   mov dwFlag,1
  .else
   invoke MessageBox,hWinMain,addr szError,addr szCaption,MB_OK
  .endif
  ret
        
_PlayMP3 endp
;********************************************************************
_StopPlayMP3 proc
  local @stMCIStop:MCI_GENERIC_PARMS
  
  mov eax,hWinMain
  mov @stMCIStop.dwCallback,eax
  invoke mciSendCommand,hDevice,MCI_STOP,MCI_NOTIFY,addr @stMCIStop
  invoke mciSendCommand,hDevice,MCI_CLOSE,MCI_NOTIFY,addr @stMCIStop
  invoke SetDlgItemText,hWinMain,IDOK,offset szPlay
  mov dwFlag,0
  ret
_StopPlayMP3 endp
;********************************************************************
_ProcDlgMain proc uses ebx edi esi, \
  hWnd:DWORD,wMsg:DWORD,wParam:DWORD,lParam:DWORD
  mov eax,wMsg
  .if eax == WM_CLOSE
   invoke EndDialog,hWnd,NULL
  .elseif eax == WM_INITDIALOG
   mov eax,hWnd
   mov hWinMain,eax
   invoke _CenterWindow,eax
   invoke SendDlgItemMessage,hWinMain,ID_FILE,EM_SETREADONLY,TRUE,NULL
  .elseif eax == WM_COMMAND
   mov eax,wParam
   .if eax == ID_BROWSE
    call _GetFileName
   .elseif eax == IDOK
    .if dwFlag == 0
     call _PlayMP3
    .else
     call _StopPlayMP3
    .endif
   .endif
  .else
;********************************************************************
; 注意:对话框的消息处理后,要返回 TRUE,对没有处理的消息
; 要返回 FALSE
;********************************************************************
   mov eax,FALSE
   ret
  .endif     
  mov eax,TRUE
  ret
  
_ProcDlgMain endp
;********************************************************************
start:
  invoke InitCommonControls
  invoke GetModuleHandle,NULL
  mov hInstance,eax
  invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,0
  invoke ExitProcess,NULL

         end    start
2

查看全部评分

Rank: 16Rank: 16Rank: 16Rank: 16

主题
18
帖子
260
C币
828 枚
在线时间
290 小时
发表于 2010-7-29 11:48:22 |显示全部楼层
支持,多谢分享~

Rank: 4

主题
7
帖子
116
C币
244 枚
在线时间
101 小时
发表于 2010-8-9 11:11:44 |显示全部楼层
谢谢啊!实际上还有许多有关的资源文件代码没传上来!有需要的话我会把他其它传上来共享的!!!

Rank: 1

主题
1
帖子
42
C币
44 枚
在线时间
12 小时
发表于 2010-8-19 18:49:52 |显示全部楼层
老牛叉了。。。

Rank: 2

主题
2
帖子
80
C币
87 枚
在线时间
16 小时
发表于 2010-9-8 13:41:14 |显示全部楼层
是原创吗?

Rank: 1

主题
0
帖子
1
C币
3 枚
在线时间
0 小时
发表于 2010-9-8 21:41:06 |显示全部楼层
看不懂啊。。牛人。。

Rank: 1

主题
1
帖子
6
C币
8 枚
在线时间
0 小时
发表于 2010-9-10 10:06:01 |显示全部楼层
wo xian   学习几天再来看 呵呵   貌似很复杂!!

Rank: 2

主题
8
帖子
17
C币
27 枚
在线时间
5 小时
发表于 2010-9-19 13:00:52 |显示全部楼层
大哥, 发代码的话, 请完整点。

Rank: 2

主题
4
帖子
83
C币
91 枚
在线时间
10 小时
发表于 2010-9-19 13:43:18 |显示全部楼层
不是很懂的啊

Rank: 1

主题
0
帖子
5
C币
5 枚
在线时间
1 小时
发表于 2010-10-3 15:22:45 |显示全部楼层
。。。很费解~
您需要登录后才可以回帖 登录 | 加入社区!

C语言 ( 粤ICP备11042647号-2 )

GMT+8, 2012-2-7 22:27

©2009-2011 cyuyan.com.cn

回顶部