IDataObject异步操作已完成通知

问题描述

有:

  1. 在具有大文件(下一个Folder A)的文件夹(下一个File)中打开Windows资源管理器窗口。
  2. 我的应用程序窗口(下一个App)已注册为放置目标并实现了IDropTarget
  3. 用户将App与他系统上的另一个文件夹(下一个Folder B)相关联。
  4. 用户希望通过FileFolder AFolder B复制/移动到App
  5. 用户开始从FileFolder A的{​​{1}}拖动操作。
  6. App收到App时,它将获得DragEnter中的IDropTarger并呼叫Folder B Folder B。当DragEnter收到AppDragOverDragLeave时,它将调用DragDrop Folder BDragOverDragLeave分别。
  7. DragDrop调用App的{​​{1}}时,Windows资源管理器将启动DragDrop的异步复制/移动操作(下一个Folder B)。 File的用户界面未被阻止,用户可以关闭Operation

App不管理App中的App,也不控制IDataObject。如果用户在File期间关闭Operation,则App将被中止。

我不要:

  1. 要通过IDataObjectAsyncCapability::SetAsyncMode(False)禁用Operation异步。
  2. 要自己通过Shell Clipboard FormatsOperation(复制或移动文件),因为如果Operation失败了,我不想处理所有可能的异常。让Windows资源管理器执行此操作。

我正在寻找一种获取有关Operation结束的通知的方法。如果在Operation进行期间用户关闭Operation,则App会警告用户。

我尝试了以下方法。用FORMATETC收集IDataObject::EnumFormatEtc,并为每个呼叫IDataObject::DAdvice

Operation

我每个App都得到hr == OLE_E_ADVISENOTSUPPORTED。我也尝试了FORMATETC{0,NULL,-1,-1},但结果相同。

如何接收操作结束的通知?或者如何将操作提交到Windows资源管理器进程?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)