拖放C ++在删除之前操作outlook文件

时间:2016-05-24 12:35:22

标签: c++ com drag-and-drop outlook-addin ole

是否可以在某种拖动事件中操作文件?

正如您所知,大多数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;
}

1 个答案:

答案 0 :(得分:0)

您可以在运行时动态修补DoDragDrop Windows API函数。您可以创建自己的IDataObject,添加CF_HDROP格式并将该对象传递给原始版本的DoDragDrop()。