MCPcopy Create free account
hub / github.com/derceg/explorerplusplus / CopyFilesToClipboard

Function CopyFilesToClipboard

Explorer++/Helper/FileOperations.cpp:473–526  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

471}
472
473HRESULT CopyFilesToClipboard(
474 const std::list<std::wstring> &FileNameList, BOOL bMove, IDataObject **pClipboardDataObject)
475{
476 FORMATETC ftc[2];
477 STGMEDIUM stg[2];
478 BuildHDropList(&ftc[0], &stg[0], FileNameList);
479
480 ftc[1].cfFormat = (CLIPFORMAT) RegisterClipboardFormat(CFSTR_PREFERREDDROPEFFECT);
481 ftc[1].ptd = NULL;
482 ftc[1].dwAspect = DVASPECT_CONTENT;
483 ftc[1].lindex = -1;
484 ftc[1].tymed = TYMED_HGLOBAL;
485
486 HRESULT hr = E_FAIL;
487 HGLOBAL hglb = GlobalAlloc(GMEM_MOVEABLE, sizeof(DWORD));
488
489 if (hglb != NULL)
490 {
491 auto *pdwCopyEffect = static_cast<DWORD *>(GlobalLock(hglb));
492
493 if (pdwCopyEffect != NULL)
494 {
495 if (bMove)
496 {
497 *pdwCopyEffect = DROPEFFECT_MOVE;
498 }
499 else
500 {
501 *pdwCopyEffect = DROPEFFECT_COPY;
502 }
503
504 GlobalUnlock(hglb);
505
506 stg[1].pUnkForRelease = NULL;
507 stg[1].hGlobal = hglb;
508 stg[1].tymed = TYMED_HGLOBAL;
509
510 *pClipboardDataObject = CreateDataObject(ftc, stg, 2);
511
512 IDataObjectAsyncCapability *pAsyncCapability = NULL;
513 hr = (*pClipboardDataObject)->QueryInterface(IID_PPV_ARGS(&pAsyncCapability));
514
515 if (SUCCEEDED(hr))
516 {
517 pAsyncCapability->SetAsyncMode(TRUE);
518 pAsyncCapability->Release();
519
520 hr = OleSetClipboard(*pClipboardDataObject);
521 }
522 }
523 }
524
525 return hr;
526}
527
528int PasteLinksToClipboardFiles(const TCHAR *szDestination)
529{

Callers 2

CopyFilesFunction · 0.85
CutFilesFunction · 0.85

Calls 5

BuildHDropListFunction · 0.85
CreateDataObjectFunction · 0.85
SetAsyncModeMethod · 0.80
QueryInterfaceMethod · 0.45
ReleaseMethod · 0.45

Tested by

no test coverage detected