我可以影响这个过程吗? 我有一个内置于.NET 3.5 / VS2008的应用程序。我使用win32 .res文件在应用程序中嵌入了多个图标。这是在VS2008中的项目的“属性”框中完成的 - 而不是指定.ico文件,勾选该框以指定.res文件。在.res文件中,您可以拥有多个图标。请参阅here了解我的意思。
每个图标包括256x256xRGB(PNG Cmopressed)“Vista等级”图像,256x256x32bit图像,以及通常级联的48x48,32x32和16x16图像,采用各种颜色组合。 如果我在资源管理器中查看生成的exe,我会看到美丽的256x256 Vista图像。
然后,我可以使用右键单击>将文件扩展名关联到我的应用。 “打开......”>在Vista的资源管理器中设置默认程序点击流。但是,文档旁边显示的图标是应用程序图标的小版本,覆盖在看起来像带有折角的白纸的顶部。
结果是当原始图像以“小图标”版本显示时,可以看到小图像可见。看起来很糟糕。
我知道可以完全省略折叠的纸张,或者至少可以覆盖更大的图像。例如,C#文件的图标有一张折叠的纸张,但C#标志很大且可见。我怎么能得到这个?安装WinZip 12时.zip文件的图标很大且可见,并且没有折叠的纸张。
文档图标是否与应用程序图标不同?为了注册Vista将用于与我的应用程序相关联的文档的图标,我的应用程序中是否有必要执行的操作?
答案 0 :(得分:13)
注册表中列出了文件扩展名的图标和文件关联。更具体地说,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。
通过右键单击将文件类型与程序相关联 - >打开方式...,您没有指定默认图标,因此资源管理器会获取您应用的图标并将其覆盖在通用文档图标上。
正确的方法是在您的设置中包含相应的注册表项,以将文件类型与您的应用程序和图标相关联。您需要包含的确切注册表值取决于您要添加到该文件类型的上下文菜单中的命令,但至少您需要Open命令。对于.cs文件,您可以看到有一个条目HKEY_CLASSES_ROOT\VisualStudio.cs.9.0\Shell\Commands\Open
,其(Default)
值包含在调用Open命令时要启动的应用程序。 (您现在可以忽略ddeexec
部分)
请记住,HKEY_CLASSES_ROOT
是两个注册表分支的映射视图:HKEY_CURRENT_USER\Software\Classes
和HKEY_LOCAL_MACHINE\Software\Classes
。如果您希望文件关联适用于所有用户,则需要写入HKEY_LOCAL_MACHINE
。您的设置需要以管理员身份运行才能执行此操作。否则,尝试写入HKEY_CLASSES_ROOT
将失败并拒绝访问或写入HKEY_CURRENT_USER
并仅为当前用户执行关联。 (这两者中的哪一个确实会发生取决于几个方面,比如操作系统是什么,用户是管理员还是不提升等等)
您可以在MSDN的Customizing File Types (Files Associations)部分中了解所有这些内容。特别是,File Types和Registering Programs with Client Programs会为您提供完成此操作的基础知识。