能力值:
( LV17,RANK:1820 )
2 楼
.386
.model flat , stdcall ;32 bit memory model
option casemap :none ;case sensitive include windows.inc
include user32.inc
include shell32.inc
include kernel32.inc
include SkinH.inc
includelib SkinH.lib
includelib user32.lib
includelib kernel32.lib
include comdlg32.inc
includelib comdlg32.lib
includelib shell32.lib
include Stdlib.Inc
includelib Stdlib.lib
include md5.asm
DlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM
_GetMD5 PROTO :DWORD
AboutDlg PROTO :HWND,:UINT,:WPARAM,:LPARAM
_GetError PROTO
.const
ICO_MAIN equ 1
IDD_DIALOG1 equ 101
IDC_FILE equ 1001
IDC_OPEN equ 1002
IDC_PGB1 equ 1004
IDC_EDT equ 1005
IDC_ABOUT equ 1007
IDC_EXIT equ 1008
IDD_DLG1 equ 1000
IDC_IMG1 equ 1003
IDC_CLOSE equ 1006
;#########################################################################
.data
szSHE db 'itunes.she' ,0
lpstrFilter db 'All Files(*.*)' ,0,'*.*' ,0,0
szOpenFileFailed db '文件打开失败!' ,0
szCreateMapFailed db '创建文件映射失败! ' ,0
szMapFileFailed db '映射文件到内存失败!' ,0
szErrer db '错误' ,0
szOpenFileFail db '打开文件失败!' ,0
temp db '%s' ,0DH,0AH,0
szReceive db '文件名 :%s' ,0dh,0ah
db '文件大小 :%d' ,'字节' ,0dh,0ah
db '文件MD5值:%s ' ,0dh,0ah,0
szErrTextFormat db '错误码:%d' ,0dh,0ah
db '文本描述:%s' ,0dh,0ah
szZero db ' ' ,0dh,0ah
lpstrFile db 255 dup (0)
lpFileName db MAX_PATH dup (0)
szFileName db MAX_PATH dup (0)
;#########################################################################
.data?
hInstance dd ?
hWinMain dd ?
;#########################################################################
.code
_WindowCenter proc hWnd:DWORD
local @stRectDeskTop:RECT,@stRectWin:RECT
local @dwWidth:DWORD ,@dwHeight:DWORD
invoke GetWindowRect ,hWnd,addr @stRectWin
invoke GetDesktopWindow
mov ebx ,eax
invoke GetWindowRect ,ebx ,addr @stRectDeskTop
mov eax ,@stRectWin.bottom
sub eax ,@stRectWin.top
mov @dwHeight,eax
mov eax ,@stRectWin.right
sub eax ,@stRectWin.left
mov @dwWidth,eax
mov ebx ,@stRectDeskTop.bottom
sub ebx ,@dwHeight
shr ebx ,1
mov ecx ,@stRectDeskTop.right
sub ecx ,@dwWidth
shr ecx ,1
invoke MoveWindow ,hWnd,ecx ,ebx ,@dwWidth,@dwHeight,FALSE
ret
_WindowCenter endp
start:
invoke GetModuleHandle ,NULL
mov hInstance,eax
invoke DialogBoxParam ,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
invoke ExitProcess ,0
;########################################################################
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL @stOFN:OPENFILENAME
mov eax ,uMsg
.if eax ==WM_INITDIALOG
push hWin
pop hWinMain
invoke SkinH_AttachEx,addr szSHE,0
invoke LoadIcon ,hWin,ICO_MAIN
invoke SendMessage ,hWin,WM_SETICON,ICON_BIG,eax
invoke _WindowCenter,hWin
invoke SetWindowPos ,hWin,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE
invoke DragAcceptFiles ,hWin,TRUE
.elseif eax ==WM_DROPFILES
invoke DragQueryFile ,wParam,0,addr lpFileName,MAX_PATH
invoke SendDlgItemMessage ,hWin,IDC_FILE,EM_REPLACESEL,0,addr lpFileName
invoke DragFinish ,wParam
invoke _GetMD5,addr lpFileName
.elseif eax ==WM_COMMAND
mov eax ,wParam
.if eax ==IDC_OPEN
invoke RtlZeroMemory ,addr @stOFN,sizeof @stOFN
push hWin
pop @stOFN.hwndOwner
mov @stOFN.lStructSize,sizeof @stOFN
mov eax ,offset lpstrFilter
mov @stOFN.lpstrFilter,eax
mov eax ,offset lpstrFile
mov @stOFN.lpstrFile,eax
mov @stOFN.nMaxFile,sizeof lpstrFile
mov @stOFN.Flags,OFN_FILEMUSTEXIST OR OFN_PATHMUSTEXIST
invoke GetOpenFileName ,addr @stOFN
.if eax == 1
invoke SetDlgItemText ,hWin,IDC_FILE,@stOFN.lpstrFile
.endif
invoke _GetMD5,@stOFN.lpstrFile
.elseif eax == IDC_ABOUT
invoke DialogBoxParam ,hInstance,IDD_DLG1,hWin,addr AboutDlg,NULL
.elseif eax == IDC_EXIT
invoke EndDialog ,hWin,0
.endif
.elseif eax ==WM_CLOSE
invoke EndDialog ,hWin,0
.else
mov eax ,FALSE
ret
.endif
mov eax ,TRUE
ret
DlgProc endp
_GetMD5 proc lpFile:DWORD
LOCAL Temp [MAX_PATH]:BYTE
LOCAL szFileText[MAX_PATH]:BYTE
LOCAL hFileRead,hMapFile,pMemory,szFileSize
invoke CreateFile ,lpFile,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_ARCHIVE,NULL
.if eax ==0
invoke MessageBox ,0,addr szOpenFileFail,addr szErrer,MB_OK or MB_ICONERROR
invoke _GetError
.endif
mov hFileRead,eax
invoke ExtractFileName,lpFile,addr szFileText
invoke CreateFileMapping ,hFileRead,NULL,PAGE_READONLY,0,0,NULL
.if eax ==0
invoke CloseHandle ,hFileRead
invoke MessageBox ,0,addr szCreateMapFailed,addr szErrer,MB_ICONERROR or MB_OK
invoke _GetError
ret
.endif
mov hMapFile,eax
invoke MapViewOfFile ,hMapFile,FILE_MAP_READ,0,0,0
.if eax ==0
invoke CloseHandle ,hMapFile
invoke MessageBox ,0,addr szMapFileFailed,addr szErrer,MB_OK or MB_ICONERROR
invoke _GetError
ret
.endif
mov pMemory,eax
invoke SendDlgItemMessage ,hWinMain,IDC_PGB1,PBM_SETPOS,1,0
invoke SetDlgItemText ,hWinMain,IDC_EDT,addr szZero
invoke GetFileSize ,hFileRead,0
mov szFileSize,eax
invoke _MD5,pMemory,eax
invoke wsprintf ,addr Temp,addr szReceive,addr szFileText,addr szFileSize,eax
invoke SendDlgItemMessage ,hWinMain,IDC_EDT,EM_REPLACESEL,0,addr Temp
invoke SendDlgItemMessage ,hWinMain,IDC_PGB1,PBM_SETPOS,100,0
invoke RtlZeroMemory ,addr szFileName,MAX_PATH
invoke SendDlgItemMessage ,hWinMain,IDC_FILE,WM_SETTEXT,0,addr szFileName
invoke UnmapViewOfFile ,pMemory
invoke CloseHandle ,pMemory
invoke CloseHandle ,hMapFile
ret
_GetMD5 endp
_GetError proc
LOCAL hLocal [MAX_PATH]:BYTE
LOCAL szErrerText [MAX_PATH]:BYTE
LOCAL szErrerCode :DWORD
invoke GetLastError
mov szErrerCode,eax
invoke FormatMessage ,FORMAT_MESSAGE_FROM_SYSTEM,FORMAT_MESSAGE_FROM_STRING,0,LANG_NEUTRAL,addr hLocal,255,NULL
invoke wsprintf ,addr szErrerText,addr szErrTextFormat,addr szErrerCode,addr hLocal
invoke SetDlgItemText ,hWinMain,IDC_EDT,addr szErrerText
ret
_GetError endp
AboutDlg proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
mov eax ,uMsg
.if eax ==WM_COMMAND
mov eax ,wParam
.if eax ==IDC_CLOSE
invoke EndDialog ,hWin,0
.endif
.else
mov eax ,FALSE
ret
.endif
mov eax ,TRUE
ret
AboutDlg endp
end start