【问题标题】:How does Vista generate the icon for documents associated to my application?Vista 如何为与我的应用程序关联的文档生成图标?
【发布时间】:2010-10-09 12:17:06
【问题描述】:

我可以影响这个过程吗?
我有一个内置于 .NET 3.5 / VS2008 的应用程序。我使用 win32 .res 文件将多个图标嵌入到应用程序中。这是在 VS2008 中项目的“属性”框中完成的 - 不是指定 .ico 文件,而是勾选该框以指定 .res 文件。在 .res 文件中,您可以有多个图标。我的意思见here

每个图标都包含一个 256x256xRGB(PNG Cmopressed)“Vista 级”图像、一个 256x256x32 位图像以及各种颜色组合的通常级联 48x48、32x32 和 16x16 图像。 如果我在资源管理器中查看生成的 exe,我会看到漂亮的 256x256 Vista 大图像。

然后我可以将文件扩展名关联到我的应用程序,使用右键单击 >“打开方式...”> 在 Vista 的资源管理器中设置默认程序点击流。但是显示在文档旁边的图标是应用程序图标的一个小版本,覆盖在看起来像一张折叠角的白纸之上。

结果是,当原始图像以“小图标”版本显示时,原始图像很小以至于无法看到。看起来很糟糕。

我知道完全省略折叠的纸是可能的,或者至少可以在上面覆盖更大的图像。例如,C# 文件的图标有一张折叠的纸,但 C# 标志很大且可见。我怎样才能得到这个?安装 WinZip 12 时 .zip 文件的图标大且可见,并且没有折叠纸。

文档图标与应用程序图标不同吗?在我的应用程序中,我必须做些什么来注册一个图标,Vista 将用于与我的应用程序关联的文档吗?

【问题讨论】:

    标签: windows winforms windows-vista icons embedded-resource


    【解决方案1】:

    文件扩展名的图标和文件关联在注册表中列出。更具体地说,HKEY_CLASSES_ROOT\.ext 条目包含内容类型、感知类型,并且在(Default) 值中是实际关联。例如,.cs 文件的默认值为 VisualStudio.cs.9.0(我有 VS 2008)。您可以查看HKEY_CLASSES_ROOT\VisualStudio.cs.9.0 以查看与此文件类型相关的实际图标、程序和命令。特别是,HKEY_CLASSES_ROOT\VisualStudio.cs.9.0\DefaultIcon 是告诉资源管理器为此类文件显示哪个图标的条目。它指向一个二进制文件和该二进制文件中的资源 ID。

    当您通过右键单击 -> 打开方式将文件类型与程序相关联时,您没有指定默认图标,因此资源管理器会获取您应用程序的图标并将其覆盖在通用文档图标上。

    正确的方法是在您的设置中包含适当的注册表项,以将文件类型与您的应用程序和图标相关联。您需要包含的确切注册表值取决于您要添加到该文件类型的上下文菜单中的命令,但至少您需要打开命令。对于 .cs 文件,您可以看到有一个条目 HKEY_CLASSES_ROOT\VisualStudio.cs.9.0\Shell\Commands\Open(Default) 值包含调用 Open 命令时要启动的应用程序。 (您现在可以忽略ddeexec 部分)

    请记住,HKEY_CLASSES_ROOT 是两个注册表分支的映射视图:HKEY_CURRENT_USER\Software\ClassesHKEY_LOCAL_MACHINE\Software\Classes。如果您希望您的文件关联适用于所有用户,您需要写信至HKEY_LOCAL_MACHINE。您的设置需要以管理员身份运行才能执行此操作。否则,尝试写入HKEY_CLASSES_ROOT 将失败并拒绝访问或写入HKEY_CURRENT_USER 并仅为当前用户进行关联。 (这两个究竟会发生哪一个取决于几件事,比如操作系统是什么,用户是否是管理员但没有提升等等)

    您可以在 MSDN 上的 Customizing File Types (Files Associations) 部分阅读所有这些内容。特别是,File TypesRegistering Programs with Client Programs 将为您提供有关如何执行此操作的基础知识。

    【讨论】:

    • 哇!很好的答案。完美的!正是我想要的!
    猜你喜欢
    • 2023-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-25
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多