【问题标题】:Thumbnails from not explorer "native" files (like windows does for jpg, png etc)来自非资源管理器“本机”文件的缩略图(就像 windows 为 jpg、png 等所做的那样)
【发布时间】:2013-01-07 02:24:54
【问题描述】:

我想要做的是强制 Windows 使用我的程序作为从某种不是图像的文件创建缩略图的基础。

在 Windows 中,您可以看到来自图像、word 文档、pdf 等的缩略图 - 这是我想要的其他文件类型。我可以从这些文件中创建位图(稍后我想将其用作缩略图)并将它们存储在某个地方。

我的问题是如何将扩展程序与创建/检查它们是否存在缩略图与我的程序并返回图像/图像路径的请求连接起来。任何帮助和示例都会非常有帮助。

【问题讨论】:

    标签: c# windows thumbnails


    【解决方案1】:

    您需要创建一个 COM DLL 库,其中包含一个实现 IExtractImage 的类。

    然后,您将 shell 扩展 注册到您支持的文件 extension

    HKEY_CLASSES_ROOT\[.ext]\shellex\[SID_IExtractImage]
    @default = [MyExtractImageShellExtensionCLSID]
    

    在哪里

    • .ext 是您正在为其创建查看器的文件的扩展名(例如.psd
    • SID_IExtractImage 是常数 {BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}
    • MyExtractImageShellExtensionCLSID 是实现 IExtractImage 的 shell 扩展的类 ID (clsid)

    所以,如果我注册了一个 Photoshop psd 扩展处理程序,并且我的 COM 对象的 clsid 是 {CCB7DB3B-D073-4606-B246-2A5174D274C8}

    HKEY_CLASSES_ROOT\.psd\shellex\{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}
    @default = {CCB7DB3B-D073-4606-B246-2A5174D274C8}
    

    那么只需创建一个COM对象,实现:

    • IPersist
    • IPersistFile
    • IPersistStream(可选)
    • IExtractImage

    Explorer 将使用您的扩展程序创建 Photoshop 图像的缩略图。

    注意:如果您运行的是 64 位 Windows,则需要 64 位编译器来创建 64 位 COM 对象 DLL,该 64 位 Windows 资源管理器可以加载。

    【讨论】:

    • 谢谢你,你能解释一下把编译好的dll放在哪里吗?
    • @Sturm 由于您的 dll 确实是一个 "COM 库",它将使用标准的 COM 注册机制。我确定它在 MSDN 中的某处进行了解释。但我有an answer here that explains a lot of it。重要的一点是你有一个clsid(例如{CCB7DB3B-D073-4606-B246-2A5174D274C8}),你也可以有一个ProgID(例如Acme.SuperPdfImageExtractor
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 2011-04-03
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多