我是靠谱客的博主 虚心吐司,最近开发中收集的这篇文章主要介绍Windows剪切板操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

调用WinAPI实现剪切板操作的函数:

BOOL OpenClipboard(HWND hWndNewOwner);
//打开剪切板
BOOL EmptyClipboard(VOID);
//清空剪切板
HANDLE SetClipboardData(UINT uFormat, HANDLE hMem);
//设置剪切板内容
HANDLE GetClipboardData(UINT uFormat);
//返回剪切板内容的内存块句柄
BOOL CloseClipboard();
//关闭剪切板

常用的剪切板数据类型(还包括很多其它类型,详情可参考MSDN)

CF_TEXT
//一段ANSI文本
CF_OEMTEXT
//一段DOS文本
CF_UNICODETEXT //一段Unicode文本
CF_LOCALE
//区域标识
CF_BITMAP
//位图
CF_DIB
//设备无关位图

需要使用Win32内存块与剪贴板交互,常用Win32内存块操作函数(另有LocalAlloc等,功能完全相同):

HGLOBAL GlobalAlloc(分配选项, 分配内存大小);
//分配全局内存并返回它的句柄或指针
HGLOBAL GlobalFree(内存块句柄);
//释放全局内存
SIZE_T GlobalSize(内存块句柄);
//返回全局内存的大小
LPVOID GlobalLock(内存块句柄);
//获得全局内存所有权,并返回指向全局内存的指针
BOOL GlobalUnlock(内存块句柄);
//释放全局内存所有权,GlobalAlloc分配选项如果是GHND,则分配可变内存,清零内存并返回全局内存句柄,需要GlobalLock以获取指针
//GlocalAlloc分配选项如果是GPTR,则分配固定内存,清零内存并直接返回指针

复制(向剪贴板内容)操作流程

一、创建一块内存块

  1. 分配一个适当大小的内存块(GlobalAlloc, GHND)
  2. 锁定它并获得所有权(GlobalLock)
  3. 将要复制的内容拷贝到该内存
  4. 释放内存的所有权(GlobalUnlock)

二、将剪切板内容设置为它

  1. 打开剪贴板(OpenClipboard)
  2. 清空剪贴板(EmptyCliboard)
  3. 将该内存块设为剪贴板的数据(SetClipboardData)
  4. 关闭剪贴板(CloseClipboard)

粘贴(读剪贴板内容)操作流程

  1. 打开剪贴板(OpenClipboard)
  2. 获取包含剪贴板内容的内存块句柄(GetClipboardData)
  3. 锁定该内存块并获得指针(GlobalLock)
  4. 读取该内存的内容
  5. 关闭剪贴板(CloseClipboard)

实例代码:

bool CopyTextToClipboard(const char *text)
{
int i = 0, j = 0;
for (; i < 6; i++)
{
//打开剪切板
j = OpenClipboard(NULL);
//判断是否打开成功,如果打开失败则重新尝试5次
if (j == 0 && i < 5)
Sleep(60);
if (j == 0 && i == 5)
return false;
if (j != 0)
{
i = 0;
j = 0;
break;
}
}
//分配字节数,HGLOBAL表示一个内存块
HGLOBAL hmem = GlobalAlloc(GHND, strlen(text) + 1);
//锁定内存中指定的内存块,并返回一个地址值令其指向内存块的起始处
char *pmem = (char *)GlobalLock(hmem);
//清空剪切板并释放剪切板内数据的句柄
EmptyClipboard();
memcpy(pmem, text, strlen(text) + 1);
SetClipboardData(CF_TEXT, hmem);
//写入数据
CloseClipboard();
//关闭剪切板
GlobalFree(hmem);
//释放内存块
return true;
//返回成功
}

转载于:https://www.cnblogs.com/coolcpp/p/clipboard.html

最后

以上就是虚心吐司为你收集整理的Windows剪切板操作的全部内容,希望文章能够帮你解决Windows剪切板操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部