Vista如何生成与我的应用程序相关联的文档的图标?

我可以影响过程吗?
我有一个.NET 3.5 / VS2008内置的应用程序。 我用win32 .res文件将多个图标embedded到应用程序中。 这是在VS2008项目的属性框中完成的,而不是指定一个.ico文件,勾选框来指定.res文件。 在.res文件中,您可以有多个图标。 在这里看到我的意思。

每个图标包含256x256xRGB(PNG Cmopressed)“Vista等级”图像,256x256x32bit图像以及48×48,32×32和16×16各种颜色组合的常见级联图像。 如果我在资源pipe理器中查看生成的exe文件,我会看到漂亮的256×256 Vista图像。

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

其结果是,当原始图像显示在“小图标”版本中时,原图像可以小到可见。 看起来很糟糕

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

文件的图标是不同于图标的应用程序? 在我的应用程序中是否有某些东西需要注册Vista才会用于与我的应用程序相关的文档的图标?

注册表中列出了文件扩展名的图标和文件关联。 更具体地说, 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 ,其中包含要在调用Open命令时启动的应用程序的(Default)值。 (您现在可以忽略ddeexec部分)

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

您可以在MSDN上的“ 自定义文件类型(文件关联)”部分阅读这些内容。 特别是,“ 文件类型”和“ 使用客户端程序注册程序”将为您提供如何完成此操作的基础知识。