一、粘贴板操作函数
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右键互动的更多相关文章
-
(转)Python 操作 Windows 粘贴板
转自: http://outofmemory.cn/code-snippet/3939/Python-operation-Windows-niantie-board Python 操作 Windows ...
-
AX 利用windows粘贴板功能实现批量数据快速导出EXCEL
static void test(Args _args) { int lineNum; int titleLines; SysExcelApplication excel; SysExcelWorkb ...
-
tmux复制到windows剪贴板/粘贴板的坑
以下所有操作都是在windows下面用putty连接linux centos6的情景下. 一直很纳闷为什么在tmux模式下不能把复制到的文字放到系统的粘贴板里面呢?通过层层阻碍,终于找到了原因. 去掉 ...
-
IE中操作粘贴板复制和粘贴
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
-
windows系统快捷操作の基础篇
从网上汇总了一些windows系统上常用的快捷键,结合自己的使用经验,将平时使用电脑时最常用的快捷键记录在此.注意这里罗列的是平时最常用到的,其他的一般来说不怎么用到的并不在此列,如果想要完整列表,请 ...
-
如何拷贝CMD命令行文本到粘贴板
/********************************************************************* * 如何拷贝CMD命令行文本到粘贴板 * To copy ...
-
IOS 访问系统粘贴板
粘贴板提供了一种核心OS特性,用于跨应用程序共享数据.用户可以跨应用来复制粘贴,也可以设置只在本应用中复制粘贴用来保护隐私. UIPasteboard类允许访问共享的设备粘贴板以及内容,下面代码返回一 ...
-
vim中使用系统粘贴板
在vim中如果想使用系统粘贴板,也就是说,如果你在其他程序中复制内容,那么使用shift+insert组合键就可以粘贴进来. 需要说明的是,vim中的粘贴板有很多,你可以输入 :reg来进行查看.而我 ...
-
js插件实现点击复制内容到粘贴板,兼容IE8
先来看下本次需要导入的文件: 第一个是jquery.js,这个不多说: 第二个是jquery.zclip.js,第三个是zeroClipboard.swf ,这两个文件的下载链接:http://www ...
随机推荐
-
java web学习总结(十三) -------------------使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
-
Windows Phone 8.1 新特性 - 控件之FlipView
本篇为大家介绍 Windows Phone 8.1 中新增的 FlipView 控件,它的中文名字叫做:翻转视图. 虽然听起来有点拗口,但是它的用途大家一定不会陌生.在 Windows Phone 8 ...
-
android studio中ListView与SQLite的结合使用
Da.java public class Db extends SQLiteOpenHelper { public Db(Context context) { super(context, " ...
-
Linux 下修改配置实现在当前目录下寻找可执行文件
# vim .bash_profile 添加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. # vreboot
-
写给自己看的Linux运维基础(一) - 系统基础
查看内核版本信息 uname -a 查看发行版本 cat /etc/issue 查看硬件配置 CPU: cat /proc/cpuinfo more /proc/cpuinfo | grep ...
-
JQuery、js判断复选框是否选中状态
JQuery: var $isChecked = $("#id").is(":checked"); alert($isChecked); JS: var $id ...
-
Spring Bean基本管理--bean注入方式汇总
依赖注入方式:Spring支持两种依赖注入方式,分别是属性注入和构造函数注入.还有工厂方法注入方式. 依赖注入还分为:注入依赖对象可以采用手工装配或自动装配,在实际应用开发中建议使用手工装配,因为自动 ...
-
python3 读取大文件分解成若干小文件
有个数据实在太大了,有1.7G,打开慢,改文件也慢,我们将其分解成若干个中等文件 #!/usr/bin/env python3 # -*- coding: utf-8 -*- f = open(& ...
-
安装mongodb后启动报错libstdc++
安装mongo后启动报错如下图 显然说是libstdc++.so文件版本的问题,这种一般都是gcc版本太低了 接着查询gcc的版本 strings /usr/lib/libstdc++.so.6 ...
-
tensorFlow入门实践(三)实现lenet5(代码结构优化)
这两周我学习了北京大学曹建老师的TensorFlow笔记课程,认为老师讲的很不错的,很适合于想要在短期内上手完成一个相关项目的同学,课程在b站和MOOC平台都可以找到. 在卷积神经网络一节,课程以le ...