PeekMessage, GetMessage, PostMessage, SendMessage

1.peekmessage,getmessage区别
区别一:
他们如果没有捕获到消息,程序的主线程会被操作系统挂起。当操作系统再次回来照顾此线程时,发现消息队列中仍然没有消息可取,此时两个函数的行为就 不同了:
peekmessage不管消息队列里有没有消息都会马上返回,有消息返回消息,没消息返回空值,
getmessage等待到有消息的时候才返回,
区别二:
peekmessage可以根据参数决定是否将消息保留在队列中,
PM_NOREMOVE:该参数指示保留消息
PM_REMOVE:该参数指示移去消息

而getmessage获得消息后回把消息从消息队列中删去


2.PostMessage 与 SendMessage 函数对比
PostMessage函数只是向线程消息队列中添加消息,如果添加成功,则返回True,否则返回False,消息是否被处理,或处理的结果,就不知 道了。而SendMessage则有些不同,它并不是把消息加入到队列里,而是直接翻译消息和调用消息处理(线程向自己发送消息才是这样),直到消息处理 完成后才返回。所以,如果我们希望发送的消息立即被执行,就应该调用SendMessage。
  还有一点,就是SendMessage发送的消息由于不会被加入到消息队列中(错:线程向其他 线程发送消息也是追加到其他线程的发送消息队列的,即使这两个线程在同一个进程也是如此),所以通过PeekMessage或GetMessage是不能 获取到由SendMessage发送的消息。
  另外,有些消息用PostMessage不会成功,比如wm_settext。所以不是所有的 消息都能够用PostMessage的。

3.  PeekMessage   与PostMessage   是异步函数,GetMessage与SendMessage   是同步函数 

4.PeekMessage 与 GetMessage 是获取消息。SendMessage 与 PostMessage 是发送消息。


原文地址:https://www.cnblogs.com/actionke/p/4192628.html