如何获取拖拽文件的路径??

hnsuper2000 2010-08-09 10:25:46
小弟Hook了ITargetDrop的drop函数已成功,得到了IDataObject数据指针,在获取对应文件路径信息时,出现问题,跟踪发现 pIDataObject->GetData(&iFormat, &iMedium)没有返回,请大虾帮忙看下问题在哪?
部分代码


FORMATETC iFormat;
ZeroMemory(&iFormat, sizeof(FORMATETC));

STGMEDIUM iMedium;
ZeroMemory(&iMedium, sizeof(STGMEDIUM));

// data
iFormat.cfFormat = CF_HDROP; //类型
iFormat.dwAspect = DVASPECT_CONTENT;
iFormat.lindex = -1;
iFormat.tymed = TYMED_HGLOBAL; //内存对象

HRESULT hRes = pIDataObject->GetData(&iFormat, &iMedium);
if(FAILED(hRes))
{
Log("错误格式");
return hRes;
}

// we have the data, get it
HDROP hDrop = (HDROP)::GlobalLock(iMedium.hGlobal);
DWORD iLen = ::GlobalSize(iMedium.hGlobal);

TCHAR filenames[200];
int count = ::DragQueryFile(hDrop,0xFFFFFFFF,filenames, sizeof(filenames));

for(int i = 0; i < count; i++)
{
DragQueryFile(hDrop, i, filenames, sizeof(filenames));
Log(filenames);
}
...全文
645 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingshaofengbinbin 2010-08-12
  • 打赏
  • 举报
回复
void CInetChatDlg::OnDropFiles(HDROP hDropInfo)
{
char fp[257]={0};
int kk=DragQueryFile(hDropInfo,DROPFILE,fp,257);//获得拖动的文件总数kk
while(kk)
{
kk--;
DragQueryFile(hDropInfo,kk,fp,257);//获得第kk个文件的路径名
chatdlg.DropFile(fp);
for(UINT i=0;i<strlen(fp);i++)
{
fp[i]=0;
}
}
}
hnsuper2000 2010-08-10
  • 打赏
  • 举报
回复
COleDataObject::GetGlobalData有这个函数,但他不是IDataObject的函数
m_tornado 2010-08-10
  • 打赏
  • 举报
回复
Call this function to allocate a global memory block and to retrieve data in the specified format into an HGLOBAL.


HGLOBAL GetGlobalData(
CLIPFORMAT cfFormat,
LPFORMATETC lpFormatEtc = NULL
);

msdn里写的,你查查~
hnsuper2000 2010-08-10
  • 打赏
  • 举报
回复
hg = pDataObject->GetGlobalData ( CF_HDROP );

GetGlobalData不是标准函数吧,有这个函数的实现么?先谢谢
wshcdr 2010-08-09
  • 打赏
  • 举报
回复

HGLOBAL hg;
HDROP hdrop;
hg = pDataObject->GetGlobalData ( CF_HDROP );

if ( NULL == hg )
return FALSE;

hdrop = (HDROP) GlobalLock ( hg );

if ( NULL == hdrop )
{
GlobalUnlock ( hg );
return FALSE;
}

GlobalUnlock ( hg );


3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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