SendMessage原理初探

今天跟踪一下SendMessage的实现。

用向导先创建一个Windows application。

向导生成了一个简单的窗口,如下。

在File菜单添加SendMessage,顺便添加一个PostMessage,点击菜单打开关于对话框,加入已下代码。

用WinDbg调试,点击SendMessage,程序断在IDM_ABOUT的时候查看堆栈。

原来SendMessage是通过内部调用SendMessageWorker通过InternalCallWinProc直接调用的WndProc!!

跟踪到调用InternalCallWinProc的地方看一下。

0x111就是WM_COMMAND,果然是直接把参数传给了InternalCallWinProc

 

 

 

 

 

 

 

 

 

 

 

 

不用说,InternalCallWinProc肯定是调用了WndProc

。。。。大概就是这么个流程,所以以后有人问SendMessage怎么实现,简单回单一句话就是直接调用WndProc,如下图。

注:只针对同线程调用。

所以将代码这样修改后,功能和SendMessage看起来并没有区别。

转载于:https://www.cnblogs.com/cartler/p/3495990.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值