【MoreWindows工作笔记9】OleGetClipboard 访问剪切板的文本内容

本文介绍了如何使用OleGetClipboard函数访问Windows剪贴板的文本内容,包括剪贴板的初始化、获取内容以及内容解析。通过示例代码详细解释了数据交换的关键结构FORMATETC和STGMEDIUM,并预告了后续如何访问剪贴板上的文件信息。
摘要由CSDN通过智能技术生成

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

剪贴板系列目前有四篇,包括访问剪贴板上的文本数据,查看复制文件时剪贴板上的文件数据,枚举剪贴板上数据格式以及监视剪贴板。

目录如下:

1.《【MoreWindows工作笔记9OleGetClipboard 访问剪切板的文本内容》

http://blog.csdn.net/morewindows/article/details/17655053

2.《【MoreWindows工作笔记10OleGetClipboard 访问剪切板上的文件信息》

http://blog.csdn.net/morewindows/article/details/17655057

3.《【MoreWindows工作笔记11EnumClipboardFormats剪切板内容的数据格式》

http://blog.csdn.net/morewindows/article/details/17655299

4.《【MoreWindows工作笔记12WM_DRAWCLIPBOARD 监视剪切板》

http://blog.csdn.net/morewindows/article/details/17655429

 

剪贴板的参考文档推荐http://msdn.microsoft.com/en-us/library/windows/desktop/ms649016(v=vs.85).aspx

这里很详细,也提供了丰富的示范代码,呵呵,现在微软的MSDN已经比之前改进不少了。不但实例更加丰富了,还能在下面给出评论了。


为了提高大家学习的兴趣,先看看程序运行的效果吧,先复制一些文本,然后运行程序,程序将输出剪贴板上的文本大小和文本内容。运行结果如下所示:

 

下面在来看下如何实现这个功能,先看看完整的源代码,然后在来讲解重点函数。

《【MoreWindows工作笔记9OleGetClipboard 访问剪切板的文本内容》的完整源代码如下所示:

// 【MoreWindows工作笔记9】OleGetClipboard 访问剪切板的文本内容// http://blog.csdn.net/morewindows/article/details/17655053// By MoreWindows( http://blog.csdn.net/MoreWindows )#include <Windows.h>#include <ObjBase.h>#include <iostream>using namespace std;void DisplayDataObject(IDataObject *pDataObject){  FORMATETC fmtetc = {CF_TEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};  STGMEDIUM stgmedium;  if (pDataObject->GetData(&fmtetc, &stgmedium) == S_OK)  {    cout<<"  剪切板数据格式上为CF_TEXT, 文本内容如下:"<<endl;    char* data = (char*)GlobalLock(stgmedium.hGlobal);    cout<<data<<endl;    GlobalUnlock(stgmedium.hGlobal);    ReleaseStgMedium(&stgmedium);  } else {    cout<<"  剪切板数据格式不为CF_TEXT"<<endl;  }} int main()   printf("   【MoreWindows工作笔记9】OleGetClipboard 访问剪切板的文本内容\n");  printf(" - http://blog.csdn.net/morewindows/article/details/17655053 -\n");  printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n");  if (OleInitialize(NULL) != S_OK) return 0;  IDataObject *pDataObject;  // Retrieves a data object that you can use to access the contents of the clipboard.  if (OleGetClipboard(&pDataObject) == S_OK) {    DisplayDataObject(pDataObject);    pDataObject->Release();  }  OleUninitialize();  return 0;}

访问剪贴板内容可以分为三步:


第一步 初始化

OleInitializeOleUninitialize这两个函数简单,就是初始化和反初始化OLE(Object Linking and Embedding)OLE是个复杂的大东西,有兴趣可以参考参考http://msdn.microsoft.com/en-us/library/df267wkc.aspx


第二步 获取剪贴板内容

通过OleGetClipboard()函数取的剪贴板内容。其函数原型如下:

HRESULT OleGetClipboard(  _Out_  LPDATAOBJECT *ppDataObj);


第三步 剪贴板内容解析

主要是通过2个结构体——FORMATETCSTGMEDIUM。下面先看看FORMATETCFORMATETC OLE数据交换的一个关键结构,对某种设备,数据,和相关媒体做了格式上的描述。其定义为:

typedef struct tagFORMATETC {
     CLIPFORMAT cfFormat; // 剪贴板数据格式DVTARGETDEVICE *ptd; // 设备有关的信息DWORD dwAspect; // 图形数据的表现方式LONG lindex; // dwAspect 成员的补充DWORD tymed; // 数据的存储介质} FORMATETC; 
一个典型的 FORMATETC 结构变量定义如下:
FORMATETC 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值