?? msgwindow.asm
字號:
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
;********************************************************************
; 翻譯格式并發(fā)送到 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
;********************************************************************
; 消息循環(huán)
;********************************************************************
.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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -