3,245
社区成员
发帖
与我相关
我的任务
分享
// OleGetClipboardTest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
// 【MoreWindows工作笔记10】OleGetClipboard 访问剪切板上的文件信息
// http://blog.csdn.net/morewindows/article/details/17655057
// By MoreWindows( http://blog.csdn.net/MoreWindows )
#include <Windows.h>
#include <ObjBase.h>
#include <shlobj.h>
#include <iostream>
#include <iostream>
using namespace std;
void DisplayDataObject(IDataObject *pDataObject)
{
IEnumFORMATETC* pEnumFmt;
STGMEDIUM stgmedium;
FORMATETC fmt = {0};
char szBuf[1024] = {0};
HRESULT hr = pDataObject->EnumFormatEtc(DATADIR_GET,&pEnumFmt);
while(S_OK == pEnumFmt->Next(1, &fmt, NULL)) {
GetClipboardFormatName(fmt.cfFormat, szBuf, sizeof(szBuf));
if (strcmpi(szBuf, "FileGroupDescriptorW")==0)
{
if (pDataObject->GetData(&fmt, &stgmedium) == S_OK)
{
FILEGROUPDESCRIPTORW *filegroup = (FILEGROUPDESCRIPTORW*)stgmedium.hGlobal;
for (UINT i = 0; i < filegroup->cItems; i++)
{
//////////下面打印cFileName是乱码
MessageBoxW(GetActiveWindow(), filegroup->fgd[i].cFileName, L"test", 0);
}
}
}
if(fmt.tymed & TYMED_HGLOBAL){
cout<<"TYMED_HGLOBAL supported"<<endl;
}
}
pEnumFmt->Release();
}
int main()
{
if (OleInitialize(0) != S_OK) return 0;
IDataObject *pDataObject;
if (OleGetClipboard(&pDataObject) == S_OK)
{
DisplayDataObject(pDataObject);
pDataObject->Release();
}
OleUninitialize();
return 0;
}
FILEGROUPDESCRIPTORW *filegroup = (FILEGROUPDESCRIPTORW*)GlobalLock(stgmedium.hGlobal);