首页
社区
课程
招聘
[求助]消息循环步骤的疑问
发表于: 2008-10-22 20:20 5435

[求助]消息循环步骤的疑问

2008-10-22 20:20
5435
用OD加载罗云彬的第一个窗口程序F9运行后 我在消息循环的入口和窗口过程的入口都下了断点为什么会没有什么反映没有中断下来?F9运行后 什么都不做的话应该还是在执行这个循环代码呀

                .while        TRUE                        //F2断点
                        invoke        GetMessage,addr @stMsg,NULL,0,0
                        .break        .if eax        == 0
                        invoke        TranslateMessage,addr @stMsg
                        invoke        DispatchMessage,addr @stMsg
                .endw
                ret

[注意]APP应用上架合规检测服务,协助应用顺利上架!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感觉DispatchMessage分派了一个消息后WINDOWS应该去回调窗口过程,但是 我在窗口过程那里下了断点一直没有中断,F8在消息循环里循环了N次也是一样 这个是怎么回事?
2008-10-22 20:57
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
经过一个不眠之夜的思考 DispatchMessage就把消息返回给WINDOWS后就自己返回了 至于调用的事交给WINDOWS自己去负责 他不管了 继续返回到GETMESSAGE循环,不知道对不对 还请高手们解答一下
2008-10-23 09:21
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不对,dispatchmessage肯定会调用相应的消息处理
2008-10-24 09:12
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
程序DispatchMessage消息后,消息是存再windows的消息队列里面。
windows操作系统从消息队列里面取消息,然后调用相应的消息处理过程。程序做的事情就是不断循环获取消息,解释消息,然后DispatchMessage
2008-10-24 09:21
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
你可以试一下在F8步过dispatchmessage前在消息处理入口下个断点 F8过dispatchmessage后并没有在消息处理入口那里中断
2008-10-24 10:35
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
照这样来说的话 程序运行的某一时刻是在不断循环获取消息和消息处理是一起运行的了?
2008-10-24 10:38
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
8
这个问题看上去简单,但是却涉及了windows的内部原理。
我的理解是DispatchMessage执行后,会把这个消息返回给windows系统,然后由windows系统通过CallWindowProcA调用正确的窗口处理函数。

有兴趣的同学可以跟踪下。
打开syser, ctrl + f12, 然后设置断点:
bpx DispatchMessageA.
2008-10-24 10:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
还看不太懂。学习中
2008-10-24 11:12
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
DispatchMessage的过程要复杂得多哦,可能包括PretranslateMessage等等一系列的处理
没有意外的话才会到达窗口处理函数,有可能在之前就被处理掉

在这一块DispatchMessage的处理肯定不会是异步地把消息丢给系统就不管了
2008-10-27 12:48
0
游客
登录 | 注册 方可回帖
返回
//