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