|
楼主 |
发表于 2012-8-27 19:47:09
|
显示全部楼层
错了。。。。1L是发送程序,3L是接收程序
以下:
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include user32.inc
include kernel32.inc
include windows.inc
includelib user32.lib
includelib kernel32.lib
includelib gdi32.lib
include gdi32.inc
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data?
hInstance dd ?
hWinMain dd ?
szBuffer db 100 dup(?)
.const
szClassName db 'MyClass',0
szCaption db 'My first window',0
szText db 'shit this is bull shit!',0
szReceiveMessage db 'This is the message I received:',0dh,0ah
db 'Param :%x08',0dh,0ah
db 'text:%s',0dh,0ah,0
szReceiveMessage2 db 'This is the message:',0dh,0ah
db 'lengthof data: %d',0dh,0ah
db 'text :"%s"',0dh,0ah
db 'value address:%08x',0dh,0ah,0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>窗口过程
.code
_ProcWinmain proc uses ebx esi edi hWnd,uMsg,wParam,lParam;需要几个信息参数:uMsg:消息类型,PARAM消息的两个参数
local @stPs:PAINTSTRUCT ;stPs 用于存放创建和关闭窗口的窗口绘制信息
local @stRect:RECT ;stRect用于存放窗口客户区的坐标
local @hDc ;hDc用于存放要输出的窗口设备
mov eax,uMsg
.if eax == WM_PAINT
invoke BeginPaint,hWnd,addr @stPs
mov @hDc,eax
invoke GetClientRect,hWnd,addr @stRect ;用于取得窗口客户区的坐标,将其值放入stRect
invoke DrawText,@hDc,addr szText,-1,addr @stRect,DT_SINGLELINE or\
DT_CENTER or DT_VCENTER
invoke EndPaint,hWnd,addr @stPs
.elseif eax == WM_CLOSE
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL
.elseif eax == WM_SETTEXT
invoke MessageBox,NULL,offset szText,offset szCaption,MB_OK
invoke wsprintf,offset szBuffer,addr szReceiveMessage,lParam,lParam
invoke MessageBox,NULL,offset szBuffer,offset szCaption,MB_OK
.elseif eax == WM_COPYDATA
mov eax,lParam
assume eax:ptr COPYDATASTRUCT
invoke wsprintf,offset szBuffer,offset szReceiveMessage2,\
[eax].cbData,[eax].lpData,[eax].lpData
invoke MessageBox,hWnd,offset szBuffer,offset szCaption,MB_OK
assume eax:nothing
.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
_ProcWinmain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_WinMain proc
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
mov @stWndClass.cbSize,sizeof @stWndClass
mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
mov @stWndClass.lpfnWndProc,offset _ProcWinmain
push hInstance
pop @stWndClass.hInstance
invoke LoadCursor,0,IDC_ARROW
mov @stWndClass.hCursor,eax
invoke LoadIcon,0,IDI_ASTERISK
mov @stWndClass.hIcon,eax
mov @stWndClass.hbrBackground,COLOR_WINDOW+1
mov @stWndClass.lpszClassName,offset szClassName
invoke RegisterClassEx,addr @stWndClass
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>创建窗口
invoke CreateWindowEx,WS_EX_OVERLAPPEDWINDOW,offset szClassName,offset szCaption,WS_OVERLAPPEDWINDOW,100,100,600,400,NULL,NULL,hInstance,NULL
mov hWinMain,eax
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>显示窗口
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
invoke UpdateWindow,hWinMain
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>消息循环
.while TRUE
invoke GetMessage,addr @stMsg,NULL,0,0
.break .if eax == 0 ;取得消息为WM_QUIT的时候返回0值
invoke TranslateMessage,addr @stMsg
invoke DispatchMessage,addr @stMsg
.endw
ret
_WinMain endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>开始
start :
call _WinMain
invoke ExitProcess,NULL
end start
|
|