WM_COPYDATA 消息实现进程间通信

【IPC进程间通信之四】数据复制消息WM_COPYDATA IPC进程间通信+数据复制消息WM_COPYDATA                IPC(Inter-Process Communication,进程间通信)。         数据复制消息WM_COPYDATA是Windows中一个特殊的消息,通过这个消息可以在进程间传递数据。         1.WM_COPYDATA:         WM_ 阅读详情

// WM_COPYDATA 使用的结构
/*
 * lParam of WM_COPYDATA message points to...
 */
typedef struct tagCOPYDATASTRUCT {
    ULONG_PTR dwData;
    DWORD cbData;
    PVOID lpData;
} COPYDATASTRUCT, *PCOPYDATASTRUCT;


// 自己实现例子, 注意内存释放。

// EXE1
void CEXE1Dlg::OnBnClickedButton1()
{
 COPYDATASTRUCT   CDS;
 char ch[256];
 sprintf(ch, "ffffffuuuuuuu");
 CWnd* pWnd = FindWindow(NULL,_T("EXE2"));

 if(pWnd)  
 {  
  CDS.dwData = 0;  
  CDS.cbData = sizeof(ch);
  CDS.lpData = ch;
  ::SendMessage(pWnd->m_hWnd, WM_COPYDATA,(WPARAM)0,(LPARAM)&CDS);
 }  
}


// EXE2
protected:
 virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);


LRESULT CEXE2Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 // TODO: 在此添加专用代码和/或调用基类
 if(message == WM_COPYDATA)
 {
  COPYDATASTRUCT* copyData = COPYDATASTRUCT*)lParam;
  int nDataSize = copyData->cbData;  

  if(nDataSize > 0)  
  {  
   char* ch = new char[nDataSize];  
   memcpy(ch, copyData->lpData, nDataSize);  
   ::MessageBoxA(m_hWnd, ch, ch, MB_OK);
   delete [] ch;  
  }  

 }


 return CDialog::WindowProc(message, wParam, lParam);
}

///////////////////////////////////////////////////////////////////////////////////////////////////////
// 网上例子
//   Allow   room   for   the   terminating   0,   hence   the   +   1  
      int   DataSize   =   UserTextMemo->Text.Length()   +   1;  
   
      //   Copy   data   to   a   local   buffer  
      char*   Data   =   new   char[DataSize];  
   
      memcpy(  
          Data,  
          UserTextMemo->Text.c_str(),  
          DataSize  
      );  
   
      COPYDATASTRUCT   CopyData;  
      CopyData.dwData   =   0;  
      CopyData.cbData   =   DataSize;  
      CopyData.lpData   =   Data;  
   
      SendMessage(  
          WindowHandle,  
          WM_COPYDATA,  
          reinterpret_cast   <WPARAM>   (Handle),  
          reinterpret_cast   <LPARAM>   (&CopyData)  
      );  
   
      delete   []   Data;  
   
  ======================================================================  
     
    //   Message.LParam   is   a   pointer   to   the   COPYDATASTRUCT,  
      //   so   we   will   cast   it   to   a   local   pointer  
      COPYDATASTRUCT*   CopyData   =   reinterpret_cast   <COPYDATASTRUCT*>  
                                                            (Message.LParam);  
   
      //   There   can   be   a   32   bit   value   in   the   dwData   field  
      //   and   more   data   in   the   lpData   field.  
      //   The   cbData   field   tells   us   the   size   of   the  
      //   data   pointed   to   by   lpData.   For   this   example,  
      //   we're   assuming   it's   either   dwData   or   lpData  
   
      int   DataSize   =   CopyData->cbData;  
   
      if(DataSize   >   0)   {  
          //   Make   a   local   copy  
          char*   Data   =   new   char[DataSize];  
          memcpy(Data,   CopyData->lpData,   DataSize);  
   
          //   Update   text   in   Memo   control  
          ReceiverMemo->Lines->Text   =   Data;  
   
          delete   []   Data;  
      }  
      else   {   //   We   received   a   number   in   CopyData->dwData  
          int   NumberFromExternalApplication   =   CopyData->dwData;  
   
          //   Update   text   in   Memo   control  
          ReceiverMemo->Lines->Text   =   IntToStr(  
              NumberFromExternalApplication  
          );  
      }


关于C#中实现两个应用程序消息通讯的问题 最近项目中需要在两个应用程序之间通讯,这里的两个程序是在一台机器上,看了csdn上的一篇文章《如何在C#用WM_COPYDATA消息来实现两个进程之间传递数据》,原理是讲清楚了,但使起来很不爽,决定自己封装一下,满足项目需要就行。 注意这里发送消息的函数: public static void SendMessage(string destProcessName, int msgID, str 阅读详情

相关推荐

实现Windows进程间通信的COPYDATA示例

本文还有配套的精品资源,点击获取 简介:进程间通信是IT领域关键技术之一,COPYDATA结构和消息是Windows中的轻量级IPC方式,适合简单数据传递。本文将详细介绍COPYDATA的结构成员、使用方法以及如何通过它实现进程间通信。COPYDATA消息适用于简单数据交换,如字符串和小文件内容,但对于更复杂或大量数据需要其他IPC机制。本文还将探讨一个实际的Demo示例,...

weixin_32921023的博客 1092

进程间使用copydata完成通信

进程间通信最简单的方式就是发送WM_COPYDATA消息。 发送WM_COPYDATA消息: SendMessage(接收窗口句柄, WM_COPYDATA, (WPARAM)发送窗口句柄, (LPARAM)&CopyData); 其中的CopyData为COPYDATASTRUCT结构类型,该结构定义如下: typedef struct tagCOPYDATASTRUCT { DWORD dwData; // Specifies data to be passed to the receiving application. DWORD cbData; //Specifies the size, in bytes, of the data pointed to by the lpData member. PVOID lpData; // Pointer to data to be passed to the receiving application. can be NULL. } COPYDATASTRUCT, *PCOPYDATASTRUCT; 接收WM_COPYDATA消息: 只要用COPYDATASTRUCT *pCopyData = (COPYDATASTRUCT*)lParam;就可以了。接收方应认为这些数据是只读的。 由于发送方在接收方处理WM_COPYDATA消息完毕前都是处于等待中,所以接收方应当尽快处理WM_COPYDATA消息。 本资源中user1需要先发送,携带有主窗口句柄,然后recv根据窗口句柄回复,详情见代码

c++ CopyData 使用结构体 - 跨进程

绪:跨进程数据交互方式可以使用多种方式,比如socket,本地文件,windows环境下自带的sendmessage之CopyData消息 这里只设计CopyData数据的封装处理 首先是简单的int数据 发送: int i_value = 1; COPYDATASTRUCT data; data.dwData = 1000; data.cbData = sizeof(i_value); data.lpData = &i_value; ::Send.

Fly_Sky 3018

ESP32 CAM使用教程(入门级)

串口被占用,可以关闭其他使用到串口的界面;先将手机也连上wifi,然后使用手机浏览器打开这个IP地址,注意手机连接的wifi需要和开发板的wifi一致,也就是程序里自己修改的那个wifi,否则无法打开IP地址;将开发板连接到电脑,点击点击工具→端口,然后选择自己实际接的COM口,不清楚COM口的可以打开电脑设备管理器查看一下,插拔设备看看哪个COM口会刷新就是哪个COM口;安装好esp32库之后,点击工具→开发板→esp32→AI Thinker ESP32-CAM,型号要仔细找找,不要选错了;

qq_34426854的博客 2万+

U盘 未知USB设备 设定地址失败 由于该设备有问题Windows 已将其停止(代码 43) 终极解决方案(做过系统装机盘而无法解决的必看)

U盘由于该设备有问题Windows 已将其停止(代码 43) 终极解决方案 我们在使用U盘的时候偶尔会碰到下列情况 一般是因为传输数据的过程中,死机或未响应直接断点或拔掉设备导致的,U盘再次插上之后出现设定地址失败。无法再次读取设备的数据。 解决方案: 首先请确认出现该情况不是因为你摔了U盘或接口处产生断裂这种物理损伤导致的!!! 首先请确认出现该情况不是因为你摔了U盘或接口处产生断裂这种物理损...

qq_39123987的博客 13万+

进程的通信 - WM_COPYDATA

在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。其中使用向另一进程发送消息是一种比较经济实惠的方法。通信需要将传递的消息封装在结构体中,在消息传递函数时作为lParam参数传递为自定义数据,按照自己习惯设置就好,不影响对象的传输;表示传递数据的大小(以字节为单位表示传递的数据,是一个void*类型使用时要用而不能使用PostMessage,因为SendMessage是的,会等待消息响应窗体处理消息完毕后再返回;

qq_54169998的博客 4441

ADG同步性能优化:如何正确配置standby redolog避免WAIT_FOR_LOG状态

本文深入剖析了Oracle ADG(Active Data Guard)同步中常见的WAIT_FOR_LOG状态,指出其根源在于Standby Redo Log(SRL)配置不当。文章提供了从诊断到优化的完整实践指南,重点阐述了SRL大小匹配、组数充足等黄金配置法则,帮助架构师从根本上避免同步延迟,实现稳定高效的实时数据同步。

weixin_29200485的博客 334

[PyQt5] 窗口接收WM_COPY消息

本程序是python qt5 创建的窗口,拦截外部消息给窗口发送的WM_COPY消息并显示出来。一般是用来作为窗口之间的通讯机制之一。python文件如下:qt5拦截消息。

wabil的专栏 414

18、Excel VBA编程:自定义函数创建与代码调试全攻略

本文详细介绍了Excel VBA中自定义函数的创建方法,以获取单元格注释为例演示了完整开发流程,并深入讲解了代码调试的重要性与核心工具。内容涵盖三种主要错误类型及其应对策略,系统介绍了调试工具栏、断点、逐行执行、Locals窗口、Immediate窗口等实用功能。通过综合案例展示了如何运用调试技术解决实际问题,并总结了提前规划、逐步测试、日志记录等最佳实践,帮助读者提升VBA编程效率与代码质量。

life6的博客 100

为什么我的 Spark Executor / Yarn Container 只有一个vCore?

在很多集群里,在关闭了Spark的DynamicAllocation的前提下(避免自动申请空闲资源,干扰测试结果),都会观察到:提交Spark作业时,申请 1 个 driver + n 个 executor 会在Yarn上会对应创建 n+1 个 container,但是每个container只有一个vCore,通过--driver-cores和--executor-cores设定的vCore数都未奏效。有人会因此错误的认为Yarn上的一个vCore对应一个Spark的executor,这是非常错误的,正确的

Laurence的技术博客 916

利用WM_COPYDATA消息实现进程间通信

  进程间通信最简单的方式就是发送WM_COPYDATA消息,下面通过例子来实现。       发送WM_COPYDATA消息:       SendMessage(hRecvWnd,                           WM_COPYDATA,                           (WPARAM)hSendWnd,                         ...

weixin_34110749的博客 264

贝叶斯网络在R语言中的应用

本文将介绍如何在R语言中使用贝叶斯网络进行建模和推断,并提供相应的源代码示例。以上就是在R语言中使用贝叶斯网络进行建模和推断的基本步骤。通过构建贝叶斯网络模型并使用相应的函数,我们可以对变量之间的依赖关系进行建模、推断和预测。在建立了贝叶斯网络模型后,我们可以使用数据集来估计变量之间的条件概率。接下来,我们可以使用数据集来构建贝叶斯网络模型。除了进行推断,我们还可以使用贝叶斯网络模型进行预测。一旦我们获得了贝叶斯网络模型和条件概率表,我们就可以使用该模型进行推断。首先,我们需要安装并加载相关的R包。

CodeMaven的博客 1277

在C#中用WM_COPYDATA消息来实现进程间通信

转:http://www.cppblog.com/mydriverc/articles/28732.html 进程之间通讯的几种方法: 在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有 使用内存映射文件 通过共享内存DLL共享内存 使用SendMessage向另一进程发送WM_COPYDATA消息 比起前两种的复杂实现来,WM_COPYDATA...

239

JeecgBoot passwordChange 任意用户密码重置漏洞复现

​JeecgBoot 框架passwordChange接口存在任意用户密码重置漏洞,未经身份验证的远程攻击者可以利用此漏洞重置管理员账户密码,从而接管系统后台,造成信息泄露,导致系统处于极不安全的状态。

0xSec 2641

如何获取不同分区模板的基因表达矩阵,abagen: Allen 大脑图谱遗传数据工具箱的使用笔记

基因表达从根本上塑造了人类大脑的结构和功能结构。像Allen人脑图谱这样的开放获取转录组数据集提供了前所未有的能力来检查这些机制。abagen工具箱,这是一个用于处理转录组学数据的开放获取软件包,并使用它来检查方法可变性如何影响使用Allen人脑图谱的研究结果。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 3340

【小沐学C++】C++实现进程通信(WM_COPYDATA,MFC,C#)

1、简介 当应用程序将数据传递给另一个应用程序时发送此消息。 This message is sent when an application passes data to another application. 应用程序必须使用SendMessage函数来发送此消息,而不是PostMessage函数。传递的数据不得包含指向接收数据的应用程序无法访问的对象的指针或其他引用。在发送此消息时,所引用的数据不得被发送进程的另一个线程更改。 接收应用程序应将数据视为只读。在个人通讯装置参数仅该消息的处理过程中是有

爱看书的小沐 2898

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

WM_COPYDATA实现进程间数据共享

出处:Windows应用程序捆绑核心编程 本文转自于 http://book.youkuaiyun.com/bookfiles/212/10021210209.shtml 进程通信——使用WM_COPYDATA消息通信 3.4  使用WM_COPYDATA消息通信 对于少量数据可以用WM_COPYDATA方便地实现通信。由于SendMessage()是阻塞的,只有接收方响应了消

haoruifly的专栏 1838

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Win32 API学习】进程通信——使用WM_COPYDATA消息通信 .

使用WM_COPYDATA消息通信 对于少量数据可以用WM_COPYDATA方便地实现通信。由于SendMessage()是阻塞的,只有接收方响应了消息,SendMessage()才能返回,否则一直阻塞。所以,对于大量数据来说,用SendMessage()就容易造成窗口假死。 1. 通过WM_COPYDATA消息实现进程间通信的方法 在Win32中,WM_COPYDATA消息主要目的是...

weixin_34120274的博客 653

windows进程通信WM_COPYDATA

打开vs2013,点击文件->新建 ->项目 点击确定,再点击下一步,点击确定,VS自动创建出模版文件 这里我们删除_tWinMain里面的两句, // 初始化全局字符串 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_INTERPROCESS

qinqin772的博客 674

c#中用WM_COPYDATA消息来实现进程间通信(转载 http://www.bloghome.cn/posts/4027)

进程之间通讯的几种方法:在Windows程序中,各个进程之间常常需要交换数据,进行数据通讯。常用的方法有使用内存映射文件通过共享内存DLL共享内存使用SendMessage向另一进程发送WM_COPYDATA消息比起前两种的复杂实现来,WM_COPYDATA消息无疑是一种经济实惠的一中方法.(ZT)WM_COPYDATA消息的主要目的是允许在进程间传递只读数据。Windows在通过WM_COP

fancy198189的专栏 532

进程通信之一 使用WM_COPYDATA C++及C#实现 z

原文地址:http://blog.youkuaiyun.com/morewindows/article/details/6804157 进程间通信最简单的方式就是发送WM_COPYDATA消息。本文提供C++及C#程序相互通信的二种实现方式。这样消息的接收端可以用C++实现,发送端可以用C++或C#实现。 发送WM_COPYDATA消息: SendMessage(接收窗口句柄, WM_C...

afeyfre41671的博客 101
上一篇: FL2440 Linux kernel + yaffs2根文件移植过程(二)
下一篇: TDI过滤驱动分析
shareCode
博客等级 码龄15年 125粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值