sendmessagePostMessage和SendMessage有什么区别?

sendmessage  时间:2021-08-08  阅读:()

postmessage和sendmessage有什么区别?

它们的区别是: SendMessage( )直接把一个消息发送给窗口过程,等消息被处理后才返回。

PostMessage( )只是把消息发送到消息队列,然后立即返回。

PostMessage和SendMessage的区别

一、主体不同 1、SendMessage:将指定的消息发送到一个或多个窗口。

2、PostMessage:是Windows API(应用程序接口) 中的一个常用函数,用于将一条消息放入到消息队列中。

二、特点不同 1、SendMessage:为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。

2、PostMessage:将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。

三、规则不同 1、SendMessage:指定要接收消息的窗口的句柄。

如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。

2、PostMessage:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、 被覆盖的窗口和弹出式窗口。

消息不被寄送到子窗口。

参考资料来源:百度百科-SendMessage 参考资料来源:百度百科-PostMessage

sendmessage这个发送消息的函数如何发送字符串

首先说怎么发送,然后说怎么接收: 自己定义一个消息,加上一个消息响应函数。

然后用SendMessage把字符串的地址发过去。

比如VC环境: 在stdafx.h中, #define MY_MESSAGE USER+1 定义一个函数用来发送,可以是定时器,可以是按钮。

void send() { CString str; str = "12345"; ::SendMessage(hWnd,MY_MESSAGE ,(WPARAM)&str); } 在你的类头文件.h中: afx_msg void MyFunction(WPARAM wParam,LPARAM lParam); 在.cpp中 BEGIN_MESSAGE_MAP下面加入: ON_MESSAGE(MY_MESSAGE ,MyFunction) 在后面加上你的函数体 void 你的类名::MyFunction(WPARAM wParam,LPARAM lParam) { //如果你发送的字符串的地址在WPARAM中,则用WPARAM来接收 CString* pStr = (CString*)wParam. AfxMessageBox(*pStr); } 你要注意的是:这只能适合SendMessage,如果你要使用PostMessage,就要把你发送的字符串设定为类的成员,或者全局的,不能是临时变量。

因为SendMessage是要让消息响应函数执行完了才会返回,所以str是不会被系统释放的。

PostMessage是直接返回,于是你传了一个str的地址过去,但是消息响应函数执行的时候,str已经被删除了,这个时候的地址是一个不可知的内容,程序就会发生内存泄露,所以还是推荐你定义一个字符串专门用来发送。

PostMessage和SendMessage有什么区别?

在控制别的应用程序的时候,经常需要等待直到某个功能结束,例如: 打开一个窗口-->等待直到窗口结束 这个时候就可以用到SendMessage 如果在打开这个窗口后仍然需要对该窗口的界面进行设置,比如Edit的value等等,比如: 打开一个窗口-->控制窗口的control的属性 这个时候就需要PostMessage使用一个钩子程序截获消息后,使用SendMessage把消息发送到主处理程序进行处理,但是在主处理程序还没有完成任务的时候,被设置钩子的程序进入了停止的状态,不可以处理WM_PAINT, WM_MOVE, .......等的基本信息, 必须要等SendMessage发送出的消息完成后,才能继续运行,整个界面一片空白,把钩子消息设置成PostMessage的发送消息形式后,问题解决! 我查了MSDN对这两个API的定义, PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行; 而SendMessage必须等待其他程序处理消息后才返回,继续执行。

PostMessage的返回值表示PostMessage函数执行是否正确; 而SendMessage的返回值表示其他程序处理消息后的返回值。

使用这两个发送消息函数的最重要的是要看你的程序是否要对消息的滞后性关注否,PostMessage会造成消息的滞后性,而SendMessage则不会,但如果SendMessage消息处理失败,则会造成程序停止!

QQ防红跳转短网址生成网站源码(91she完整源码)

使用此源码可以生成QQ自动跳转到浏览器的短链接,无视QQ报毒,任意网址均可生成。新版特色:全新界面,网站背景图采用Bing随机壁纸支持生成多种短链接兼容电脑和手机页面生成网址记录功能,域名黑名单功能网站后台可管理数据安装说明:由于此版本增加了记录和黑名单功能,所以用到了数据库。安装方法为修改config.php里面的数据库信息,导入install.sql到数据库。...

legionbox:美国、德国和瑞士独立服务器,E5/16GB/1Gbps月流量10TB起/$69/月起

legionbox怎么样?legionbox是一家来自于澳大利亚的主机销售商,成立时间在2014年,属于比较老牌商家。主要提供VPS和独立服务器产品,数据中心包括美国洛杉矶、瑞士、德国和俄罗斯。其中VPS采用KVM和Xen架构虚拟技术,硬盘分机械硬盘和固态硬盘,系统支持Windows。当前商家有几款大硬盘的独立服务器,可选美国、德国和瑞士机房,有兴趣的可以看一下,付款方式有PAYPAL、BTC等。...

RAKsmart:美国洛杉矶独服,E3处理器/16G/1TB,$76.77/月;美国/香港/日本/韩国站群服务器,自带5+253个IPv4

RAKsmart怎么样?RAKsmart机房即日起开始针对洛杉矶机房的独立服务器进行特别促销活动:低至$76.77/月,最低100Mbps带宽,最高10Gbps带宽,优化线路,不限制流量,具体包括有:常规服务器、站群服务器、10G大带宽服务器、整机机柜托管。活动截止6月30日结束。RAKsmart,美国华人老牌机房,专注于圣何塞服务器,有VPS、独立服务器等。支持PayPal、支付宝付款。点击直达...

sendmessage为你推荐
RFIlcm是什么单位蓝屏代码windows 系统蓝屏代码多少?超市管理系统超市收银系统boltzmann波尔兹曼常数的值是多少cs躲猫猫cs1.6捉迷藏模式怎么玩啊cs躲猫猫CS GO怎么玩躲猫猫qsv视频格式转换器QSV格式的视频用什么格式转换器可以转换?vrrp配置我准备做一个关于MSTP的配置,但是不知道如何去做,拓扑如下印度it印度的IT业spinmaster谁发明的汪汪队立大功这个动画片
windows虚机 北京主机租用 sugarhosts 360抢票助手 鲜果阅读 xfce 好看的桌面背景图 php免费空间 华为4核 权嘉云 dux 网站木马检测工具 最漂亮的qq空间 美国盐湖城 东莞主机托管 杭州电信宽带优惠 腾讯网盘 mteam 亿库 美国十大啦 更多