
Windows平台下檔案圖示的呈現、變更與清理,基本上應該是透過explorer.exe程序處理的。系統安裝完成後對於一般檔案有預設的檔案型態定義與預設圖式,雖然這些圖式可以透過管理介面變更,但其實都是在變更系統登錄資料庫中的icon值。至於新安裝的應用軟體和其所屬的檔案型態,在成式安裝時必須告訴explorer其對應的檔案副檔名與檔案圖式。微軟提供許多應用程式開發時的工具,透過不同的方式來該變檔案的圖式,其中較為普片的就是利用COM(Component)組件來完成這項工作。 由於系統的多功,複雜了系統的處理邏輯,微軟為了應付大量的系統功能變更與更新,將系統許多功能模組拆解成功能性的組件,這些組件都以shell interface的方式定義,裡面定義了相關屬性與方法,利用物件繼承的特性實作這些方法與改變物件屬性。Explorer.exe只需要針對用戶發出的event透過QueryInterface()查詢到相關的interface以處理用戶端的動作。 下面我利用變更檔案突式來解釋程式的運作流程: 微軟定義了非常多的shell interface(https://msdn.microsoft.com/en-us/library/bb774328(v=VS.85).aspx),其中IExtractIcon定義了如何由物件中取出icon及其位置的方法,利用這個interface來實作我所想要的動作,我以c#來處理,當然也可以用c++,不過目的都一樣。




