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

📄 asmcut.asm

📁 汇编实现文件分割和合并的ASM代码
💻 ASM
字号:
;***************************************************************
;Author:Smallwaves
;Data:2001.11.14
;Title:Asm cut evaluation.
;Describle:
;	This file describles how to cut and combine files using  
;   file-mapping and also describle how to use my FButton Class V1.02,I did know it had some errors but although 
;   it was working very good by my test,So WHAT CAN I SAY?... 
;Homepage:  http://smallwaves.yeah.net(Chinese)
;CopyRight:  (c)Smallwaves's asm studo 2002
;*****************************************************************

.386
.model flat, stdcall
option casemap :none   ; case sensitive
include		\masm32\include\windows.inc
include		\masm32\include\user32.inc
include     \masm32\include\gdi32.inc
include		\masm32\include\kernel32.inc
include		\masm32\include\comctl32.inc
include		\masm32\include\comdlg32.inc

includelib	\masm32\lib\user32.lib
includelib  \masm32\lib\gdi32.lib
includelib	\masm32\lib\kernel32.lib
includelib	\masm32\lib\comctl32.lib
includelib	\masm32\lib\comdlg32.lib

CutFile proto c :ptr,:dword
.const 
	MAXSIZE           EQU     256
 IDI_ICON1            equ     102
 
 IDC_CURSOR	   equ    103
 IDC_HANDCUR       equ     104
 
 IDD_DIALOGCUT        equ     101
 IDC_CUTFILENAME      equ     1000
 IDC_SELECTCUT        equ     1001
 IDC_CUTSIZE          equ     1002
 IDC_CUT              equ     1003
 IDC_COMBINEFILENAME  equ     1004
 IDC_SELECTCOMBINE    equ     1005
 IDC_COMBINE          equ     1006
 IDC_STATIC1          equ     1007
 IDC_STATIC2          equ     1008
 IDC_STATIC3          equ     1009
 IDC_STATIC4          equ     1010

IDM_ABOUT		            EQU           32003

;************MACRO && STRUCT**********************
; ---------------------
    ; literal string MACRO
    ; ---------------------
      literal MACRO quoted_text:VARARG
        LOCAL local_text
        .data
          local_text db quoted_text,0
        .code
        EXITM <local_text>
      ENDM
; --------------------------------
    ; string address in INVOKE format
    ; --------------------------------
      SADD MACRO quoted_text:VARARG
        EXITM <ADDR literal(quoted_text)>
      ENDM
dsText MACRO Name, Text:VARARG
  .data
	Name db Text,0
  .code
ENDM
RGB MACRO red, green, blue
	xor eax, eax
	mov al, blue    ; blue
	rol eax, 8
	mov al, green   ; green
	rol eax, 8
	mov al, red     ; red
ENDM

.data  
	szAppName db "惊涛之帆汇编工作室!--文件切割器.",0
	szAbout   db "作者:许敬涛",13,10,13,10,"日期:2002.4.1",13,10,13,10,"编程工具:Masm32v7.0",13,10,13,10,"CopyRight (C)惊涛之帆汇编工作室!",0
	szBuffer db MAXSIZE DUP (0)
	FilterStringCut db "All files(*.*)",0,"*.*",0,0
	FilterStringCombine db "000 file(*.000)",0,"*.000",0,"All files(*.*)",0,"*.*",0,0
	ofn OPENFILENAME {0}
	szMenuAbout	    db "关于作者...",0
	
	hBtnSelCombine dd 0
	hBtnCombine    dd 0
	hBtnSelCut     dd 0
	hBtnCut	       dd 0
	hCutSize       dd 0
.data? 
	hInstance	dd	?	
	hWinMain	dd	?
	hCursor dd ?
	hHandCur dd ?
	

include Objects.inc
include CFButton.asm
.code 
;*****************************************************
_GetFileName proc  hWnd:dword,lpFilterString:dword
	mov ofn.lStructSize,sizeof ofn
	push hWnd
	pop ofn.hWndOwner
	push hInstance
	pop ofn.hInstance
	mov eax,lpFilterString
	mov ofn.lpstrFilter,eax
	mov ofn.lpstrFile,offset szBuffer
	mov ofn.nMaxFile,MAXSIZE
	MOV ofn.Flags,OFN_FILEMUSTEXIST OR OFN_PATHMUSTEXIST\
	OR OFN_LONGNAMES OR OFN_EXPLORER OR OFN_HIDEREADONLY
	invoke GetOpenFileName,addr ofn
	ret
_GetFileName endp;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

DlgProc	proc hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD
local hBrush :dword
local rect:RECT
local hSysMenu:dword
local LogBrush:LOGBRUSH
		mov	eax,uMsg
		.if	eax == WM_CLOSE
			;DESTROY hBtnSelCut
			;DESTROY hBtnSelCombine
			;DESTROY hBtnCut
			;DESTROY hBtnCombine

			invoke	EndDialog,hWnd,NULL
		.elseif	eax == WM_INITDIALOG
			PUSH hWnd
			pop  hWinMain	
			invoke LoadIcon,hInstance,IDI_ICON1
			push eax
			invoke SendMessage,hWnd,WM_SETICON,ICON_SMALL,EAX
			pop eax
			invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,EAX
									
			invoke	GetSystemMenu,hWinMain,FALSE;append system menu
			mov	hSysMenu,eax
			invoke	AppendMenu,hSysMenu,MF_SEPARATOR,0,NULL
			invoke	AppendMenu,hSysMenu,MF_STRING,IDM_ABOUT,offset szMenuAbout	
			invoke LoadCursor,hInstance,IDC_CURSOR;set dialog cursor
			MOV hCursor,eax				
		
		   ;建立按钮,并指定按钮图标
			NEWOBJECT CFButton,hInstance,hWnd,1203,IDC_SELECTCUT
			mov hBtnSelCut,eax
			NEWOBJECT CFButton,hInstance,hWnd,1203,IDC_SELECTCOMBINE
			mov hBtnSelCombine,eax
			NEWOBJECT CFButton,hInstance,hWnd,1201,IDC_CUT
			mov hBtnCut,eax
			NEWOBJECT CFButton,hInstance,hWnd,1202,IDC_COMBINE
			mov hBtnCombine,eax
			
			;设置按钮为浮动的
			method hBtnSelCut,CFButton,SetFlat,TRUE
			method hBtnSelCombine,CFButton,SetFlat,TRUE
			method hBtnCut,CFButton,SetFlat,TRUE
			method hBtnCombine,CFButton,SetFlat,TRUE

         ;设置鼠标移动到上面的形状
			method hBtnSelCut,CFButton,SetCursor,hInstance,IDC_HANDCUR
			method hBtnSelCombine,CFButton,SetCursor,hInstance,IDC_HANDCUR
			method hBtnCut,CFButton,SetCursor,hInstance,IDC_HANDCUR
			method hBtnCombine,CFButton,SetCursor,hInstance,IDC_HANDCUR
			
			;设置Active时文字颜色
			RGB 255,0,0
			push eax
			method hBtnSelCut,CFButton,SetActiveTextCol,eax
			pop eax 
			push eax
			method hBtnSelCombine,CFButton,SetActiveTextCol,eax
			pop eax 
			push eax
			method hBtnCut,CFButton,SetActiveTextCol,eax	
			pop eax 
			push eax		
			method hBtnCombine,CFButton,SetActiveTextCol,eax

         ;设置Active时背景颜色
			RGB 0,165,255
			METHOD hBtnSelCut,CFButton,SetActiveBkCol,eax
			RGB 0,165,255
			METHOD hBtnSelCombine,CFButton,SetActiveBkCol,eax
			RGB 0,165,255
			METHOD hBtnCut,CFButton,SetActiveBkCol,eax
			RGB 0,165,255
			METHOD hBtnCombine,CFButton,SetActiveBkCol,eax

         ;设置非Active时背景颜色
			RGB 85,160,180
			method hBtnSelCut,CFButton,SetInactiveBkCol,eax
			RGB 85,160,180
			method hBtnSelCombine,CFButton,SetInactiveBkCol,eax
			RGB 85,160,180
			method hBtnCut,CFButton,SetInactiveBkCol,eax
			RGB 85,160,180
			method hBtnCombine,CFButton,SetInactiveBkCol,eax
			
			;取下拉句柄
			invoke GetDlgItem,hWnd,	IDC_CUTSIZE
			mov hCutSize,eax
         ;设置下拉内容
			invoke SendMessage,hCutSize,CB_ADDSTRING,0,SADD("720")  ;显示内容
			invoke SendMessage,hCutSize,CB_SETITEMDATA,eax,720      ;数据内容
			invoke SendMessage,hCutSize,CB_ADDSTRING,0,SADD("1024")
			invoke SendMessage,hCutSize,CB_SETITEMDATA,eax,1024
			invoke SendMessage,hCutSize,CB_ADDSTRING,0,SADD("1440")
			invoke SendMessage,hCutSize,CB_SETITEMDATA,eax,1440
			invoke SendMessage,hCutSize,CB_SETCURSEL,2,0

			invoke SetDlgItemInt,hWnd,IDC_CUTSIZE,1440,FALSE
			
		
		.elseif uMsg==WM_DRAWITEM
		   ;重画按钮
			method hBtnSelCut,CFButton,DrawItem,lParam
			method hBtnSelCombine,CFButton,DrawItem,lParam
			method hBtnCut,CFButton,DrawItem,lParam
			method hBtnCombine,CFButton,DrawItem,lParam

		.elseif uMsg==WM_SYSCOMMAND
			mov eax,wParam
			movzx eax,ax
			.if ax==IDM_ABOUT
				invoke SendMessage,hWnd,WM_COMMAND,IDM_ABOUT,NULL	
			.else
				mov	eax,FALSE
				ret
			.endif

		.elseif uMsg==WM_SETCURSOR		
			INVOKE SetCursor,hCursor

		.ELSEIF EAX==WM_ERASEBKGND
			mov LogBrush.lbStyle,BS_SOLID
			RGB 85,160,124
			mov LogBrush.lbColor,eax
			invoke CreateBrushIndirect,addr LogBrush
			mov hBrush,eax
			invoke GetClientRect,hWnd,addr rect
			invoke FillRect,wParam,addr rect,hBrush	
			mov eax,TRUE
			ret
		.ELSEIF EAX==WM_CTLCOLORSTATIC 
			invoke GetDlgCtrlID,lParam
			.if eax==IDC_STATIC1 || eax==IDC_STATIC2 ||eax==IDC_STATIC3 || EAX==IDC_STATIC4
				RGB 255,255,0
				invoke SetTextColor,wParam,eax
				RGB 85,160,124
				INVOKE SetBkColor,wParam,eax
				invoke GetStockObject,NULL_BRUSH
			.ELSE
				MOV eax,FALSE
				ret
			.endif	
			ret
		.elseif	eax == WM_COMMAND			
			mov	eax,wParam
			.IF lParam==0
				.if ax==IDM_ABOUT
					invoke MessageBox,hWnd,addr szAbout,addr szAppName,MB_OK 
				.endif
			.Endif
			and eax,0ffffh
			.if	eax == IDC_SELECTCUT
				invoke _GetFileName,hWnd,addr FilterStringCut
				.if eax!=FALSE
					invoke SetDlgItemText,hWnd,IDC_CUTFILENAME,addr szBuffer
				.else
				.endif
			.elseif eax ==IDC_SELECTCOMBINE
				invoke _GetFileName,hWnd,addr FilterStringCombine
				.if EAX!=FALSE
					invoke SetDlgItemText,hWnd,IDC_COMBINEFILENAME,addr szBuffer
				.else
				.endif
			.ELSEIF EAX==IDC_CUT
				invoke EnableWindow,lParam,FALSE
				invoke GetDlgItemInt,hWnd,IDC_CUTSIZE,NULL,TRUE
				INVOKE CutFile,addr szBuffer,eax
				INVOKE EnableWindow,lParam,TRUE
			.ELSEIF EAX==IDC_COMBINE
				invoke EnableWindow,lParam,FALSE
				invoke CutFile,addr szBuffer,0
				invoke EnableWindow,lParam,TRUE

			.elseif eax == IDC_CUTSIZE
			    mov eax,wParam
			    shr eax,16
			    .if eax == CBN_SELCHANGE
				    ;invoke SendMessage,lParam,CB_GETCURSEL,0,0
	                ;            INVOKE SendMessage,lParam,CB_GETITEMDATA,eax,0
				    ;invoke SetDlgItemInt,hWnd,IDC_CUTSIZE,eax,FALSE
			    .endif
			.endif
		.else
			mov	eax,FALSE
			ret
		.endif		   
		mov	eax,TRUE
		ret
		
DlgProc	endp
;********************************************************************
start: 
	invoke	InitCommonControls
		invoke	GetModuleHandle,NULL
		mov	hInstance,eax
		invoke	DialogBoxParam,hInstance,IDD_DIALOGCUT ,NULL,offset DlgProc,0
		invoke	ExitProcess,NULL	

end	start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -