如何通过GetClipboardData来获取word文档里面的数据

void_main_void 2019-09-18 04:33:50
因为需要通过GetClipboardData()来获取doc文档里面的数据,使用CF_TEXT只能获取到文本,但是 文本+图片,图片内容却获取不到。
msdn上https://docs.microsoft.com/zh-cn/windows/win32/dataxchg/standard-clipboard-formats试了很多基本还是取不到剪切板内容。GetClipboardData()返回的句柄是空的。

void Ctrl_C_V()
{
keybd_event(VK_CONTROL,0,0,0);
Sleep(20);

keybd_event(0x41,0,0,0);
Sleep(20);

keybd_event(0x41,0,KEYEVENTF_KEYUP,0);
Sleep(20);

keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
Sleep(20);

keybd_event(VK_CONTROL,0,0,0);
Sleep(20);

keybd_event(0x43,0,0,0);
Sleep(20);

keybd_event(0x43,0,KEYEVENTF_KEYUP,0);
Sleep(20);

keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
Sleep(50);
}

SetFocus(hd_Content);
Ctrl_C_V();
Sleep(20);

if(OpenClipboard(NULL))
{
HANDLE hData = GetClipboardData(CF_ENHMETAFILE);
if(hData != NULL)
{
......................
}
}

GetClipboardData(CF_ENHMETAFILE); 这个参数我该如何获取到word文档里面的内容呢?
...全文
637 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2019-09-19
  • 打赏
  • 举报
回复
schlafenhamster 2019-09-18
  • 打赏
  • 举报
回复
参考

void PasteWmf(CDC *pDC)
{// In "word" Select a string such as "哈哈" , then copy text to c.b.,
// or insert a ".wmf" file also copy to c.b.
if (!IsClipboardFormatAvailable(CF_METAFILEPICT))// =3 and CF_ENHMETAFILE = 14
{
AfxMessageBox("Please copy any text from \"Word\" first!");
return;
}
HGLOBAL hMem ;
LPMETAFILEPICT lpMFP ;
OpenClipboard(NULL) ;
hMem = GetClipboardData(CF_METAFILEPICT) ;
lpMFP = (LPMETAFILEPICT)GlobalLock(hMem) ;
CloseClipboard();
// afxDump << lpMFP->mm << ";" << lpMFP->xExt << ";" << lpMFP->yExt << "\n";// 8;22013;847 or 8;15214;12965
#if 0 // use gdiplus
// 从 lpMFP->hMF 到 metafile ,不必用 Stream
Metafile metafile(lpMFP->hMF,0);// 0: not Aldus Placeable Metafiles
int Width=metafile.GetWidth();
int Height=metafile.GetHeight();
#define MARGIN 5 // or =0
// or
// MetafileHeader head;
// metafile.GetMetafileHeader(&head);
// 创建 CacheImage
Bitmap CacheImage(Width+2*MARGIN, Height+2*MARGIN);// PixelFormat32bppARGB
Graphics CacheGraphics(&CacheImage );
// 对 CacheImage 进行描画
SolidBrush brush(Color(255,252,252,100));// argb yellow
CacheGraphics.FillRectangle(&brush,0,0,Width+2*MARGIN,Height+2*MARGIN);//
// playrecord 到 CacheImage
CacheGraphics.EnumerateMetafile(&metafile, Point(MARGIN,MARGIN),MyProc,&metafile);
// 获得窗口的 Graphics 对象
Graphics Graphic(pDC->m_hDC);
// 将描画好的 CacheImage 画到窗口上
Graphic.DrawImage(&CacheImage,2, 20);
#else // use gdi
pDC->SetMapMode(lpMFP->mm) ;// MM_ANISOTROPIC
pDC->SetViewportOrg(0,0); //
POINT pt;
pt.x=(int)((double)lpMFP->xExt/25.4);
pt.y=(int)((double)lpMFP->yExt/25.4);
pDC->SetViewportExt(pt.x, pt.y);
EnumMetaFile(pDC->m_hDC,lpMFP->hMF,MyProc1,0);
#endif
GlobalUnlock(hMem);
}

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧