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

📄 4.asm

📁 用win32汇编语言编写的 包括界面设计的 汇编程序编辑和编译运行
💻 ASM
📖 第 1 页 / 共 2 页
字号:
       invoke lstrcpyn,addr doname,addr FileName,eax
       invoke lstrcat,addr doname,addr cat1
       invoke Sleep,1000
       invoke  FindFirstFile,addr doname,ADDR buffer
    .if     eax !=  INVALID_HANDLE_VALUE
            mov      hFile,eax
            invoke  FindClose,hFile
            invoke  ShellExecute,0,0,addr szFileName2,addr doname ,0,SW_HIDE
	        CMP eax,31
            JLE WRONG
            JMP e
     .else  
      	  	invoke MessageBox, NULL, addr mess2, addr cap2,MB_ICONEXCLAMATION
          	jmp exit
     .endif 
    
	 
	WRONG:        invoke MessageBox, NULL, addr mess, addr cap,MB_ICONERROR
	jmp exit
  e:
     invoke MessageBox, NULL, addr mess1, addr cap1, MB_ICONEXCLAMATION
  exit:    
	ret
    compileproc endp
  runproc proc
     LOCAL	doname[MAX_PATH]:BYTE	   	
     invoke lstrlen,addr FileName
     sub eax,3
     invoke lstrcpyn,addr doname,addr FileName,eax
     invoke lstrcat,  addr doname,addr cat2
	 invoke   ShellExecute,0,0,addr doname, 0 ,0,SW_SHOWNORMAL
	 CMP eax,31
     JLE WRONG
	 JMP e
	WRONG:   invoke MessageBox, NULL, addr mess, addr cap, MB_ICONERROR 
	e:
             	ret

             runproc endp
compilesproc  proc
	
	 LOCAL doname[MAX_PATH]:BYTE	
	 LOCAL	buffer1[MAX_PATH]:BYTE
	 LOCAL	ofn:OPENFILENAME
     LOCAL   hFile:DWORD
	 LOCAL	editstream:EDITSTREAM
	 LOCAL	buffer[MAX_PATH]:BYTE
	 LOCAL	chrg:CHARRANGE
      
	;Zero out the ofn struct
	invoke RtlZeroMemory,addr ofn,sizeof ofn
	;Setup the ofn struct
	mov		ofn.lStructSize,sizeof ofn
	push	hWnd
	pop		ofn.hwndOwner
	push	hInstance
	pop		ofn.hInstance
	mov		ofn.lpstrFilter,NULL
	mov		buffer[0],0
	lea		eax,buffer
	mov		ofn.lpstrFile,eax
	mov		ofn.nMaxFile,sizeof buffer
	mov		ofn.lpstrDefExt,NULL
	mov		ofn.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
	;Show the Open dialog
	invoke GetOpenFileName,addr ofn
	.if eax
	  invoke lstrcat,addr doname,addr FileName
      invoke  lstrcat,addr doname,addr listcat
      invoke  ShellExecute,0,0,addr szFileName1,addr doname ,0,SW_HIDE     
     CMP eax,31
     JLE WRONG
      invoke Sleep,1000
      invoke lstrlen,addr FileName
      sub eax,3
      invoke lstrcpyn,addr doname,addr FileName,eax
      invoke lstrcat,addr doname,addr cat1  
       invoke  FindFirstFile,addr doname,ADDR buffer1
    .if     eax !=  INVALID_HANDLE_VALUE

            mov      hFile,eax
            invoke  FindClose,hFile
            invoke lstrcat,addr doname,addr addcat 
       		invoke lstrcat,addr doname,addr buffer  
     		invoke  ShellExecute,0,0,addr szFileName2,addr doname ,0,SW_HIDE
	 		CMP eax,31
     		JLE WRONG
     		jmp e
     .else  
      	  	invoke MessageBox, NULL, addr mess2, addr cap2,MB_ICONEXCLAMATION
          	jmp exit
     .endif 
      
     
     .endif 
    
	
	WRONG:    invoke MessageBox, NULL, addr mess, addr cap,MB_ICONERROR  
	          jmp exit
  e:
	invoke MessageBox, NULL, addr mess1, addr cap1,MB_ICONEXCLAMATION
	exit:
	ret

compilesproc endp
musicproc proc
	
	 LOCAL	ofn:OPENFILENAME
     LOCAL   hFile:DWORD
	 LOCAL	editstream:EDITSTREAM
	 LOCAL	buffer[MAX_PATH]:BYTE
	 LOCAL	chrg:CHARRANGE
      
	;Zero out the ofn struct
	invoke RtlZeroMemory,addr ofn,sizeof ofn
	;Setup the ofn struct
	mov		ofn.lStructSize,sizeof ofn
	push	hWnd
	pop		ofn.hwndOwner
	push	hInstance
	pop		ofn.hInstance
	mov		ofn.lpstrFilter,NULL
	mov		buffer[0],0
	lea		eax,buffer
	mov		ofn.lpstrFile,eax
	mov		ofn.nMaxFile,sizeof buffer
	mov		ofn.lpstrDefExt,NULL
	mov		ofn.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST
	;Show the Open dialog
	invoke GetOpenFileName,addr ofn
	.if eax
	invoke   ShellExecute,0,0,addr buffer, 0 ,0,SW_HIDE
	
	.endif
	ret
musicproc endp

listviewproc proc
     LOCAL   hFile:DWORD
	 LOCAL	editstream:EDITSTREAM
	 LOCAL	buffer[MAX_PATH]:BYTE
	 LOCAL	chrg:CHARRANGE
	 LOCAL doname[MAX_PATH]:BYTE
	 invoke lstrlen,addr FileName
     sub eax,3
     invoke lstrcpyn,addr doname,addr FileName,eax
     invoke lstrcat,addr doname,addr cat3
      ;///////////////////////////////////////
      invoke CreateFile,addr doname,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
		.if eax!=INVALID_HANDLE_VALUE
			mov		hFile,eax
			;Copy buffer to FileName
			invoke lstrcpy,addr FileName,addr doname
			;stream the text into the richedit control
			push	hFile
			pop		editstream.dwCookie
			mov		editstream.pfnCallback,offset StreamInProc
			invoke SendMessage,hREd,EM_STREAMIN,SF_TEXT,addr editstream
			invoke CloseHandle,hFile
			invoke SendMessage,hREd,EM_SETMODIFY,FALSE,0
			mov		chrg.cpMin,0
			mov		chrg.cpMax,0
			invoke SendMessage,hREd,EM_EXSETSEL,0,addr chrg
			invoke SetWinCaption
			mov		eax,FALSE
		.else
			invoke MessageBox,hWnd,addr OpenFileFail,addr AppName,MB_OK
			mov		eax,TRUE
		.endif
	ret

listviewproc endp
asmproc proc
	
	LOCAL   hFile:DWORD
	LOCAL	editstream:EDITSTREAM
	LOCAL	buffer[MAX_PATH]:BYTE
	LOCAL	chrg:CHARRANGE
	LOCAL doname[MAX_PATH]:BYTE
	 invoke lstrlen,addr FileName
      sub eax,3
     invoke lstrcpyn,addr doname,addr FileName,eax
      invoke lstrcat,addr doname,addr cat4
      ;///////////////////////////////////////
      invoke CreateFile,addr doname,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
		.if eax!=INVALID_HANDLE_VALUE
			mov		hFile,eax
			;Copy buffer to FileName
			invoke lstrcpy,addr FileName,addr doname
			;stream the text into the richedit control
			push	hFile
			pop		editstream.dwCookie
			mov		editstream.pfnCallback,offset StreamInProc
			invoke SendMessage,hREd,EM_STREAMIN,SF_TEXT,addr editstream
			invoke CloseHandle,hFile
			invoke SendMessage,hREd,EM_SETMODIFY,FALSE,0
			mov		chrg.cpMin,0
			mov		chrg.cpMax,0
			invoke SendMessage,hREd,EM_EXSETSEL,0,addr chrg
			invoke SetWinCaption
			mov		eax,FALSE
		.else
			invoke MessageBox,hWnd,addr OpenFileFail,addr AppName,MB_OK
			mov		eax,TRUE
		.endif
	ret

asmproc endp
WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
	LOCAL	pt:POINT
	LOCAL	rect:RECT
	LOCAL	ht:DWORD
	LOCAL	hCtl:HWND
	LOCAL	chrg:CHARRANGE
	LOCAL	cf:CHOOSEFONT

	mov		eax,uMsg
	.if eax==WM_INITDIALOG
		push	hWin
		pop		hWnd
		mov		fView,3
		mov		TabSize,1
		;Set the toolbar buttons
		
		
		;Set FileName to NewFile
		invoke lstrcpy,addr FileName,addr NewFile
		invoke SetWinCaption
		;Get handle of RichEdit window and give it focus
		invoke GetDlgItem,hWin,IDC_RED
		mov		hREd,eax
		invoke SendMessage,hREd,EM_SETTEXTMODE,0,TM_PLAINTEXT
		;Set event mask
		invoke SendMessage,hREd,EM_SETEVENTMASK,0,ENM_SELCHANGE
		;Set the text limit. The default is 64K
		invoke SendMessage,hREd,EM_LIMITTEXT,-1,0
		;Create font
		invoke lstrcpy,addr lfnt.lfFaceName,offset szFont
		mov		lfnt.lfHeight,-12
		mov		lfnt.lfWeight,400
		invoke CreateFontIndirect,addr lfnt
		mov     hFont,eax
		;Set font & format
		invoke SetFormat,hREd
		;Init RichEdit
		invoke SendMessage,hREd,EM_SETMODIFY,FALSE,0
		invoke SendMessage,hREd,EM_EMPTYUNDOBUFFER,0,0
		invoke SetFocus,hREd
		
	.elseif eax==WM_COMMAND
		;Menu and toolbar has the same ID's
		mov		eax,wParam
		and		eax,0FFFFh
		.if eax==IDM_FILE_NEW
			invoke WantToSave
			.if !eax
				invoke SetWindowText,hREd,addr szNULL
				invoke lstrcpy,addr FileName,addr NewFile
				invoke SetWinCaption
			.endif
			invoke SetFocus,hREd
		.elseif eax==IDM_FILE_OPEN
			invoke WantToSave
			.if !eax
				invoke OpenEdit
			.endif
			invoke SetFocus,hREd
		.elseif eax==IDM_FILE_SAVE
			invoke SaveEdit
			invoke SetFocus,hREd
		.elseif eax==IDM_FILE_SAVEAS
			invoke SaveEditAs
			invoke SetFocus,hREd
		;/////////////
		.elseif eax==IDM_EDIT_CUT
			invoke SendMessage,hREd,WM_CUT,0,0
		.elseif eax==IDM_EDIT_COPY
			invoke SendMessage,hREd,WM_COPY,0,0
		.elseif eax==IDM_EDIT_PASTE
			invoke SendMessage,hREd,WM_PASTE,0,0
		.elseif eax==IDM_COMPILE  ;IDM_RUN
			invoke  compileproc
		.elseif  eax==IDM_RUN
			invoke   runproc
		.ELSEIF   EAX==IDM_COMPILES
			 INVOKE   compilesproc
		.ELSEIF EAX==IDM_MUSIC 
			 	INVOKE   musicproc
			 	.elseif  eax==IDM_LISTVIEW 
			 		invoke listviewproc
			 		.elseif eax==IDM_ASM
			 			invoke asmproc
		.endif
	.elseif eax==WM_NOTIFY
		.if wParam==IDC_RED
			;Auto horizontal scroll text into view
			invoke GetCaretPos,addr pt
			invoke GetClientRect,hREd,addr rect
			mov		eax,rect.right
			sub		eax,pt.x
			.if eax<20
				;Caret near right edge
				invoke SendMessage,hREd,EM_GETSCROLLPOS,0,addr pt
				add		pt.x,70
				invoke SendMessage,hREd,EM_SETSCROLLPOS,0,addr pt
			.endif
		.endif
	.elseif eax==WM_SIZE
		mov		eax,fView
		and		eax,1
		.if eax
			;Resize toolbar
			;invoke GetDlgItem,hWin,IDC_TBR
			;mov		hCtl,eax
			;invoke MoveWindow,hCtl,0,0,0,0,TRUE
			;Get height of toolbar
			;invoke GetWindowRect,hCtl,addr rect
			;mov		eax,rect.bottom
			;sub		eax,rect.top
		.endif
		push	eax
		mov		eax,fView
		and		eax,2
		.if eax
			;Resize statusbar
			invoke GetDlgItem,hWin,IDC_SBR
			mov		hCtl,eax
			invoke MoveWindow,hCtl,0,0,0,0,TRUE
			;Get height of statusbar
			invoke GetWindowRect,hCtl,addr rect
			mov		eax,rect.bottom
			sub		eax,rect.top
		.endif
		push	eax
		;Get size of windows client area
		invoke GetClientRect,hWin,addr rect
		;Subtract height of statusbar from bottom
		pop		eax
		sub		rect.bottom,eax
		;Add height of toolbar to top
		pop		eax
		add		rect.top,eax
		;Get new height of RichEdit window
		mov		eax,rect.bottom
		sub		eax,rect.top
		mov		ht,eax
		;Resize RichEdit window
		invoke MoveWindow,hREd,0,rect.top,rect.right,ht,TRUE
	.elseif eax==WM_CLOSE 
		invoke WantToSave
		.if !eax
			invoke DestroyWindow,hWin
		.endif
	.elseif eax==WM_DESTROY
		invoke DeleteObject,hFont
		invoke PostQuitMessage,NULL
	.else
		invoke DefWindowProc,hWin,uMsg,wParam,lParam
		ret
	.endif
	xor    eax,eax
	ret
WndProc endp

end start

⌨️ 快捷键说明

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