None.gif;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 Sender.asm
None.gif;
 从一个程序向另一个窗口程序发送消息 之 发送程序
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        .386
None.gif        .model flat,stdcall
None.gif        option 
casemap:none
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 Include 文件定义
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
include        windows.inc
None.gifinclude        user32.
inc
None.gifincludelib    user32.lib
None.gifinclude        kernel32.
inc
None.gifincludelib    kernel32.lib
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 数据段
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        .data
None.gifhWnd        dd    ?
None.gifszBuffer    db    
256 dup (?)
None.gif
None.gif        .const
None.gifszCaption    db    
'SendMessage',0
None.gifszStart        db    
'Press OK to start SendMessage, param: %08x!',0
None.gifszReturn    db    
'SendMessage returned!',0
None.gifszDestClass    db    
'MyClass',0    ;目标窗口的窗口类
None.gif
szText        db    'Text send to other windows',0
None.gifszNotFound    db    
'Receive Message Window not found!',0
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 代码段
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        .code
None.gif
start:
None.gif        invoke    FindWindow,addr szDestClass,NULL
None.gif        .if    eax
None.gif            
mov    hWnd,eax    ;找到目标窗口则发送消息
None.gif
            invoke    wsprintf,addr szBuffer,addr szStart,addr szText
None.gif            invoke    MessageBox,NULL,offset szBuffer,offset szCaption,MB_OK
None.gif            invoke    SendMessage,hWnd,WM_SETTEXT,
0,addr szText
None.gif            invoke    MessageBox,NULL,offset szReturn,offset szCaption,MB_OK
None.gif        .else
None.gif            invoke    MessageBox,NULL,offset szNotFound,offset szCaption,MB_OK
None.gif        .endif
None.gif        invoke    ExitProcess,NULL
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        end    start
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif

消息发送者代码:

None.gif; Receiver.asm
None.gif;
 从一个程序向另一个窗口程序发送消息 之 消息接收程序
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif

None.gif        .
386
None.gif        .model flat,stdcall
None.gif        option 
casemap:none
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 Include 文件定义
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
include        windows.inc
None.gifinclude        gdi32.
inc
None.gifincludelib    gdi32.lib
None.gifinclude        user32.
inc
None.gifincludelib    user32.lib
None.gifinclude        kernel32.
inc
None.gifincludelib    kernel32.lib
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 数据段
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        .data?
None.gif
None.gifhInstance    dd    ?
None.gifhWinMain    dd    ?
None.gifszBuffer    db    
512 dup (?)
None.gif
None.gif        .const
None.gifszClassName    db    
'MyClass',0
None.gifszCaptionMain    db    
'Receive Message',0
None.gif
None.gifszReceive    db    
'Receive WM_SETTEXT message',0dh,0ah
None.gif        db    
'param: %08x',0dh,0ah
None.gif        db    
'text: "%s"',0dh,0ah,0
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 代码段
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        .code
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif;
 窗口过程
None.gif;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
_ProcWinMain    proc    uses ebx edi esi,hWnd,uMsg,wParam,lParam
None.gif
None.gif        
mov    eax,uMsg
None.gif
;****************************************************************
None.gif
        .if    eax ==    WM_CLOSE
None.gif            invoke    DestroyWindow,hWinMain
None.gif            invoke    PostQuitMessage,NULL
None.gif
;****************************************************************
None.gif;
 收到 WM_SETTEXT 消息则将消息字符串和字符串地址显示出来
None.gif;
****************************************************************
None.gif
        .elseif    eax ==    WM_SETTEXT
None.gif            invoke    wsprintf,addr szBuffer,addr szReceive,\
None.gif                lParam,lParam
None.gif            invoke    MessageBox,hWnd,offset szBuffer,addr szCaptionMain,MB_OK
None.gif
;****************************************************************
None.gif
        .else
None.gif            invoke    DefWindowProc,hWnd,uMsg,wParam,lParam
None.gif            
ret
None.gif        .endif
None.gif
;****************************************************************
None.gif
        xor    eax,eax
None.gif        
ret
None.gif
None.gif_ProcWinMain    endp
None.gif
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
_WinMain    proc
None.gif        local    
@stWndClass:WNDCLASSEX
None.gif        local    
@stMsg:MSG
None.gif
None.gif        invoke    GetModuleHandle,NULL
None.gif        
mov    hInstance,eax
None.gif        invoke    RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
None.gif
;****************************************************************
None.gif;
 注册窗口类
None.gif;
****************************************************************
None.gif
        invoke    LoadCursor,0,IDC_ARROW
None.gif        
mov    @stWndClass.hCursor,eax
None.gif        
push    hInstance
None.gif        
pop    @stWndClass.hInstance
None.gif        
mov    @stWndClass.cbSize,sizeof WNDCLASSEX
None.gif        
mov    @stWndClass.style,CS_HREDRAW or CS_VREDRAW
None.gif        
mov    @stWndClass.lpfnWndProc,offset _ProcWinMain
None.gif        
mov    @stWndClass.hbrBackground,COLOR_WINDOW + 1
None.gif        
mov    @stWndClass.lpszClassName,offset szClassName
None.gif        invoke    RegisterClassEx,addr @stWndClass
None.gif
;****************************************************************
None.gif;
 建立并显示窗口
None.gif;
****************************************************************
None.gif
        invoke    CreateWindowEx,WS_EX_CLIENTEDGE    ,offset szClassName,offset szCaptionMain,\
None.gif            WS_OVERLAPPEDWINDOW,\
None.gif            
50,50,200,150,\
None.gif            NULL,NULL,hInstance,NULL
None.gif        
mov    hWinMain,eax
None.gif        invoke    ShowWindow,hWinMain,SW_SHOWNORMAL
None.gif        invoke    UpdateWindow,hWinMain
None.gif
;****************************************************************
None.gif;
 消息循环
None.gif;
****************************************************************
None.gif
        .while    TRUE
None.gif            invoke    GetMessage,addr @stMsg,NULL,
0,0
None.gif            .break    .if eax    == 
0
None.gif            invoke    TranslateMessage,addr @stMsg
None.gif            invoke    DispatchMessage,addr @stMsg
None.gif        .endw
None.gif        
ret
None.gif_WinMain    endp
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
start:
None.gif        
call    _WinMain
None.gif        invoke    ExitProcess,NULL
None.gif
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
None.gif
        end    start
None.gif


MakeFile文件:

None.gifLINK_FLAG = /subsystem:windows
None.gifML_FLAG 
= //coff
None.gifall: Sender
.exe Receiver.exe
None.gifSender
.exe: Sender.obj
None.gif    Link 
$(LINK_FLAG) Sender.obj
None.gifReceiver
.exe: Receiver.obj
None.gif    Link 
$(LINK_FLAG) Receiver.obj
None.gif
.asm.obj:
None.gif    ml 
$(ML_FLAG) $<
None.gifclean:
None.gif    
del *.obj
None.gif