COM Drag&Drop Handler中shell完成拖放后如何执行操作?

问题描述 投票:0回答:0

在 Windows 上,我想要一个名为 Automatic Folder 的文件夹。当我在其中拖放某些内容时,文件夹会自行重命名 Folder 1 并创建一个新的空 Automatic Folder。最后有两个文件夹:

  1. 文件夹 1:包含拖放的文件。
  2. Automatic Folder:空的,准备好进行新的拖放。

为了实现这个目标,我在 C++ DLL 中实现了

IShellExtInit
IContextMenu
接口,并且我编辑了我的注册表以通知 shell 在有人将某些东西拖放到文件夹中时调用我的 DLL。 当我的 DLL 被调用时,我重命名文件夹并创建一个新文件夹。它可以工作,但是(正如 Windows 文档指出的那样)这发生在 shell 完成删除操作之前。当外壳完成放置时,它将拖放的文件放入Automatic Folder,而我希望外壳将它们放入Folder 1。 (我希望 shell 通过重命名时不会更改的 ID 来识别文件夹)

我的问题:有没有办法将文件放入Folder 1?通过:

  1. 告诉 shell 在删除完成后调用我的 DLL。
  2. 告诉 shell 执行
    SHFileOperationW
    CreateDirectoryW
    调用,我稍后重命名和创建文件夹。
  3. 重定向拖放目标文件夹。
  4. 任何其他解决方案(如果可能,除了等待 1 秒希望 shell 在重命名文件夹之前完成)。

我试过:

  1. 设置
    FOF_WANTMAPPINGHANDLE
    标志并在
    HANDLETOMAPPINGS
    调用期间给出
    SHFileOperationW
    ,希望shell会做一些映射。
  2. 重命名后调用
    SHChangeNotify
    ,通知文件夹已重命名。
  3. 让外壳要求
    IDropTarget
    界面,(希望它会打开新的门)但似乎只有当您拖放到文件而不是文件夹上时才有可能。

祝你有美好的一天:)

winapi com windows-shell shell-extensions
© www.soinside.com 2019 - 2024. All rights reserved.