1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
HGLOBAL clipbuffer;
clipbuffer = GlobalAlloc(GMEM_DDESHARE, sizeof(FILEGROUPDESCRIPTOR));
FILEGROUPDESCRIPTOR* buffer = (FILEGROUPDESCRIPTOR*)GlobalLock(clipbuffer);
GlobalUnlock(clipbuffer);
buffer->cItems = 1;
lstrcpy(buffer->fgd[0].cFileName, L"TESTO.ogden");
HRESULT hr = OleInitialize(NULL);
if (SUCCEEDED(hr))
{
IDataObject* pDataObject;
hr = SHCreateDataObject(NULL, 0, NULL, NULL, IID_PPV_ARGS(&pDataObject));
if (SUCCEEDED(hr))
{
IStream* pstm;
{
CHAR* data = "The big brown fox jumps over the lazy dog";
pstm = SHCreateMemStream((BYTE*)data, strlen(data) * sizeof(CHAR));
FORMATETC fmte = FileTransferUtils::GetFormatDescriptor();//{ (CLIPFORMAT)CF_TEXT , NULL, DVASPECT_CONTENT, -1, TYMED_ISTREAM };
STGMEDIUM medium = { 0 };
medium.tymed = TYMED_HGLOBAL;
medium.hGlobal = clipbuffer;
hr = pDataObject->SetData(&fmte, &medium, TRUE);
fmte = FileTransferUtils::GetFormatContents();//{ (CLIPFORMAT)CF_TEXT , NULL, DVASPECT_CONTENT, -1, TYMED_ISTREAM };
medium = { 0 };
medium.tymed = TYMED_ISTREAM;
medium.pstm = pstm;
hr = pDataObject->SetData(&fmte, &medium, TRUE);
if (SUCCEEDED(hr))
{
hr = OleSetClipboard(pDataObject);
// hr = OleFlushClipboard();
}
// pstm->Release();
}
pDataObject->Release();
}
|