一、粘贴板操作函数

BOOL OpenClipboard(HWND hWnd);参数 hWnd 是打开剪贴板的窗口句柄,成功返回TRUE,失败返回FALSE
BOOL CloseClipboard();关闭剪贴板
BOOL EmptyClipboard();清空剪贴板
HANDLE SetClipboardData(CF_HDROP, hGblFiles );往剪切板设置数据
HANDLE GetClipboardData(UINT uFormat); 得到剪贴板中的数据,uFormat是所需要数据的格式,例如本文拖放对象的格式为CF_HDROP
UINT uDropEffect=RegisterClipboardFormat("Preferred DropEffect"); 注册数据类型

详细函数阅读:WINDOWS API——OPENCLIPBOARD——剪切板

往剪贴板中放的数据必须是内存对象:HGLOBAL。这个对象可以通过GlobalAlloc来生成。然后使用GlobalLock就可以得到该对象的内存地址,继而往里面写 数据。实际上在Win32中由于进程拥有独立的内存空间,因而常规的内存分配已经不需要GlobalLock了,看看MSDN就知道该函数主要就是为DDE和剪贴板服务的。

二、操作文本数据

1、复制文本数据

 void CopyText(const QString & test)
{
if (OpenClipboard(nullptr))//打开剪贴板
{
HANDLE hClip;
char* pBuf;
EmptyClipboard();//清空剪贴板
//写入数据
hClip = GlobalAlloc(GMEM_MOVEABLE, test.size() + );
pBuf = (char *)GlobalLock(hClip);
strcpy(pBuf, test.toStdString().c_str());
GlobalUnlock(hClip);//解锁
SetClipboardData(CF_TEXT, hClip);//设置格式 //关闭剪贴板
CloseClipboard();
}
}

2、粘贴文本数据

 QString PasteText()
{
QString data;
if (OpenClipboard(nullptr))//打开剪贴板
{
if (IsClipboardFormatAvailable(CF_TEXT))//判断格式是否是我们所需要
{
HANDLE hClip;
char * pBuf;
//读取数据
hClip = GetClipboardData(CF_TEXT);
pBuf = (char*)GlobalLock(hClip);
GlobalUnlock(hClip);
CloseClipboard(); data.append(pBuf);
}
} return data;
}

三、操作文件

1、复制文件

 #include <string.h>
#include <windows.h>
#include <shlobj.h> void CutOrCopyFiles(const char * lpBuffer, uint uBufLen, bool bCopy)
{
UINT uDropEffect;
DROPFILES dropFiles;
UINT uGblLen, uDropFilesLen;
HGLOBAL hGblFiles, hGblEffect;
char *szData, *szFileList; DWORD *dwDropEffect; uDropEffect = RegisterClipboardFormat("Preferred DropEffect");
hGblEffect = GlobalAlloc(GMEM_ZEROINIT|GMEM_MOVEABLE|GMEM_DDESHARE,sizeof(DWORD));
dwDropEffect = (DWORD *)GlobalLock(hGblEffect);
if(bCopy)
*dwDropEffect = DROPEFFECT_COPY;
else
*dwDropEffect = DROPEFFECT_MOVE;
GlobalUnlock(hGblEffect); uDropFilesLen = sizeof(DROPFILES);
dropFiles.pFiles = uDropFilesLen;
dropFiles.pt.x = ;
dropFiles.pt.y = ;
dropFiles.fNC = FALSE;
dropFiles.fWide = TRUE; uGblLen = uDropFilesLen + uBufLen * + ;
hGblFiles = GlobalAlloc(GMEM_ZEROINIT | GMEM_MOVEABLE | GMEM_DDESHARE, uGblLen);
szData = (char *)GlobalLock(hGblFiles);
memcpy(szData,(LPVOID)(&dropFiles), uDropFilesLen);
szFileList = szData + uDropFilesLen; MultiByteToWideChar(CP_ACP, MB_COMPOSITE,
lpBuffer, uBufLen, (WCHAR *)szFileList, uBufLen); GlobalUnlock(hGblFiles); if( OpenClipboard(NULL) )
{
EmptyClipboard();
SetClipboardData(CF_HDROP, hGblFiles );
SetClipboardData(uDropEffect, hGblEffect);
CloseClipboard();
}
}

2、粘贴文件

 void PasteFile()
{
UINT uDropEffect = RegisterClipboardFormat("Preferred DropEffect"); if(OpenClipboard( nullptr))
{
HDROP hDrop = HDROP( GetClipboardData( CF_HDROP));
if(hDrop)
{
DWORD dwEffect, *dw;
dw = (DWORD *)(GetClipboardData( uDropEffect));
if(dw == NULL)
dwEffect = DROPEFFECT_COPY;
else
dwEffect = *dw; char Buf[];
Buf[] = ;
UINT cFiles = DragQueryFile( hDrop, (UINT) -, NULL, );
POINT Point;
char szFile[ MAX_PATH];
for(UINT count = ; count < cFiles; ++count)
{
DragQueryFile( hDrop, count, szFile, sizeof( szFile));
lstrcat(Buf,szFile);
lstrcat(Buf," ");
} if(dwEffect & DROPEFFECT_MOVE)
{
MessageBox(NULL, Buf, "Move Files", MB_OK);
} else if(dwEffect & DROPEFFECT_COPY)
{
MessageBox(NULL, Buf, "Copy Files", MB_OK);
} CloseClipboard();
}
}
}

四、参考文章

  如何与资源管理器互动剪切/拷贝/粘贴文件[VC++]:文件操作

  C++操作剪贴板具体应用方式解析:文本操作

  WINDOWS API——OPENCLIPBOARD——剪切板:操作函数说明

windows粘贴板操作-自己的应用和windows右键互动的更多相关文章

  1. (转)Python 操作 Windows 粘贴板

    转自: http://outofmemory.cn/code-snippet/3939/Python-operation-Windows-niantie-board Python 操作 Windows ...

  2. AX 利用windows粘贴板功能实现批量数据快速导出EXCEL

    static void test(Args _args) { int lineNum; int titleLines; SysExcelApplication excel; SysExcelWorkb ...

  3. tmux复制到windows剪贴板/粘贴板的坑

    以下所有操作都是在windows下面用putty连接linux centos6的情景下. 一直很纳闷为什么在tmux模式下不能把复制到的文字放到系统的粘贴板里面呢?通过层层阻碍,终于找到了原因. 去掉 ...

  4. IE中操作粘贴板复制和粘贴

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. windows系统快捷操作の基础篇

    从网上汇总了一些windows系统上常用的快捷键,结合自己的使用经验,将平时使用电脑时最常用的快捷键记录在此.注意这里罗列的是平时最常用到的,其他的一般来说不怎么用到的并不在此列,如果想要完整列表,请 ...

  6. 如何拷贝CMD命令行文本到粘贴板

    /********************************************************************* * 如何拷贝CMD命令行文本到粘贴板 * To copy ...

  7. IOS 访问系统粘贴板

    粘贴板提供了一种核心OS特性,用于跨应用程序共享数据.用户可以跨应用来复制粘贴,也可以设置只在本应用中复制粘贴用来保护隐私. UIPasteboard类允许访问共享的设备粘贴板以及内容,下面代码返回一 ...

  8. vim中使用系统粘贴板

    在vim中如果想使用系统粘贴板,也就是说,如果你在其他程序中复制内容,那么使用shift+insert组合键就可以粘贴进来. 需要说明的是,vim中的粘贴板有很多,你可以输入 :reg来进行查看.而我 ...

  9. js插件实现点击复制内容到粘贴板,兼容IE8

    先来看下本次需要导入的文件: 第一个是jquery.js,这个不多说: 第二个是jquery.zclip.js,第三个是zeroClipboard.swf ,这两个文件的下载链接:http://www ...

随机推荐

  1. python argparse用法总结

    转:python argparse用法总结 1. argparse介绍 argparse是python的一个命令行解析包,非常适合用来编写可读性非常好的程序. 2. 基本用法 prog.py是我在li ...

  2. js判断是否下拉刷新

    if(document.body.scrollTop + window.innerHeight>=document.body.clientHeight-10){ this.loadPointsL ...

  3. Linux 下 Redis 安装与配置

    1.Redis 的安装 在 Ubuntu 系统安装 redis 可以使用以下命令: $ sudo apt-get update $ sudo apt-get install redis-server ...

  4. Laravel 框架 基础(一)

    Laravel 框架 laravel 5.2 在 5.1 基础上继续改进和优化,添加了许多新的功能特性:多认证驱动支持.隐式模型绑定.简化 Eloquent 全局作用域.可选择的认证脚手架.中间件组. ...

  5. Avio红外热像仪在汽车行业的应用

    红外热像仪利用红外探测器接受被测目标的红外辐射能量,将红外辐射能量转换成带有温度信息的图像信号,并通过显视屏等显示工具显示红外热图像.这种红外热图像与物体表面的温度分布相对应.红外热像仪能够将探测到的 ...

  6. (十分钟视频教程)nodejs基础实战教程3:react服务端渲染入门篇

    视频截图如下: (具体视频见文末) 前言: 这是小猫的第三篇node教程,本篇内容是由公众号粉丝票选得出的,相信大家对这篇教程是抱有较大希望的,这篇教程由小猫和一位多年的好朋友合作完成(笔名:谷雨,博 ...

  7. PAT1110:Complete Binary Tree

    1110. Complete Binary Tree (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  8. 关于java多线程关键字volatile的理解

    volatile关键字的作用是强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值. 使用volition关键字增加了实例变量在多个线程间的可见性.但volition有个致命的缺点就是不 ...

  9. 网络编程之套接字(tcp)

    经过几天高强度的学习,对套接字的编程有了初步的认识,今天对这几天所学的知识总结一下:首先简单阐述一下tcp通信: TCP提供的是可靠的,顺序的,以及不会重复的数据传输,处理流控制,由于TCP是可靠的, ...

  10. 21.app后端如何高效更新内容

    在app的主页或通知栏,经常需要通过api取最新的数据.那么,怎么在这部分上做优化,使获取内容的效率更高呢?在本文中,通过推拉和增量更新,实现了一种高效获取数据的策略. 1.高效更新数据策略在app中 ...