2012-02-06 146 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在同一路徑,但通常你不必搜索太多。