文档章节

通过消息跨进程发送与接收 TCopyDataStruct 数据 - 回复 "skymesh"

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 362
阅读 4
收藏 0
点赞 0
评论 0

问题来源: http://www.cnblogs.com/del/archive/2009/10/09/1579614.html#1779614

这几天家有病人, 几天没上网了; 看到这个问题我会, 顺便回复了.

发送代码:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  h: HWND;
  Size: Integer;
  CopyDataStruct: TCopyDataStruct;
begin
  h := FindWindow(nil, '接收窗口'); { 按标题查找目标窗口 }
  if h > 0 then
  begin
    Size := ByteLength(Edit1.Text) + 2;   { 多出的两个字节用于后面的 #0 }
    CopyDataStruct.lpData := PChar(Edit1.Text + #0); { 要发送的字符串, #0 表示 PChar 结束}
    CopyDataStruct.dwData := WM_COPYDATA;            { 指定消息类型 }
    CopyDataStruct.cbData := Size;                   { 指定要发送的数据的大小 }
    SendMessage(h, WM_COPYDATA, 0, Integer(@CopyDataStruct)); { 发送 }
  end;
end;

end.

 
 
 
 
 

 

 

  

接收代码:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
  protected
    procedure WMCopyData(var Message: TWMCopyData); message WM_COPYDATA;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := '接收窗口';
end;

procedure TForm1.WMCopyData(var Message: TWMCopyData);
begin
  Memo1.Lines.Add(PChar(Message.CopyDataStruct.lpData));
end;

end.

 
 
 
 
 

 

 

  

该代码已在 Delphi 2010 下测试过了.

发现 skymesh 朋友对消息操作不是太熟, 顺便告知个小技巧(其实博客中可能早提到过):
在 TForm1 = class(TForm) ... end; 中执行 Ctrl+空格;
然后输入: wm...(譬如本例输入 wmcopyd 即可) 后回车;
接着执行 Ctrl+Shift+C, 会自动完成上面大部分的消息代码.

本文转载自:http://www.cnblogs.com/del/archive/2010/03/15/1686571.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2004
码字总数 14107
作品 0
深圳
程序员
跨进程通信之Messenger

1.简介 Messenger,顾名思义即为信使,通过它可以在不同进程中传递Message对象,通过在Message中放入我们需要的入局,就可以轻松实现数据的跨进程传递了。Messenger是一种轻量级的IPC方案,其...

lzwxx ⋅ 2017/07/04 ⋅ 0

Binder机制-简单用法(一)

Binder算是android里面比较难懂的部分了,但是非常重要,基本上,当我们深入到进程交互的阶段,Binder都是一个绕不开的槛,所以我也希望帮助大家更浅显地了解到这个知识点。笔者想通过3篇博文...

cjh94520 ⋅ 2017/05/07 ⋅ 0

Android Binder面试详解

一、Linux内核的基础知识 1、进程隔离/虚拟地址空间 2、系统调用 3、Linux跨进程通信机制 目前linux支持的IPC包括传统的管道、System V IPC、即消息队列/共享内存/信号量,以及socket中只有s...

千涯秋瑟 ⋅ 2017/12/03 ⋅ 0

Android 进程间通信——Service、Messenger

转载请注明出处:http://blog.csdn.net/vnanyesheshou/article/details/74198534 Android四大组件(二)Service 接着上一篇Service基础知识,这一篇主要说下介绍下绑定的服务端的三种方式:同...

VNanyesheshou ⋅ 2017/07/12 ⋅ 0

跨线程和跨进程的同步和通讯--ThreadMsg

threadmsg 实现了跨线程和跨进程的同步和通讯。这框架内包含了信号量,信箱,内存映射文件,阻塞通道,及简单消息流控制器等组件。 这个框架的目的是: 封装性:通过MSMQ消息队列发送消息的线...

匿名 ⋅ 2013/02/24 ⋅ 0

一个RPC服务客户端代理中间件的设计过程的回顾

一个RPC服务客户端代理中间件的设计过程的回顾 0 前言 近两年来,负责重新设计和开发一组RPC服务调用的中间件的通讯模块,包括RPC服务端模块(RPC服务容器I/O通讯模块),以及一个RPC客户端代...

先进哥 ⋅ 2016/06/05 ⋅ 0

四大组件之Service(三)-Service的跨进程调用

第4节 远程调用 之前提到过:如果站在Service与触发Service运行的那个组件的角度,根据它们的关系进行分类,有两种:本地Service,远程Service。 本地Service就是同一个应用的组件的调用本地...

anddlecn ⋅ 2016/06/14 ⋅ 0

基于Cat的分布式调用追踪

Cat是美团点评出的一款APM工具,同类的产品也有不少,知名的开源产品如zipkin和pinpoint;国内收费的产品如oneapm。考虑到Cat在互联网公司的应用比较广,因此被纳入选型队列,我也有幸参与技...

青夜之衫 ⋅ 2017/12/05 ⋅ 0

IPC(中)-进程间通讯方式详解

IPC(中) 1 Android中IPC方式 在第一篇IPC(上)中我们已经介绍了IPC的基础知识:序列化和Binder,本篇将详细介绍各种跨进程通讯方式.具体有如下几种: Intent中extras传递 共享文件 Binder Conte...

zly921112 ⋅ 2017/01/22 ⋅ 0

Messenger(信使(跨应用传递对象(数据)))的简单使用

首先有2个应用1个服务端(接收数据)1个客户端(发送数据) 服务端步骤: 1、创建一个服务继承Service 代码 public class MyMessengerService extends Service { //1、接收其他应用发送过来的消息...

初来小修 ⋅ 2016/02/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JDK1.6和JDK1.7中,Collections.sort的区别,

背景 最近,项目正在集成测试阶段,项目在服务器上运行了一段时间,点击表格的列进行排序的时候,有的列排序正常,有的列在排序的时候,在后台会抛出如下异常,查询到不到数据,而且在另外一...

tsmyk0715 ⋅ 13分钟前 ⋅ 0

spring RESTful

spring RESTful官方文档:http://spring.io/guides/gs/rest-service/ 1. 可以这么去理解RESTful:其实就是web对外提供的一种基于URL、URI的资源供给服务。不是一个原理性知识点。是一个方法论...

BobwithB ⋅ 15分钟前 ⋅ 0

C++ 中命名空间的 5 个常见用法

相信小伙伴们对C++已经非常熟悉,但是对命名空间经常使用到的地方还不是很明白,这篇文章就针对命名空间这一块做了一个叙述。 命名空间在1995年被引入到 c++ 标准中,通常是这样定义的: 命名...

柳猫 ⋅ 17分钟前 ⋅ 0

@Conditional派生注解

@Conditional派生注解(Spring注解版原生的@Conditional作用) 作用:必须是@Conditional指定的条件成立,才给容器中添加组件,配置配里面的所有内容才生效; @Conditional扩展注解 作用(判...

小致dad ⋅ 18分钟前 ⋅ 0

适配器模式

适配器模式 对象适配器 通过私有属性来实现的类适配器 通过继承来实现的接口适配器 通过继承一个默认实现的类实现的

Cobbage ⋅ 22分钟前 ⋅ 0

Java 限流策略

概要 在大数据量高并发访问时,经常会出现服务或接口面对暴涨的请求而不可用的情况,甚至引发连锁反映导致整个系统崩溃。此时你需要使用的技术手段之一就是限流,当请求达到一定的并发数或速...

轨迹_ ⋅ 26分钟前 ⋅ 0

GridView和子View之间的间隙

默认的情况下GridView和子View之间会有一个间隙,原因是GridView为了在子View被选中时在子View周围显示一个框。去掉的办法如下: android:listSelector="#0000" 或 setSelector(new ColorDra...

国仔饼 ⋅ 29分钟前 ⋅ 0

idea插件开发

1 刷新页面要使用多线程 2 调试要使用restart bug 不要去关闭调试的idea 否则再次启动会卡住

林伟琨 ⋅ 29分钟前 ⋅ 0

Java 内存模型

物理机并发处理方案 绝大多数计算任务,并不是单纯依赖 cpu 的计算完成,不可避免需要与内存交互,获取数据。内存要拿到数据,需要和硬盘发生 I/O 操作。计算机存储设备与 cpu 之间的处理速度...

长安一梦 ⋅ 36分钟前 ⋅ 0

思路分析 如何通过反射 给 bean entity 对象 的List 集合属性赋值?

其实 这块 大家 去 看 springmvc 源码 肯定可以找到实现办法。 因为 spirngmvc 的方法 是可以 为 对象 参数里面的 list 属性赋值的。 我也没有看 具体的 mvc 源码实现,我这里只是 写一个 简...

之渊 ⋅ 56分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部