【问题标题】:How to associate a directory with my application如何将目录与我的应用程序关联
【发布时间】:2011-12-20 17:12:05
【问题描述】:

我不想关联扩展名而是文件夹。这样当我点击桌面告诉操作系统使用我的应用程序而不是资源管理器时。

我试图用我的程序替换 HKEY_CLASSES_ROOT\Folder\shell\open\command explorer.exe,但它不能正常工作,然后我用我的应用程序打开控制面板和其他东西,这不是我想要的.

谢谢!

【问题讨论】:

  • 我只是猜测,但我认为答案可能是“不要那样做”

标签: c++ delphi registry


【解决方案1】:

您想要做的可以通过实现自定义 IShellFolder 来实现。 http://msdn.microsoft.com/en-us/library/windows/desktop/cc144093(v=vs.85).aspx 有详细信息。至少你必须实施

  1. IPersistFolder 接口
  2. IShellFolder 接口
  3. IEnumIDList 接口

这就是 Google 云端硬盘 使用的例子

【讨论】:

  • 我已经采用了这个解决方案,但是实现起来非常复杂,因为我需要 DLL (COM) 来启动我的主 exe,处理这些调用等。我希望有一些更简单的解决方案。直接调用我的exe文件。
  • @IvanMark 据我所知,这是唯一的方法
  • 请记住,您将需要 32 位和 64 位 shell 扩展,因此如果您打算使用 Delphi,则需要 XE2。
  • 我没有 XE2,但是 XE,所以我想在一些免费的编译器 (Lazarus) 下制作这部分,或者用 C++ 生成它。如果有人有一些 C 示例,那将是很好的开始。
  • FPC 过去从来都不擅长生产 COM 服务器。几年前,当我遇到这个问题并且不得不编写一个 64 位的 shell 扩展时,我是用 C++ 完成的。不是很有趣,但也不是那么糟糕。
【解决方案2】:

FolderProgID 表示任何文件夹,包括非文件系统文件夹。您的案例的正确 ProgID 是 Directory

Reference

【讨论】:

    猜你喜欢
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2011-10-15
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多