; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Sender.asm ; 从一个程序向另一个窗口程序发送消息 之 发送程序 ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> . 386 .model flat,stdcall option casemap: none ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Include 文件定义 ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> include windows. inc include user32. inc includelib user32.libinclude kernel32. inc includelib kernel32.lib ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 数据段 ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .datahWnd dd ?szBuffer db 256 dup (?) .constszCaption db ' SendMessage ' , 0 szStart db ' Press OK to start SendMessage, param: %08x! ' , 0 szReturn db ' SendMessage returned! ' , 0 szDestClass db ' MyClass ' , 0 ; 目标窗口的窗口类 szText db ' Text send to other windows ' , 0 szNotFound db ' Receive Message Window not found! ' , 0 ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 代码段 ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .code start: invoke FindWindow,addr szDestClass,NULL .if eax mov hWnd,eax ; 找到目标窗口则发送消息 invoke wsprintf,addr szBuffer,addr szStart,addr szText invoke MessageBox,NULL,offset szBuffer,offset szCaption,MB_OK invoke SendMessage,hWnd,WM_SETTEXT, 0 ,addr szText invoke MessageBox,NULL,offset szReturn,offset szCaption,MB_OK .else invoke MessageBox,NULL,offset szNotFound,offset szCaption,MB_OK .endif invoke ExitProcess,NULL ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> end start ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 消息发送者代码: ; Receiver.asm ; 从一个程序向另一个窗口程序发送消息 之 消息接收程序 ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> . 386 .model flat,stdcall option casemap: none ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Include 文件定义 ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> include windows. inc include gdi32. inc includelib gdi32.libinclude user32. inc includelib user32.libinclude kernel32. inc includelib kernel32.lib ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 数据段 ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .data?hInstance dd ?hWinMain dd ?szBuffer db 512 dup (?) .constszClassName db ' MyClass ' , 0 szCaptionMain db ' Receive Message ' , 0 szReceive db ' Receive WM_SETTEXT message ' ,0dh,0ah db ' param: %08x ' ,0dh,0ah db ' text: "%s" ' ,0dh,0ah, 0 ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 代码段 ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .code ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 窗口过程 ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> _ProcWinMain proc uses ebx edi esi,hWnd,uMsg,wParam,lParam mov eax,uMsg ; **************************************************************** .if eax == WM_CLOSE invoke DestroyWindow,hWinMain invoke PostQuitMessage,NULL ; **************************************************************** ; 收到 WM_SETTEXT 消息则将消息字符串和字符串地址显示出来 ; **************************************************************** .elseif eax == WM_SETTEXT invoke wsprintf,addr szBuffer,addr szReceive,/ lParam,lParam invoke MessageBox,hWnd,offset szBuffer,addr szCaptionMain,MB_OK ; **************************************************************** .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 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 CreateWindowEx,WS_EX_CLIENTEDGE ,offset szClassName,offset szCaptionMain,/ WS_OVERLAPPEDWINDOW,/ 50 , 50 , 200 , 150 ,/ 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 invoke TranslateMessage,addr @stMsg invoke DispatchMessage,addr @stMsg .endw ret _WinMain endp ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> start: call _WinMain invoke ExitProcess,NULL ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> end start MakeFile文件: LINK_FLAG = / subsystem :windows ML_FLAG = / c / coffall: Sender . exe Receiver . exeSender . exe: Sender . obj Link $( LINK_FLAG ) Sender . objReceiver . exe: Receiver . obj Link $( LINK_FLAG ) Receiver . obj . asm . obj: ml $( ML_FLAG ) $< clean: del * . obj