22、Windows API 进程间通信,剪贴板(Clipboard)

简介: 剪贴板由系统定义,并不属于任何一个特定的进程。系统中所有进程都可以访问和设置剪贴板。很多具有“复制”、“粘贴”功能的文字编译程序都是通过剪贴板进行操作。     剪贴板最大的特点就是数据传输没有明确的目标,数据是被动访问的,设置剪贴板的程序并不知道所设置的数据什么时候被访问,也不知道被哪个进程访问,剪贴板中的内容也可以多次访问,直到新的数据写入。

    剪贴板由系统定义,并不属于任何一个特定的进程。系统中所有进程都可以访问和设置剪贴板。很多具有“复制”、“粘贴”功能的文字编译程序都是通过剪贴板进行操作。<?xml:namespace prefix = o />

    剪贴板最大的特点就是数据传输没有明确的目标,数据是被动访问的,设置剪贴板的程序并不知道所设置的数据什么时候被访问,也不知道被哪个进程访问,剪贴板中的内容也可以多次访问,直到新的数据写入。因此通过剪贴板也是一种可供选择的进程间通信方式。但是由于系统中任何一个进程都可以无限制地访问剪贴板,剪贴板也是一种不可靠的通信方式。

参考[1,2]中介绍了对剪贴板的基本操作,包括设置剪贴板中的数据、从剪贴板获取数据等;及如何对剪贴板的修改进行监视,这种机制可以使用程序及时发现剪贴板中的数据变化;使用通过剪贴板传输数据可以具有实时性;还有剪贴板中数据的格式及自定义数据格式的方法。

Clipboard[3]

1、监视剪贴板

原理:

(1) WM_DRAWCLIPBOA

系统提供了WM_DRAWCLIPBOARD消息用于监视剪贴板的变。如果调用

SetClipboardViewer函数设置了窗口为剪贴板查看器,那么当剪贴板中的内容变化时,所注册的查看器窗口会收到WM_CHANGECBCHAIN消息和WM_DRAWCLIPBOARD消息。

    当剪贴板中的内容变化时,窗口会收到WM DRAWCLIPBOARD消息。当查看器链新的节点加入或有节点退出窗口会收到WM_CHANGECBCHAIN消息。

(2) SetClipboardViewer函数

2、剪贴板数据格式

    剪贴板中可能会存在各种各样的数据。因此剪贴板中在保存数据的同时还需要保存数据的格式信息。

    系统使用一个UINT类型的数据来表示剪贴板中的数据格式。在这些格式信息中,有很多是各种应用程序之间通用的,比如文本、位图等。这些数据格式已经由系统预先定义,称为标准格式。

    还有一些应用程序也希望自行定义剪贴板的数据格式,这样可以方便地在同一个应用程序的不同实例间进行数据传递而不需要对数据的格式进行过多的处理(典型的就包括Word)

参考

[1] 精通Windows API 函数、接口、编程实例

[2] http://www.cnblogs.com/mydomain/archive/2010/09/04/1818257.html

[3] http://msdn.microsoft.com/en-us/library/ms649012%28VS.85%29.aspx

目录
相关文章
|
Windows
windows环境下根据端口号查询进程编号并杀掉此进程
windows环境下根据端口号查询进程编号并杀掉此进程
275 0
|
8月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
320 11
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
3603 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
人工智能 测试技术 API
Windows用户必备:Postman v11详细安装指南与API测试入门教程(附官网下载
Postman是全球领先的API开发与测试工具,支持REST、SOAP、GraphQL等协议调试。2025年最新版v11新增AI智能生成测试用例、多环境变量同步等功能,适用于前后端分离开发、自动化测试、接口文档自动生成及团队协作共享API资源。本文详细介绍Postman的软件定位、核心功能、安装步骤、首次配置、基础使用及常见问题解答,帮助用户快速上手并高效利用该工具进行API开发与测试。
|
开发框架 .NET API
Windows Forms应用程序中集成一个ASP.NET API服务
Windows Forms应用程序中集成一个ASP.NET API服务
468 9
|
存储 JavaScript 前端开发
Blazor 调用 Clipboard API 读写剪贴板数据
【10月更文挑战第14天】Blazor 是一个使用 .NET 和 C# 构建交互式 Web UI 的框架。由于浏览器安全策略,直接访问某些原生 API(如 Clipboard API)受限。通过 JavaScript 互操作性(JS Interop),可在 Blazor 中调用这些 API。首先在 HTML 定义 JavaScript 函数,再通过 `IJSRuntime` 调用。此外,需注意不同浏览器对 Clipboard API 的支持程度及用户隐私授权问题。
382 2
|
Java 关系型数据库 MySQL
java控制Windows进程,服务管理器项目
本文介绍了如何使用Java的`Runtime`和`Process`类来控制Windows进程,包括执行命令、读取进程输出和错误流以及等待进程完成,并提供了一个简单的服务管理器项目示例。
344 1
|
Java Windows
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?
372 1
Windows中如何查看被占用的端口、杀掉对应的进程
这篇文章介绍了在Windows系统中如何查看被占用的端口号以及如何杀掉占用端口的进程,包括使用命令提示符的`netstat -ano | findstr 端口号`命令查找进程PID,然后通过任务管理器或`taskkill /PID PID号`命令来结束进程。
Windows中如何查看被占用的端口、杀掉对应的进程
|
Python Windows
在 Windows 平台下打包 Python 多进程代码为 exe 文件的问题及解决方案
在使用 Python 进行多进程编程时,在 Windows 平台下可能会出现将代码打包为 exe 文件后无法正常运行的问题。这个问题主要是由于在 Windows 下创建新的进程需要复制父进程的内存空间,而 Python 多进程机制需要先完成父进程的初始化阶段后才能启动子进程,所以在这个过程中可能会出现错误。此外,由于没有显式导入 Python 解释器,也会导致 Python 解释器无法正常工作。为了解决这个问题,我们可以使用函数。
1050 5