|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
先发两段程序:
.386
.model flat,stdcall
option casemap:none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
hWnd dd ?
szBuffer db 256 dup (?)
.const
szCaption db '发信程序',0
szStart db 'Send说:按下OK按钮开始发送消息, 参数param是 %08x!',0
szReturn db 'Send说:消息已经发送!',0
szDestClass db 'MyClass',0 ;目标窗口的窗口类
szText db 'Send说:亲爱的,收到吗?,0
szNotFound db 'Send说:亲,没有找到接收的窗口!',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
接受程序:
.data?
hInstance dd ?
hWinMain dd ?
szBuffer db 512 dup (?)
.const
szClassName db 'MyClass',0
szCaptionMain db '回信程序',0
szReceive db 'Receive说:接受到 WM_SETTEXT 消息',0dh,0ah
db 'Receive说:param 的内容是 %08x',0dh,0ah
db 'Receive说:指向的字符串是 "%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
我想问的问题是,发送程序中,把需要发送的内容用wsprintf 写入了共享的内存中,那么接受的时候,是不是也可以从这个内存中提取写入的内容呢?
如果可以,那么这个共享内存的地址怎么得知,还有一个问题就是,接受程序的内容中,也有把一段字符串写入内存中,如果把这个一段去掉,那么程序运行的结果就是接受程序弹出的对话框,没有任何文字,那怎么才可以把发送程序中写入的内容直接在接受程序中显示呢
|
|