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

📄 msgwindow.asm

📁 罗云彬32位汇编代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
		db	'WM_INPUTLANGCHANGE       ',0
		db	'WM_TCARD                 ',0
		db	'WM_HELP                  ',0
		db	'WM_USERCHANGED           ',0
		db	'WM_NOTIFYFORMAT          ',0
		db	'WM_CONTEXTMENU           ',0
		db	'WM_STYLECHANGING         ',0
		db	'WM_STYLECHANGED          ',0
		db	'WM_DISPLAYCHANGE         ',0
		db	'WM_GETICON               ',0
		db	'WM_SETICON               ',0
		db	'WM_NCCREATE              ',0
		db	'WM_NCDESTROY             ',0
		db	'WM_NCCALCSIZE            ',0
		db	'WM_NCHITTEST             ',0
		db	'WM_NCPAINT               ',0
		db	'WM_NCACTIVATE            ',0
		db	'WM_GETDLGCODE            ',0
		db	'WM_SYNCPAINT             ',0
		db	'WM_NCMOUSEMOVE           ',0
		db	'WM_NCLBUTTONDOWN         ',0
		db	'WM_NCLBUTTONUP           ',0
		db	'WM_NCLBUTTONDBLCLK       ',0
		db	'WM_NCRBUTTONDOWN         ',0
		db	'WM_NCRBUTTONUP           ',0
		db	'WM_NCRBUTTONDBLCLK       ',0
		db	'WM_NCMBUTTONDOWN         ',0
		db	'WM_NCMBUTTONUP           ',0
		db	'WM_NCMBUTTONDBLCLK       ',0
		db	'WM_KEYDOWN               ',0
		db	'WM_KEYUP                 ',0
		db	'WM_CHAR                  ',0
		db	'WM_DEADCHAR              ',0
		db	'WM_SYSKEYDOWN            ',0
		db	'WM_SYSKEYUP              ',0
		db	'WM_SYSCHAR               ',0
		db	'WM_SYSDEADCHAR           ',0
		db	'WM_KEYLAST               ',0
		db	'WM_INITDIALOG            ',0
		db	'WM_COMMAND               ',0
		db	'WM_SYSCOMMAND            ',0
		db	'WM_TIMER                 ',0
		db	'WM_HSCROLL               ',0
		db	'WM_VSCROLL               ',0
		db	'WM_INITMENU              ',0
		db	'WM_INITMENUPOPUP         ',0
		db	'WM_MENUSELECT            ',0
		db	'WM_MENUCHAR              ',0
		db	'WM_ENTERIDLE             ',0
		db	'WM_CTLCOLORMSGBOX        ',0
		db	'WM_CTLCOLOREDIT          ',0
		db	'WM_CTLCOLORLISTBOX       ',0
		db	'WM_CTLCOLORBTN           ',0
		db	'WM_CTLCOLORDLG           ',0
		db	'WM_CTLCOLORSCROLLBAR     ',0
		db	'WM_CTLCOLORSTATIC        ',0
		db	'WM_MOUSEMOVE             ',0
		db	'WM_LBUTTONDOWN           ',0
		db	'WM_LBUTTONUP             ',0
		db	'WM_LBUTTONDBLCLK         ',0
		db	'WM_RBUTTONDOWN           ',0
		db	'WM_RBUTTONUP             ',0
		db	'WM_RBUTTONDBLCLK         ',0
		db	'WM_MBUTTONDOWN           ',0
		db	'WM_MBUTTONUP             ',0
		db	'WM_MBUTTONDBLCLK         ',0
		db	'WM_MOUSELAST             ',0
		db	'WM_PARENTNOTIFY          ',0
		db	'WM_ENTERMENULOOP         ',0
		db	'WM_EXITMENULOOP          ',0
		db	'WM_MDICREATE             ',0
		db	'WM_MDIDESTROY            ',0
		db	'WM_MDIACTIVATE           ',0
		db	'WM_MDIRESTORE            ',0
		db	'WM_MDINEXT               ',0
		db	'WM_MDIMAXIMIZE           ',0
		db	'WM_MDITILE               ',0
		db	'WM_MDICASCADE            ',0
		db	'WM_MDIICONARRANGE        ',0
		db	'WM_MDIGETACTIVE          ',0
		db	'WM_MDISETMENU            ',0
		db	'WM_DROPFILES             ',0
		db	'WM_MDIREFRESHMENU        ',0
		db	'WM_CUT                   ',0
		db	'WM_COPY                  ',0
		db	'WM_PASTE                 ',0
		db	'WM_CLEAR                 ',0
		db	'WM_UNDO                  ',0
		db	'WM_RENDERFORMAT          ',0
		db	'WM_RENDERALLFORMATS      ',0
		db	'WM_DESTROYCLIPBOARD      ',0
		db	'WM_DRAWCLIPBOARD         ',0
		db	'WM_PAINTCLIPBOARD        ',0
		db	'WM_VSCROLLCLIPBOARD      ',0
		db	'WM_SIZECLIPBOARD         ',0
		db	'WM_ASKCBFORMATNAME       ',0
		db	'WM_CHANGECBCHAIN         ',0
		db	'WM_HSCROLLCLIPBOARD      ',0
		db	'WM_QUERYNEWPALETTE       ',0
		db	'WM_PALETTEISCHANGING     ',0
		db	'WM_PALETTECHANGED        ',0
		db	'WM_HOTKEY                ',0
		db	'WM_PRINT                 ',0
		db	'WM_PRINTCLIENT           ',0
		db	'WM_PENWINFIRST           ',0
		db	'WM_PENWINLAST            ',0
		db	'WM_MENURBUTTONUP         ',0
		db	'WM_MENUDRAG              ',0
		db	'WM_MENUGETOBJECT         ',0
		db	'WM_UNINITMENUPOPUP       ',0
		db	'WM_MENUCOMMAND           ',0
		db	'WM_NEXTMENU              ',0
		db	'WM_SIZING                ',0
		db	'WM_CAPTURECHANGED        ',0
		db	'WM_MOVING                ',0
		db	'WM_POWERBROADCAST        ',0
		db	'WM_DEVICECHANGE          ',0
		db	'WM_ENTERSIZEMOVE         ',0
		db	'WM_EXITSIZEMOVE          ',0
;********************************************************************
szDestClass	db	'Notepad',0
szFormat	db	'WndProc: [%04x]%s %08x %08x',0dh,0
szCreateWindow1	db	'Creating Window...',0dh,0
szCreateWindow2	db	'CreateWindow end',0dh,0
szShowWindow1	db	'Showing Window...',0dh,0
szShowWindow2	db	'ShowWindow end',0dh,0
szUpdateWindow1	db	'Updating Window...',0dh,0
szUpdateWindow2	db	'UpdateWindow end',0dh,0
szGetMsg1	db	'Getting Message...',0dh,0
szGetMsg2	db	'[%04x]Message gotten',0dh,0
szDispatchMsg1	db	'Dispatching Message...',0dh,0
szDispatchMsg2	db	'DispatchMessage end',0dh,0

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

		.code

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_SendtoNotepad	proc	_lpsz
		local	@hWinNotepad

		pushad
		invoke	FindWindow,addr szDestClass,NULL
		.if	eax
			mov	ecx,eax
			invoke	ChildWindowFromPoint,ecx,20,20
		.endif
		.if	eax
			mov	@hWinNotepad,eax
			mov	esi,_lpsz
			@@:
			lodsb
			or	al,al
			jz	@F
			movzx	eax,al
			invoke	PostMessage,@hWinNotepad,WM_CHAR,eax,1
			jmp	@B
			@@:
		.endif
		popad
		ret

_SendtoNotepad	endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ShowMessage	proc	_uMsg,_wParam,_lParam
		local	@szBuffer[128]:byte

		pushad
;********************************************************************
; 查找消息的说明字符串
;********************************************************************
		mov	eax,_uMsg
		mov	edi,offset dwMsgTable
		mov	ecx,MSG_TABLE_LEN
		cld
		repnz	scasd
		.if	ZERO?
			sub	edi,offset dwMsgTable + sizeof dword
			shr	edi,2
			mov	eax,edi
			mov	ecx,MSG_STRING_LEN
			mul	ecx
			add	eax,offset szStringTable
;********************************************************************
; 翻译格式并发送到 Notepad 窗口
;********************************************************************
			invoke	wsprintf,addr @szBuffer,addr szFormat,\
				_uMsg,eax,_wParam,_lParam
			invoke	_SendtoNotepad,addr @szBuffer
		.endif
		popad
		ret

_ShowMessage	endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 窗口过程
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcWinMain	proc	uses ebx edi esi,hWnd,uMsg,wParam,lParam

		invoke	_ShowMessage,uMsg,wParam,lParam
		mov	eax,uMsg
;********************************************************************
		.if	eax ==	WM_CLOSE
			invoke	DestroyWindow,hWinMain
			invoke	PostQuitMessage,NULL
;********************************************************************
		.else
			invoke	DefWindowProc,hWnd,uMsg,wParam,lParam
			ret
		.endif
;********************************************************************
		xor	eax,eax
		ret

_ProcWinMain	endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain	proc
		local	@szBuffer[128]:byte
		local	@stWndClass:WNDCLASSEX
		local	@stMsg:MSG

		invoke	GetModuleHandle,NULL
		mov	hInstance,eax
		invoke	RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
;********************************************************************
; 注册窗口类
;********************************************************************
		invoke	LoadCursor,0,IDC_ARROW
		mov	@stWndClass.hCursor,eax
		push	hInstance
		pop	@stWndClass.hInstance
		mov	@stWndClass.cbSize,sizeof WNDCLASSEX
		mov	@stWndClass.style,CS_HREDRAW or CS_VREDRAW
		mov	@stWndClass.lpfnWndProc,offset _ProcWinMain
		mov	@stWndClass.hbrBackground,COLOR_WINDOW + 1
		mov	@stWndClass.lpszClassName,offset szClassName
		invoke	RegisterClassEx,addr @stWndClass
;********************************************************************
; 建立并显示窗口
;********************************************************************
		invoke	_SendtoNotepad,addr szCreateWindow1
		invoke	CreateWindowEx,WS_EX_CLIENTEDGE	,offset szClassName,offset szCaptionMain,\
			WS_OVERLAPPEDWINDOW,\
			50,50,100,100,\
			NULL,NULL,hInstance,NULL
		mov	hWinMain,eax
		invoke	_SendtoNotepad,addr szCreateWindow2

		invoke	_SendtoNotepad,addr szShowWindow1
		invoke	ShowWindow,hWinMain,SW_SHOWNORMAL
		invoke	_SendtoNotepad,addr szShowWindow2

		invoke	_SendtoNotepad,addr szUpdateWindow1
		invoke	UpdateWindow,hWinMain
		invoke	_SendtoNotepad,addr szUpdateWindow2
;********************************************************************
; 消息循环
;********************************************************************
		.while	TRUE
			invoke	_SendtoNotepad,addr szGetMsg1
			invoke	GetMessage,addr @stMsg,NULL,0,0
			push	eax
			invoke	wsprintf,addr @szBuffer,addr szGetMsg2,@stMsg.message
			invoke	_SendtoNotepad,addr @szBuffer
			pop	eax
			.break	.if eax	== 0

			invoke	_SendtoNotepad,addr szDispatchMsg1
			invoke	DispatchMessage,addr @stMsg
			invoke	_SendtoNotepad,addr szDispatchMsg2
		.endw
		ret

_WinMain	endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
		call	_WinMain
		invoke	ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		end	start

⌨️ 快捷键说明

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