Windows进程通信之剪贴板

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

本文由danny发表于http://blog.csdn.net/danny_share

 

前面两篇废话了这么多,本文开始上干货。

本文从剪贴板概念、剪贴板内容监听,普通数据类型,打开剪贴板,读剪贴板,写剪贴板、API汇总、他山之石、通过剪贴板实现进程间通信和总结共10个方面来较为深入地探讨Windows剪贴板的机制和使用。

 

说明:建议先下载本文配套工程,其中

(1)      ClipBoardDemo工程主要演示剪贴板相关API使用

(2)      MainProcess工程、ASubProcess工程、BSubProcess工程分别用于演示本文第九部分进程间通信的主进程和两个子进程

下载地址:http://download.csdn.net/detail/danny_share/7703279

 

一.剪贴板概念

剪贴板是系统级的堆空间,且任何一个应用程序都具备访问权,主要涉及复制(Ctrl+C),剪切(Ctrl+X)、粘贴(Ctrl+V)、清空和监听五个操作。

 

二.剪贴板内容监听

1.开始监听

【a】SetClipboardViewer将窗口加入监听链

【b】一旦剪贴板内容变化,系统会向监听链中的第一个注册监听的窗口发送WM_DRAWCLIPBOARD消息。为什么说是第一个呢?参见“消息链顺序”

【c】通过实验发现,如果新拷贝的内容和原来一样,系统还是会出发消息,说明普通的复制操作不管内容相不相同,都是直接覆盖原来剪贴板中的数据的

 

2.处理消息

(1)WM_CHANGECBCHAIN

【a】除自己以外,其他进程加入了监听链,或者退出了监听链,系统就会发出这个消息

【b】这里只说明监听者发生了变化,并不表示剪贴板中内容发生变化。

【c】如果存在下一个监听进程,那么需要将该消息发送给下一个监听者

     否则下一个监听者将收不到该消息

【d】对于MFC,可通过重载OnChangeCbChain函数实现

 

(2)WM_DRAWCLIPBOARD

【a】进程首次运行时或者是剪贴板内容发生变化时,进程都会收到这个消息

【b】如果存在下一个监听进程,那么需要将该消息发送给下一个监听者

否则下一个监听者将收不到该消息

【c】对于MFC,可通过重载OnDrawClipboard函数实现

 

3.停止监听

【a】使用ChangeClipboardChain()函数停止监听

【b】本质是发送WM_CHANGECBCHAIN消息,且将自己从监听链中去除

【c】其他监听进程将会收到WM_CHANGECBCHAIN消息

 

4.消息链顺序

【a】刚才一直在说当剪贴板内容变化时,进程将会收到WM_DRAWCLIPBOARD消息,然后该进程处理完以后,需向下个监听者发送该消息,那下个监听者是谁呢?

【b】我们在WM_DRAWCLIPBOARD消息处理函数OnDrawClipboard中closeClipboard后sleepl两秒后弹窗

【c】然后拷贝ClipBoardOne.exe三份,依次启动,我们分别取名A、B和C

【d】当剪贴板内容变化时,进程弹出剪贴板变化的顺序也是A、B、C,说明加入监听的顺序和收到消息的顺序是一致的。

 

三.数据类型

分类

ID

格式

说明

标准

1

CF_BITMAP

位图句柄

2

CF_DIB

 

3

CF_DIBV5

包含BITMAPV5HEADER结构且跟着位图颜色空间和位图数据

4

CF_DIF

 

5

CF_DSPBITMAP

 

6

CF_DSPENHMETAFILE

 

7

CF_DSPMETAFILEPICT

 

8

CF_DSPTEXT

 

9

CF_ENHMETAFILE

 

10

CF_GDIOBJFIRST

 

11

CF_GDIOBJLAST

 

12

CF_HDROP

拖放服务,文件拷贝也是这个类型

Windows编程的剪贴板机制 Windows编程的剪贴板机制   天极网2004-9-21 9:51:00 文/郎锐  摘要: 本文对Windows剪贴板机制作了深入、全面的阐述,具体内容包括:文本、位图、DSP、自定义格式剪贴板的使用和多数据项和延迟提交技术。  关键词: VC++6.0; 剪贴板机制;数据格式;延迟提交  Windows剪贴板  Windows剪贴板是一种 阅读详情

相关推荐

VC++6.0进程间通信与剪贴板操作实践

本文还有配套的精品资源,点击获取 简介:进程通信是操作系统的关键技术之一,允许不同进程间交换信息。在VC++6.0环境下,我们专注于实现剪贴板功能,使用Windows API中的剪贴板函数如OpenClipboard、CloseClipboard、EmptyClipboard和SetClipboardData等,以传递文本和图像数据。通过创建两个进程和定义消息处理函数,本实...

weixin_42361478的博客 1035

win32 剪切板操作 (转)

(一)ChangeClipboardChain 将剪贴的连接从一个句柄转到下一个句柄。 BOOL ChangeClipboardChain( HWND hWndRemove, // handle to window to remove HWND hWndNewNext // handle to next window ); (1)hWndRemove表示第一个窗口的句柄(断开)。 (2)hWndN...

weixin_34221276的博客 2496

易语言拦截剪贴板的数据

易语言拦截剪贴板的数据源码,拦截剪贴板的数据,关闭Office剪贴板,API_GetClipboardOwner,API_GetClipboardSequenceNumber,API_寻找顶级窗口,API_判断子窗口,API_取前台窗口,API_发送消息,API_设置窗口标题

12.2 剪贴板的高级用法

摘录于《Windows程序(第5版,珍藏版).CHarles.Petzold 著》P457         如前所述,在数据准备好后向剪贴板传输数据需要四个函数调用: OopnClipboard (hwnd); EmptyClipboard(); SetClipboardData(iFormat, hGlobal); CloseClipboard();         而要取得这些

wilim 2010

Windows进程通信——剪贴板

1. 概述 1.1 介绍 剪贴板(Clipped Board)实质是Win32 API中一组用来传输数据的函数和消息,为Windows应用程序之间进行数据共享提供了一个中介,Windows已建立的剪切(复制)-粘贴的机制为不同应用程序之间共享不同格式数据提供了一条捷径。当用户在应用程序中执行剪切或复制操作时,应用程序把选取的数据用一种或多种格式放在剪贴板上。然后任何其它应用程序都可以从剪贴板

m_buddy的博客 7717

WINDOWS 剪切板操作

1. 基本API介绍 在WINDOWS SDK 提供的几个剪切板操作函数: OpenClipboard 打开剪切板 CloseClipboard 关闭剪切板 EmptyClipboard 清空剪切板内容 GetClipboardData 获取剪切板内容 SetClipboardData 设置剪切板内容 IsClipboardFormatAvailable 判断剪...

weixin_34323858的博客 203

团灭Windows进程通信(二)——剪贴板在中间

说起Windows剪贴板,大家并不陌生,复制粘贴都需要经历它这一层,那么其剪贴板的实质其实就是一块预先分配好的内存地址,这个地址上存放着用户需要复制的内容或地址。所以,剪贴板其实就是提供了在不同进程间相互通信的发送获取数据的一个共享通道。 关于剪贴版其他的一些定义或意义,网上文章诸多,可以参考:http://www.cnblogs.com/1314NNNKKK/p/3522363.html———

黄黄臭臭的便便到铜钱 947

Windows进程通信方式[转]

1 进程进程通信   进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。多进程/多线程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(Application Programming Interface, API)提供了大量支持应用程序间数据共享和交换的机制,这些机制行使的活动称为进...

weixin_30767921的博客 93

Windows系统编程】07.进程通信与线程同步

Windows进程通信(邮槽,剪贴板),线程同步技术

WdIg-2023的博客 405

进程通信(用户自定义消息,用户注册消息,windows剪贴板,WM_COPY, 内存映射,对目标进程的内存)

发送端:新建一个基本对话框工程,添加6个文本框控件,并且关联控件变量(CString类型): m_strCopyData, m_strFileMap, m_strMem, m_strRegMsg, m_strUserMsg, m_strClipBoard然后在 CPP 文件里面,做如下定义:#define BUFFER_SIZE  0x100          // 用内存地址通信时分配的

华丽de魔术师 1562

操作系统实验四、使用命名管道实现进程通信

实验四:使用命名管道实现进程通信 一、实验目的 (1)了解Windows系统环境下的进程通讯机制 (2)熟悉Windows系统提供的进程通信API 二、实验准备知识:相关API函数介绍 1.建立命名通道 函数CreateNamePipe()创建一个命名管道实例,并返回该管道的句柄。 原型: HANDLE CreateNamePipe( LPCTSTR lpName,//命名管道的名字 DWORD dwOpenMode,//命名管道的访问模式 DWORD dwPipeMode,//命名管道的模式 DWORD

weixin_44775375的博客 2009

windows进程间通信的方式

1进程进程通信   进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。多进程/多线程是Windows操作系统的一个基本特征。MicrosoftWin32应用编程接口(ApplicationProgrammingInterface,API)提供了大量支持应用程序间数据共...

weixin_34127717的博客 118

windows进程间通信的方法

进程进程通信 进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。多进程/多线程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(Application Programming Interface, API)提供了大量支持应用程序间数据共享和交换的机制,这些机制行使的活动称为进程间通信(In...

kernweak的博客 1490

Windows线程+进程通信

Windows线程进程   1)定义   按照MS的定义, Windows中的进程简单地说就是一个内存中的可执行程序, 提供程序运行的各种资源. 进程拥有虚拟的地址空间, 可执行代码, 数据, 对象句柄集, 环境变量, 基础优先级, 以及最大最小工作集.    Windows中的线程是系统处理机调度的基本单位. 线程可以执行进程中的任意代码, 包括正在被其他线程执行的代码. 进程中的所

http://itech.cnblogs.com 603

Windows 进程间通信

1 进程进程通信   进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。多进程/多线程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(Application Programming Interface, API)提供了大量支持应用程序间数据共享和交换的机制,这些机制行使的活动称为进程间通...

weixin_33816946的博客 246

Win32 进程间通信的分析与比较

1 进程进程通信   进程是装入内存并准备执行的程序,每个进程都有私有的虚拟地址空间,由代码、数据以及它可利用的系统资源(如文件、管道等)组成。多进程/多线 程是Windows操作系统的一个基本特征。Microsoft Win32应用编程接口(Application Programming Interface, API)提供了大量支持应用程序间数据共享和交换的机制,这些机制行使的活动称为进程...

weixin_30414155的博客 137
上一篇: windows进程通信之开篇
下一篇: windows进程通信之消息和WM_COPYDATA
dannyshare
博客等级 码龄15年 8粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值