#include <Windows.h>
#include <shlobj.h>
IDataObject *pDataObj = NULL;
OleGetClipboard(&pDataObj);
if (pDataObj)
{
FORMATETC etc;
STGMEDIUM stgMedium;
// 这两步操作才会触发文件的下载操作(不调用这两个,不会触发文件下载)
etc = setCf(RegisterClipboardFormat(CFSTR_FILENAMEMAPW));
pDataObj->GetData(&etc, &stgMedium);
etc = setCf(RegisterClipboardFormat(CFSTR_TARGETCLSID));
pDataObj->SetData(&etc, &stgMedium, FALSE);
// 第一次获取到的路径可能是虚假的(触发下载操作),第二次才是真正的
for (int i = 0; i < 2; ++i)
{
QStringList filepaths;
IEnumFORMATETC *etcs = NULL;
pDataObj->EnumFormatEtc(DATADIR_GET, &etcs);
if (etcs)
{
etcs->Reset();
while (etcs->Next(1, &etc, NULL) != S_FALSE)
{
VMware windows系统上文件拷贝原理(linux应该类似,拖拽应该也类似)
最新推荐文章于 2024-02-28 11:45:15 发布