`
runfeel
  • 浏览: 899568 次
文章分类
社区版块
存档分类
最新评论

windows下的剪切板编程详解

 
阅读更多
说道剪切板大家都不陌生吧 ,右键粘贴 都用过。其实编程也很简单,但是在进程之间的通信 却有着不可替代的作用 ,剪切板说白了就是一个缓冲区 ,但是这个缓冲区不是某个进程的私有空间,而被全部进程所共享。windows下的每个进程都可以共享剪切板中的数据 。其实我以前也学过剪切板编程但是一直没有真正理解,于是又学习了一遍。终于明白了。。。写下来分享下。。。。

要使用剪切板就要了解剪切板的几个函数 ?

BOOL EmptyClipboard(VOID); //清空剪切板并且释放与剪切板相关的数据的句柄  
 
BOOL OpenClipboard( HWND hWndNewOwner ); //打开剪切板并且阻止其他应用程序 修改剪切板的内容 hwnd为当前打开窗体的句柄 
 
HGLOBAL GlobalAlloc( UINT uFlags, SIZE_T dwBytes ); //在全局堆分配一块内存,windows内存管理器不提供单独的全局对和本地堆 ,这个函数比起他内存 函数慢,但是这个函数仍然在剪切板等应用中使用。 有人可能会问了,为什么不用new或者 malloc呢? 那是因为你的new和malloc所分配的空间只是在一个进程中分配的,它并不能被windows下所有进程所共享 。  
(*)他返回的不是一个内存块的指针,而是一个内存对象的句柄 。 我们可以通过GloabalLock()获得内存指针,。。。 
 
LPVOID GlobalLock( HGLOBAL hMem); //锁定一个内存对象,并且返回指向这个内存对象的第一个字节的指针 。 对于可移动的内存对象来说,其内部的数据结构包含一个计数器,GlobalLock会是这个计数器+1 ,GlobalUnLock使这个计数器-1 。 锁定的内存块将不会被 移动或者丢弃 除非调用了GlobalReAlloc函数 .每次调用完一个GlobalLock函数 对应调用GlobalUnLock函数 。 
 
BOOL GlobalUnlock( HGLOBAL hMem ); 减少GMEM_MOVEABLE类型内存对象的锁定计数,对于GMEM_FIXED类型的内存对象没有影响  
 

BOOL CloseClipboard(VOID); //当一个应用程序使用完剪切板应该调用这个函数 关闭剪切板,允许其他程序访问 剪切板 。 
 
HANDLE SetClipboardData( UINT uFormat, HANDLE hMem ); //将指定的内存对象的数据 设置到剪切板 。 
 
HANDLE GetClipboardData( UINT uFormat ); //从剪切板获得指定的数据,这个函数调用前 剪切板必须被打开 。 
 

BOOL IsClipboardFormatAvailab<wbr>le(UINT</wbr> format); //检测剪切板中是否有指定格式的数据 
 
 
函数介绍完了下面就是应用 :  
1、向剪切板中增加数据 ,这里我用文本做示范 、 
 ::OpenClipboard(m_hWnd) ;// 打开剪切板 防止其他 进程第剪切板操作 EmptyClipboard() ;//清空剪切板 并且将权限附加到 打开剪切板的窗体 HANDLE h=GlobalAlloc(GMEM_FIXED,100) ; //在全局堆分配内存并且返回句柄 char *p=(char*) GlobalLock(h) ; //锁定指定内存对象,返回内存指向对象第一个字节的指针,增加内存对象的锁定计数 strcpy(p,"this is a ClipBoard test") ; //将字符串拷贝到全局堆 SetClipboardData(CF_TEXT,h) ; //将指定内存对象的数据设置到剪切板 GlobalUnlock(h) ;//解锁内存对象 并且减少锁定计数 CloseClipboard() ; //关闭剪切板 在调用Open之后 必须有
2、清空剪切板 
 ::EmptyClipboard() ; //清空剪切板
3、获得剪切板的数据
 ::OpenClipboard(m_hWnd) ; //打开剪切板 if (IsClipboardFormatAvailab<wbr>le(CF_TEXT)) //如果剪切板中有文本类型的数据 { HANDLE h=GetClipboardData(CF_TEXT); // 获得剪切板数据 所在的内存对象 char * p=(char*)GlobalLock(h) ; //通过锁定内存对象 获得剪切板缓冲区的指针 GlobalUnlock(h) ; //解锁内存对象 减少 内存对象的锁定技术 MessageBox(p) ; }</wbr>
分享到:
评论

相关推荐

    windows剪切板增强工具

    可以剪切多段文字,用ctrl+1,ctrl+2等逐个复制粘贴,对于拷贝多段文字,方便的不得了

    Windows系统剪切板查看器

    Windows系统剪切板查看器,可查看剪切板中复制的所有内容!

    API清空剪贴板_Windows编程_vb剪切板api_API_

    vb语言利用windos api 实现清空剪贴板

    Windows剪切板工具clipbrd.zip

    Windows系统中的剪切板查看工具!win7及以上系统已经没有自带这个工具了,该工具可以在win7及以上系统中使用

    剪切板 网页操作

    剪切板 网页操作 c++ 剪切板 网页操作 vc

    易语言从剪切板取图片

    易语言从剪切板取图片源码,从剪切板取图片,复制图片到剪贴板,从剪贴板取位图

    C#监控剪切板例子程序

    这是一个C#的剪切板监控的程序,当剪切板有复制消息的时候,自动显示剪切板中的文字内容,是剪切板编程的API的小例子。

    双心多重剪切板1.0带源代码

    双心多重剪切板是一个windows下增强版的剪切板软件,能让你把多次复制到剪切板的内容合并后正反向粘贴,粘贴时可以加入回车或者TAB键作为间隔。 目前版本只能进行文本格式类型复制粘贴。快捷键暂不支持自定义。 本...

    VB显示剪切板上的图片

    想在VB中显示其他应用程序产生的图片,可以借助剪切板,通过剪切板显示到VB上

    Java和获得剪切板内容

    通过Java代码与系统剪切板交互,可以获得剪切板内容,也可以向剪切板中添加内容

    监视剪切板的Excel表格数据

    工程只提取了监视功能, 使用windows 对应剪切板API。 使用方法: 1、初始化 使用 SetClipboardViewer ,把本窗口句柄传入,并且保存返回的下个窗口句柄。 2、在消息响应函数中 WindowProc中 处理WM_CHANGECBCHAIN,...

    易语言剪切板操作

    易语言剪切板操作源码,剪切板操作,清空,格式是否有效,置内容,取内容,EmptyClipboard,OpenClipboard,CloseClipboard,SetClipboardData,GetClipboardData,IsClipboardFormatAvailable,GlobalAlloc,GlobalFree,...

    C#获取剪切板内容

    C#获取剪切板内容

    多功能增强剪切板Clipboard Box注册版

    除了简单性外,软件还可以保存许多个剪切板项目而不仅仅是Windows常规的只保存一个。软件有很容易理解的界面,让您很清楚在哪里完成复制粘贴的操作。该工具能保存任何文字或图像,可以保存和加载几乎所有的东西,还...

    windows剪切板操作例程(MFC)

    关于Windows剪切板操作的例程,包括使用传统方法和使用OLE对象方法。

    VC剪切板功能

    通过VC++6.0建立基于对话框的应用程序,实现随时捕捉输入的内容到windows剪切板中,同时也可以显示剪切板中的内容~~

    清空剪切板ClearOfficeClipboard

    清空剪切板ClearOfficeClipboard类,可用在Excel的VBA中

    剪切板修复工具

    WINDOWS剪切板修复工具,剪切板修复工具,解决复制后不能粘贴问题

    多条剪切板

    运用编程语言c++,编程环境vs2010,调用windows api实现的多条剪切板.

    剪切板 查看器 调试剪切板工具

    一款很好的剪切板查看器,可以在调试剪切板的时候查看,很好用的哦 好用的话就顶一个!

Global site tag (gtag.js) - Google Analytics