`

PostMessage 与 SendMessage

 
阅读更多
 PostMessage
 
函数功能描述:将一个消息放到与指定窗口创建的线程相关的消息队列中,不等线程处理消息就返回。消息队列里的消息通过调用GetMessage或PeekMessage函数而获得。
 
.函数原型:
    BOOL PostMessage(
      HWND hWnd,      // 目标窗口句柄
      UINT Msg,       // 被张贴的消息
      WPARAM wParam,  // 第一个消息参数
      LPARAM lParam   // 第二个消息参数
    );
 
.参数:
    hWnd
        窗口过程接收消息的窗口句柄。可取有特定含义的两个值:
        取值                  含义
        HWND_BROADCAST        消息被送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。
                              消息不被送到子窗口。
        NULL                  函数的行为和将参数dwThreadId设置为当前线程的标识符的PostThreadMessage函数一样。
 
    Msg
        指定被发送的消息;
    wParam
        指定附加消息的特定信息;
    lParam
        指定附加消息的特定信息。
 

.返回值:
    如果调用函数成功,返回非零值。
    如果调用函数失败,返回值是零。获得更多的错误信息,请调用GetLastError函数。
 

.备注:
    需要以 HWND_BROADCAST 方式通信的应用程序应该使用 RegisterWindowMessage 函数来获得应用程序间通信的独特消息。
    如果发送一个低于WM_USER范围的消息给异步消息函数(PostMessage.SendNotifyMessage或SendMesssgeCallback),消息参数不能包含指针,否则,操作将失败。函数将在接收线程处理消息之前返回,发送者将在内存被使用之前释放它。
 

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

相关推荐

    PostMessage和SendMessage的区别

    通过详细解释PostMessage与SendMessage的工作原理,我们可以更好地理解这两种方法如何影响应用程序的性能和响应性。 ### PostMessage与SendMessage的基本概念 #### PostMessage函数 PostMessage函数用于将消息放入...

    SendMessage与PostMessage区别

    在Windows编程中, SendMessage 和 PostMessage 是两个非常重要的API函数,它们都用于进程间或线程间的通信,向目标窗口发送消息。然而,两者的工作机制和应用场景有所不同。 **SendMessage** 函数是同步的,它会将...

    在C#中SendMessage和PostMessage的参数传递

    在C#中SendMessage和PostMessage的参数传递 在C#中可以使用Window API提供的SendMessage和PostMessage来传递参数。两者的区别简单介绍下:返回值的不同,我们先看一下 MSDN 里的声明: LRESULT SendMessage( HWND ...

    c# 线程通信PostMessage SendMessage PeekMessage

    本主题将深入探讨`FindWindow`、`PostMessage`、`SendMessage`以及`PeekMessage`这四个关键函数,它们在Windows API中扮演着重要的角色,特别是在线程间通信和窗口消息处理方面。 1. **FindWindow**: `FindWindow...

    MFC程序通过SendMessage或PostMessage实现进程间通信,实现很简单

    本篇文章将深入探讨如何使用MFC中的`SendMessage`和`PostMessage`函数来实现简单的进程间通信。 首先,`SendMessage`和`PostMessage`都是Windows API中处理消息的核心函数,它们都用于在窗口之间发送消息。但两者的...

    PostMessage SendMessage

    `SendMessage`函数与`PostMessage`类似,但其工作方式不同。`SendMessage`函数不仅将消息放入队列,还会等待消息被接收窗口处理完再返回。这使得`SendMessage`适合用于同步操作,例如获取控件的当前状态或更新控件的...

    MFC Sendmessage和Postmessage的使用

    1.下面我要实现的功能: 1.VS2010 基于对话框的操作; 2.两个对话框CMessageDlg和ConeDlg; 3.CMessageDlg为父窗口,ConeDlg为子窗口; 4.父窗口上有一个按钮用于弹出子窗口,子窗口也有一个按钮用来触发事件;...

    SendMessage PostMessage 消息处理详解

    本文将深入探讨`SendMessage`和`PostMessage`这两个函数,它们都是Windows API中用于发送消息的重要工具。朱建强先生的作品,通过实例解析了这两个函数的使用方法,非常适合初学者和有经验的开发者参考。 `...

    在C# API 消息处理 SendMessage PostMessage 进程通信 发消息 实例 文档资料

    主要示例在C#中的SendMessage,PostMessage,包含两个示例,一个资料文档,希望受用。 在C#中 API 消息处理 SendMessage PostMessage 进程通信 发消息 实例 文档资料

    MFC通过SendMessage或PostMessage实现两个进程通信功能,实现很简单

    资源包含两个源程序,里面是借用MFC的消息通信实现简单的两个进程间通信,嗯主要是通过SendMessage或PostMessage,功能实现简单便捷。该资源是我想搞点分数,分多的大佬麻烦赏赐点,没分的可以找找我另一个同样的...

    通过PostMessage,SendMessage将CString发送和发布到Windows

    标题中的“通过PostMessage,SendMessage将CString发送和发布到Windows”指的是在Microsoft的Windows操作系统环境中,使用C++编程语言,特别是MFC(Microsoft Foundation Classes)框架时,如何利用`PostMessage`和`...

    PostMessage 后台模拟按键 MOUSE VC原码

    6. **同步与异步**:`PostMessage`是异步的,意味着它立即返回,不会等待消息被处理。如果需要等待消息被处理,可以使用`SendMessage`函数,但这样会阻塞当前线程。 在这个项目中,`BackStageVK.cpp`可能包含了实现...

    PostMessage

    1. 异步通信:与SendMessage不同,PostMessage是非阻塞的。这意味着发送方不会等待消息被处理,而是立即返回,继续执行后续代码。 2. 安全性:PostMessage可用于向不再活动或者已经销毁的窗口发送消息。如果目标...

    易语言发送消息改变内容源码

    2. **PostMessage与SendMessage的区别**: - **PostMessage**:非同步发送,发送消息后立即返回,不等待接收方处理消息,适合用于不关心消息是否被处理的情况。 - **SendMessage**:同步发送,发送消息后会阻塞...

    API :GetScrollBarInfo GetScrollInfo SetScrollInfo PostMessage SendMessage 的实例

    API :GetScrollBarInfo GetScrollInfo SetScrollInfo PostMessage SendMessage 的实例 忙得很没有整理,自用备忘!嫌文件乱就不要下啦,我自己用的,如果要下的,直接看form2里面的api类!

    Microsoft Control Spy 汉化版

    1. **PostMessage与SendMessage函数** 在Windows编程中,`PostMessage` 和 `SendMessage` 是两个用于向目标窗口发送消息的重要函数。`PostMessage` 非阻塞,将消息放入目标窗口的消息队列后立即返回,而目标窗口将...

    进程间用postMessage发消息 ,在实际开发中的实例,

    与`PostMessage`不同,`SendMessage`是同步的,直到消息被处理,调用才会返回。这种方法在需要确保消息被立即处理的情况下比较合适,但可能会阻塞调用线程。 3. 管道(Pipe):在Windows系统中,管道是一种低级的...

    VC自定义消息响应函数postmessage用法示例

    下面将详细讲解如何在VC++中使用自定义消息响应函数`PostMessage`,以及与`SendMessage`的区别。 首先,自定义消息通常是在`resource.h`文件中定义的,例如: ```cpp #define WM_MY_MESSAGE WM_USER + 100 // 定义...

    postMessage详解和demo

    - **Web应用程序与插件/ActiveX对象**:当Web应用需要与非同源的插件或ActiveX对象交互时,`postMessage`提供了可能。 ### 5. 示例 #### iframe通信Demo ```html <!DOCTYPE html> function sendMessage() { ...

Global site tag (gtag.js) - Google Analytics