2010-02-25 71 views
2

我安裝了InDesign CS2和CS3。兩者都使用.indd擴展名的文件。 Windows如何知道使用哪個圖標?它使用正確的圖標,即CS2文件有CS2圖標和CS3文件有CS3圖標。Windows如何將圖標關聯到資源管理器shell中的文件?

怎樣的Windows知道如何做到這一點?

我怎樣才能提取或以我的程序使用此版本檢測系統?

編輯:

謝謝您的外殼擴展圖標處理程序的答案。對我來說是新的東西。但是,有什麼方法可以連接到InDesign提供的IconHandler並使用它來檢測InDesign文件的版本?

+0

您不可能從InDesign的處理程序獲取該信息。但是,值得一提的是,是否有任何其他shell擴展註冊爲該文件類型,例如它可能會實現可以爲您提供該值的屬性界面。嘗試右鍵單擊以獲取文件屬性並檢查「詳細信息」選項卡。 我會嘗試加載cs2和cs3文件到十六進制編輯器,並看看前20個字節左右。在許多文件格式中,標題是通用的,並且包含版本號(不一定是2或3),因此您可以從中識別出來。 – 2010-02-25 22:38:34

+0

@the_mandrill這就是我正在讀第一個字節。但版本信息不固定,有時會浮動。這就是爲什麼我正在尋找更可靠的方法,如果有的話。 – Kugel 2010-02-26 07:32:02

+0

在這種情況下,除非文件格式已發佈或反向工程,否則您可能無法執行此操作。一種可能是調用Adobe的圖標處理程序,然後檢測哪個圖標已被使用,但這可能是不可靠的,並且當然要求處理程序已安裝在系統上(您可能無法保證,而且您不會能夠重新分配它)。 – 2010-02-27 22:20:51

回答

5

你需要寫一個圖標處理程序外殼擴展。請參閱IExtractIconMSDN文檔。基本的機制是你創建一個shell擴展併爲你想要的文件類型註冊圖標處理程序(查看HKEY_CLASSES_ROOT/.indd),然後shell加載你的處理程序,傳遞文件信息並請求一個圖標作爲回報。如果您想提供縮略圖位圖而不僅僅是圖標,還有IExtractImage方法。

請注意,你必須要特別小心寫作外殼擴展名處理任何內存泄漏或崩潰可以攻擊的Explorer和顯示打開的文件的任何其他應用程序/保存對話框。

+0

好的,你回答了我的問題的第一部分。另一部分可能是不可能的。 – Kugel 2010-02-26 08:54:03

1

它幾乎肯定會安裝一個shell icon extension handler。編寫你自己的知道如何檢測文件格式的文件格式沒有很好地記錄或根本沒有記錄是非常棘手的。

+0

你可以提供一個支持Windows 7的項目的鏈接,而不僅僅是XP? – Beno 2013-08-18 06:37:52

2

對於某些文件是HKEY_CLASSES_ROOT\<file extension here>\DefaultIcon註冊表項,但大多數文件映射到一個更友好的名稱,例如.pdf\(Default) - >AcroExch.Document(如果安裝了Adobe Reader)。

在你必須沿着註冊表去AcroExch.Document看看,要麼

  • DefaultIcon就在那裏
  • AcroExch.Document\CLSID\(Default)一些GUID這種情況下。然後,按照HKEY_CLASSES_ROOT\CLSID\<insert that guid here>,你會發現,這個鍵包含DefaultIcon

...和DefaultIcon是其中的圖標從加載。

希望已經足夠清楚了;)。我不知道你的特例,但是在註冊表中應該有所區別。

+0

固定圖標就是這種情況,但OP在詢問如何以編程方式切換圖標類型,這是因爲您有兩個版本的文件但擴展名相同。 +1,但提到必須在GUID上進行第二級間接尋址 – 2010-02-25 22:30:33

相關問題