【问题标题】:Drag and Drop C++ manipulate outlook file before drop拖放前拖放 C++ 操作 Outlook 文件
【发布时间】:2016-09-21 16:16:34
【问题描述】:

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

据我所知,大多数 Windows 程序(在本例中为 Outlook)都使用流来完成拖放操作,某些第三方程序(例如 Firefox、Chrome)无法理解。由于我无法更改第三方程序的行为,我尝试编写一个 Outlook 插件,将文件复制到临时文件夹并在第三方程序上的放置发生之前操纵(ole 和 com)放置信息。

我有以下问题:

我正在干预的事件是一个极端的解决方法:Outlook 中的“DragEnter”COM 事件,这样拖动的电子邮件需要穿过另一个 Outlook 元素才能被触发。这只是为了测试目的。问题是当电子邮件被拖动并同时操作放置信息或强制我自己的拖放 (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;
}

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 2016-06-18
      相关资源
      最近更新 更多