宝宝不海绵 发表于 2012-10-19 22:06:23

关于Wsprintf和MessageBox的配合使用

先贴上小甲鱼的源码
.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书上的原话:p115
invoke wsprintf,addr szBuffer,addr szReceive,lParam,lParam
      这条语句讲lParam的数值,以及lParam的字符串按照szReceive格式化串定义的格式转换,
并将结果存放到szBuffer中,然后程序将szBuffer中的内容在一个消息框中显示出来
invoke MessageBox,hWnd,offset szBuffer, addr szCaption,MB_OK


疑惑点:如果执行这句invoke        wsprintf,addr szBuffer,addr szStart,addr szText
szBuffer中的内容是什么
我认为是:‘按下OK按钮开始发送消息, 参数param是 %08x!’
                   'Send说:亲爱的,收到吗?
既然老罗的书上说把szBuffer中的内容显示在消息框中 为什么显示出来的内容是
‘按下OK按钮开始发送消息, 参数param是 00402075!’(此值不一定一样)
那后边的那一句'Send说:亲爱的,收到吗?’
如果说是因为wsprintf参数中addr szStart格式符就一个的话,那可以再加一句就像receive中那样
szStart            db    'Send说:按下OK按钮开始发送消息, 参数param是 %08x!',0dh,0ah
                        db        'Send说:指向的字符串是 "%s"',0

那么wsprintf如何更改?
我的意思是发送的时候把Buffer中的内容都显示出来

望高人指点一二





补充内容 (2012-10-19 22:09):
代码是直接复制的 复制时格式还好好的 传上来就变乱了
此代码是别人的老婆

宝宝不海绵 发表于 2012-10-20 08:47:40

高手去哪里了:@:@
页: [1]
查看完整版本: 关于Wsprintf和MessageBox的配合使用