MFC SendMessage之间通过COPYDATA进行传输字符串

转载 2015年11月19日 15:45:24

1.新建两个对话框项目,分别在StdAfx.h中添加自定义消息
#define WM_CONTROLPRINT WM_USER+1001
2.发送端,获得其他窗口句柄的方法FindWindow();
复制代码
void CAaDlg::OnButtonsend() 
{
    // TODO: Add your control notification handler code here
    
//通过窗体名称,获取其他进程窗口句柄
    CWnd *pWnd=CWnd::FindWindow(NULL,_T("Bb")); 
    if(pWnd==NULL)
    {
        AfxMessageBox("接收程序没有运行!");
        return ;
    }

    pWnd->SendMessage(WM_CONTROLPRINT,NULL,0);
}
复制代码
3.接收端,接收其他进程发过来的消息。
复制代码
//消息响应函数
void  OnControlPrint(WPARAM wParam, LPARAM lParam);
void  CBbDlg::OnControlPrint(WPARAM wParam, LPARAM lParam)
{
        if(wParam==0 && lParam==0)
            AfxMessageBox("HelloWorld!");

        return ;
}
//添加消息映射
BEGIN_MESSAGE_MAP(CBbDlg, CDialog)
    //{{AFX_MSG_MAP(CBbDlg)
    ON_MESSAGE(WM_CONTROLPRINT, OnControlPrint)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
复制代码
运行结果:

源码下载:进程间发消息实例.rar
url:http://greatverve.cnblogs.com/archive/2012/10/01/mfc-SendMessage.html
参考:VCSendMessagePostMessage

SendMessage函數是阻塞的。PostMessage函數是非阻塞的。
SendMessage:
函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。

函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);

参数:

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

Msg:指定被发送的消息。

wParam:指定附加的消息指定信息。

IParam:指定附加的消息指定信息。

返回值:返回值指定消息处理的结果,依赖于所发送的消息。

备注:需要用HWND_BROADCAST通信的应用程序应当使用函数RegisterWindowMessage来为应用程序间的通信取得一个唯一的消息。

如果指定的窗口是由调用线程创建的,则窗口程序立即作为子程序调用。如果指定的窗口是由不同线程创建的,则系统切换到该线程并调用恰当的窗口程序。线程间的消息只有在线程执行消息检索代码时才被处理。发送线程被阻塞直到接收线程处理完消息为止。

Windows CE:Windows CE不支持Windows桌面平台支持的所有消息。使用SendMesssge之前,要检查发送的消息是否被支持。

速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:1.0及以上版本;头文件:winuser.h;输入库:user32.lib;Unicode:在Windows NT环境下以Unicode和ANSI方式实现。

PostMessage:
函数功能:该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回。消息队列里的消息通过调用GetMessage和PeekMessage取得。

函数原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);

参数

hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值:

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

NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样。

Msg:指定被寄送的消息。

wParam:指定附加的消息特定的信息。

IParam:指定附加的消息特定的信息。

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

备注:需要以 HWND_BROADCAST方式通信的应用程序应当用函数 RegisterwindwosMessage来获得应用程序间通信的独特的消息。

如果发送一个低于WM_USER范围的消息给异步消息函数(PostMessage.SendNotifyMessage,SendMesssgeCallback),消息参数不能包含指针。否则,操作将会失败。函数将再接收线程处理消息之前返回,发送者将在内存被使用之前释放

用WM_COPYDATA消息来实现两个进程之间传递数据

用WM_COPYDATA消息来实现两个进程之间传递数据 进程之间通讯的几种方法: 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有   使用内...
  • myiszjf
  • myiszjf
  • 2016年04月12日 23:29
  • 2808

SendMessage向编辑框发送消息

win32api.SendMessage 向编辑框发送消息
  • qq_29360495
  • qq_29360495
  • 2016年11月02日 14:21
  • 677

如何利用Python和win32编程避免重复性体力劳动(三)——文本框操作:WM_GETTEXT 和WM_SETTEXT

Part 3:控件操作A 通过目录操作,我们打开了打开文件对话框。为了简单起见,我们可以直接在文件名处填入要打开文件的绝对路径。怎么填呢? 首先还是定位到文本框控件 handle = find_sub...
  • seele52
  • seele52
  • 2013年12月27日 20:32
  • 5598

Python使用win32api系统钩子

有这样一个需求:客户的测试程序扫描一个产品的条形码,但是它没有和系统验证的功能(就是从系统里面检查是否可以在此测试位进行测试。比如说有10个测试位,这是第4个,那么就必须前面的3个测试位全部pass后...
  • liuyukuan
  • liuyukuan
  • 2016年10月30日 22:57
  • 3892

PostMessage与PostThreadMessage的区别

原文:http://topic.csdn.net/u/20100107/11/161c95f0-eec2-45fc-a433-f50ec725f09e.html PostMessage与PostTh...
  • gencheng
  • gencheng
  • 2013年07月19日 10:05
  • 10687

VC中使用自定义消息在进程间通讯

进程间通讯应该是老的内容了,相信用VC的大侠们都知道,书本上也都有介绍。我在这只是对自己用过的东西简单的总结一下,希望对有兴趣者有帮助。WINDOWS中进程间通讯的方式很多,如:消息机制,共享内存机制...
  • lujunql
  • lujunql
  • 2008年04月29日 09:25
  • 1813

利用COPYDATASTRUCT传递命令行参数给驻留内存的进程(SendMessage应用)

我们知道Window进程之间通过API的SendMessage方法传递消息。但是方法参数lParam是Long型,那么如果传递一个字符串(譬如命令行参数)应该怎么办呢,甚至一个对象、结构呢。VB的发送...
  • bbaojji
  • bbaojji
  • 2015年06月30日 15:04
  • 289

SendMessage和WM_COPYDATA的用法

SendMessage后面的两个参数,一个是WPARAM(UINT),一个是LPARAM(LONG),这是API函数。在VS和CB中都一样。传递字符串,如果是本进程,伪代码如下:String str ...
  • guolonghui
  • guolonghui
  • 2010年09月26日 15:05
  • 7297

MFC用WM_COPYDATA在进程间发送数据

在VC中用WM_COPYDATA在进程间发送数据 用WM_COPYDATA的前提: 1,知道接收消息进程的句柄。 2,接收消息进程重载了WM_COPYDATA消息映射,能对其做出反应(否则不...
  • wang010366
  • wang010366
  • 2013年12月12日 14:27
  • 7285

MFC中自由使用自定义消息

   消息映射、循环机制是Windows程序运行的基本方式。VC++ MFC 中有许多现成的消息句柄,可当我们需要完成其它的任务,需要自定义消息,就遇到了一些困难。在MFC ClassWizard中不...
  • daidongsheng
  • daidongsheng
  • 2006年12月30日 11:21
  • 939
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC SendMessage之间通过COPYDATA进行传输字符串
举报原因:
原因补充:

(最多只允许输入30个字)