是否可以在某种拖动事件中操作文件?
正如您所知,大多数Windows程序(在这种特殊情况下为Outlook)都使用流来完成拖动操作。丢弃操作,某些第三方程序无法理解(例如Firefox,Chrome)。由于我无法改变第三方程序行为,我尝试编写一个Outlook插件,将文件复制到临时文件夹,并在第三方程序发生丢弃之前操纵(ole& com)丢弃信息。 / p>
我遇到以下问题:
我正在干涉的事件是一个极端的解决方法:" DragEnter" Outlook中的COM事件,以便拖动的电子邮件需要跨越另一个要触发的Outlook元素。它仅用于测试目的。问题是,当拖动电子邮件并同时操纵丢弃信息或强制我自己的拖放时,我可以在哪里全局连接; drop(DoDragDrop(..))?
HRESULT TDropTarget::DragEnter(IDataObject* pDataObj, DWORD grfKeyState, POINTL pt, DWORD* pdwEffect) {
//...
//get data from pDataObj, create file and new IDataObject* pDataObject which points to file
DWORD dwResult = DoDragDrop(pDataObject, pDropSource, DROPEFFECT_COPY, pdwEffect);
if(dwResult == DRAGDROP_S_DROP) { // success!
OutputDebugString(TEXT("DRAGDROP_S_DROP\r\n"));
} else if (dwResult == DRAGDROP_S_CANCEL) { // cancelled
OutputDebugString(TEXT("DRAGDROP_S_CANCEL\r\n"));
}
pDataObject->Release();
pDropSource->Release();
return S_OK;
}
答案 0 :(得分:0)
您可以在运行时动态修补DoDragDrop Windows API函数。您可以创建自己的IDataObject,添加CF_HDROP格式并将该对象传递给原始版本的DoDragDrop()。