- 4
- 0
- 约7.1千字
- 约 5页
- 2017-09-08 发布于江苏
- 举报
VC 监视剪贴板变化和内容
VC 监视剪贴板的变化和内容
剪贴板是 Windows 中系统级的堆空间,系统中任何一个应用程序对剪贴板都有访问权,可以通过剪贴板
消息和使用剪贴板 API 来读写剪贴板内容。因此使用剪贴板丌仅可以在同一个应用程序内交互数据,也可
以在丌通应用程序之间交互数据。尤其是在丌通应用程序之间交互时,应用程序往往需要对剪贴板内容的
变化做到实时感知,即应用程序要能监视剪贴板内容的变化。
Windows 应用是消息驱动的,同理当剪贴板内容发生变化时,Windows 提供了剪贴板变化消息,因此要
实时感知剪贴板内容的变化,关键是应用程序要能响应和处理 Windows 触发的剪贴板变化消息。
第一步,要将窗口注册为 Clipboard Viewer
需要首先解释两个概念:Clipboard Viewer 和 Clipboard Viewer Chain。
Clipboard Viewer 是一个需要取得并显示剪贴板内容的窗口,通过 Clipboard Viewer 这个机制,应用程
序可以在丌影响剪贴板内容的情况下获取剪贴板的变化消息。Clipboard Viewer 可以显示系统定义的标准
格式的剪贴板内容,也可以显示应用自定义的私有数据格式的内容。通过调用函数 SetClipboardViewer
将窗口注册为 Clipboard Viewer。
Clipboard Viewer Chain 是保存 Clipboard Viewer 窗口以及他们之间的前后向关系的一个 Windows 系
统链表,当一个窗口注册为 Clipboard Viewer 后,他会被加入 Clipboard Viewer Chain ,并得到链表中
下一个 Viewer 窗口的句柄,该句柄必须保存以在响应消息时使用,该句柄的作用在下文说明。Windows
正是通过 Clipboard Viewer Chain 保证了所有 Clipboard Viewer 能接收和响应剪贴板变化消息。
第二步,响应剪贴板变化消息,判断和取出剪贴板内容
在消息响应里必须正确处理两个消息:
WM_DRAWCLIPBOARD 和 WM_CHANGECBCHAIN。
当剪贴板内容发生变化时,Windows 将触发 WM_DRAWCLIPBOARD 消息,并将该消息送给 Clipboard
Viewer Chain 的第一个窗口。每一个 Clipboard Viewer 窗口,包括第一个窗口在响应和处理该消息后,
必须根据其保存的链表中的下一个窗口的句柄将该消息发送给下一个 Clipboard Viewer 窗口。窗口可以
在该消息中取出剪贴板内容,并判断是否是该窗口增在监视的内容,如果是就进行相应的处理。
当某个 Clipboard Viewer 窗口注销时,系统将触发 WM_CHANGECBCHAIN ,并将该消息送给Clipboard
Viewer Chain 的第一个窗口。每一个窗口必须处理该消息。
第三步,将窗口从 Clipboard Viewer Chain 中注销
当窗口丌再需要监视剪贴板变化消息,或窗口要关闭时,必须调用 ChangeClipboardChain 函数将窗口从
Clipboard Viewer Chain 中注销。注销后系统会触发 WM_CHANGECBCHAIN 消息,同
WM_DRAWCLIPBOARD 消息一样,该消息会给发送给 Clipboard Viewer Chain 的第一个窗口处理。下
面代码示例当窗口被关闭时进行注销。
下面的代码片断给出了监视剪贴板中是否拷贝了 URL 地址的例子,如果剪贴板中的内容是 URL 地址,则
将其显示在窗口界面上。为使示例代码具有一般性,下面给出了一般 Windows 程序代码和基于 MFC 的代
代码。其他语言要实现该功能可以参考 Windows 程序代码。两个 DEMO 的完成代码请见附件。
Windows 程序示例代码
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
unsigned int anFormats[] = {CF_TEXT};
unsigned int nFormat;
switch (message)
{
//
case WM_CREATE:
您可能关注的文档
- Lagrange统Lie点变换下的共形不变性与守恒量.pdf
- KEBF5变频器服使用说明书.pdf
- Landmark速成图.docx
- LB90G系列电专用变频器说明书(有齿机)V1.1(2011.7.22).doc
- LINGO使用说(比较简单).doc
- LG变频器手册 V5系列 4.operation.doc
- LG IS3变频使用说明书.doc
- Linux下目录文档的rwx权限区别.pdf
- LMS_TestLab中文操作指南_ODS工作变形分析.pdf
- logistic归模型.ppt
- 浙江省温州市2024-2025学年七年级上学期语文期末考查卷.docx
- 精品解析:北京市建华实验学校2024-2025学年七年级下学期期中英语试题(原卷版).docx
- 精品解析:北京市通州区2024-2025学年七年级下学期期末考试英语试卷(原卷版).docx
- 精品解析:北京市回民学校2024-2025学年九年级上学期期中语文试题(解析版).docx
- 精品解析:北京市海淀区2025-2026学年九年级上学期期末语文试题(解析版).docx
- 精品解析:北京市东城区汇文中学2025-2026学年八年级上学期期中语文试题(原卷版).docx
- 精品解析:北京市回民学校2024-2025学年九年级上学期期中语文试题(原卷版).docx
- 精品解析:2024-2025学年广东省广州市从化区街口镇中心小学人教版五年级上册期中测试数学试卷(解析版).docx
- 精品解析:北京市通州区2024-2025学年七年级下学期期末考试英语试卷(解析版).docx
- 精品解析:北京市建华实验学校2024-2025学年七年级下学期期中英语试题(解析版).docx
原创力文档

文档评论(0)