Windows API:将文件类型X的图标分配给我的文件

时间:2012-02-06 18:18:40

标签: c# windows icons

我读过icon handlers,但我不确定如何使用它们。

假设我有一个C#应用程序(或者只是一个Windows文件系统对象,如.LNK文件),我想为它分配图标,当前正在使用的PDF文件(或MS) Word文件),虽然应用程序本身不是PDF文件。

如何分配图标/保存该关联的位置?使用Resource Hacker等工具时,我可以在应用程序文件中找到图标(当然PDF文件本身没有图标)。在HKCR的注册表中,我可以找到所有文件类型及其各自的开启者,图标定义在哪里?这被归类为多个问题 - 我最感兴趣的是如何将系统当前分配的文件类型图标(例如PDF)分配给我的应用程序。

2 个答案:

答案 0 :(得分:2)

在HKEY_CLASSES_ROOT中,将有一个文件扩展名条目,例如.pdf。此键下的字符串是文件类型的名称,在本例中为AcroExch.Document。再次在HKEY_CLASSES_ROOT中查找该密钥,您将找到DefaultIcon或CLSID条目。如果它是一个CLSID,你将需要再做一个间接级别 - 在我的系统上,我最终在HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{B801CA65-A1FC-11D0-85AD-444553540000}。在DefaultIcon键下,您将找到包含图标的文件的完整路径,以及文件中的图标编号。

您需要从文件中提取图标并将其放入您的应用程序中。请注意,该图标将由创建该图标的公司注册为商标和/或受版权保护 - 如果您自己个人使用,则没有人会追随您,但如果您使用其他人的图标发布应用程序,您可能会发现自己陷入困境。

答案 1 :(得分:0)

对于.LNK文件,应该很容易。只需右键单击“属性”,“更改图标”,然后在下一个对话框“探索”中。搜索例如EXE文件adobe acrobat,文件图标通常作为辅助图标位于exe文件中。

对我来说,路径必须是“C:\ Program Files(x86)\ Adob​​e \ Reader 10.0 \ Reader \ AcroRd32.exe” 好的,不好的例子,文档图标实际上是在AcroRd32.dll中的相同路径,但通常你不需要搜索太多。