2012-02-06 151 views
2

我已阅读icon handlers,但我不确定如何使用它们。Windows API:将文件类型X的图标分配给我的文件

比方说,我有一个C#应用程序(或只是一个Windows文件系统对象,如.lnk文件),我想分配给它的图标,一个PDF文件目前正在使用(或MS WORD文件),尽管应用程序本身不是PDF文件。

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

回答

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

请注意,问题不是为文件类型设置图标。这是关于设置exe本身的图标。 – 2012-02-06 19:54:56

+0

@RaymondChen,谢谢 - 我错过了。 – 2012-02-06 19:58:12

+0

还请注意,为应用程序图标使用文档图标可能会使您标记为恶意软件(木马伪装成PDF)。 – 2012-02-06 21:44:02

0

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

对我来说,路径qould是 “C:\ Program Files文件(x86)的\的Adobe \读者10.0 \读卡器\ AcroRd32.exe” 好的,坏榜样,文档图标实际上是AcroRd32.dll在同一路径,但通常你不必搜索太多。