【发布时间】: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