Windows CE如何根据文件名获取其对应文件图标icon
Windows CE如何根據文件名獲取其對應文件圖標icon
1、背景介紹
如果把一文件copy到Windows CE5.0系統的U盤(或者桌面等目錄)中,那么這個文件就會有其對應的圖標顯示,如下圖。那么Windows CE5.0文件系統是如何管理文件和其對應圖標的呢?
2、文件圖標簡介
在WCE5.0系統中,你能看到的圖標都有其對應的圖標資源,問題就在于這些圖標在哪里,而WCE系統又是如何管理的呢?說到底,文件圖標資源存在于兩種形式——exe文件和dll文件中。
◆EXE文件圖標
每個exe文件都有其對應的文件圖標,可以通過函數ExtractIconEx來獲取exe文件中圖標。
◆dll文件中的圖標
許多dll中都包含有圖標資源,可以通過ExtractIconEx和LoadImage來獲取dll中的圖標(要知道圖標ID)。
3、Windows CE源碼分析
有關這部分源碼在:$:/WINCE500/PUBLIC/SHELL/OAK/HPC/CESHELL/API/iconcache.cpp文件中,其實就涉及到一個函數:
CIconCache::CacheInfo * CIconCache::CacheItem(LPCWSTR pszFilePath)
?????? 理解了這個函數,也就理解了本課題。首先輸入參數僅僅是一個文件的完整路徑,也就是說WCE只要根據一文件名就可以得到其對應文件類型圖標。如圖3-1緊接著ASSERT(!PathIsDirectory(pszFilePath))確保輸入參數不是路徑。PathIsGUID判斷文件名是不是GUID,不是GUID就是系統文件了(// It's a file system file)。
?
?
圖3-1 CacheItem函數
?????? PathIsExe函數判斷文件是否為exe文件,是就用ExtractIconEx獲取其圖標。不是exe文件繼續往下走,用PathFindExtension獲取文件后綴名。根據后綴名到注冊表去查找文件類型——// TYPE: Figure out the type information,再根據后綴去查找圖標——// ICON: Get the requested icons。
這里注冊表會包含后綴名的一些信息。舉個例子,比如*.bmp文件,先查找注冊表[HKEY_CLASSES_ROOT/.bmp],于是你可以看到如圖3-2所示的畫面,其中Default項的值為bmpimage,那么在注冊表[HKEY_CLASSES_ROOT/bmpimage/DefaultIcon]會看到如下信息,說明bmp文件圖標就是imageviewer.exe的圖標。再看看dll文件的信息[HKEY_CLASSES_ROOT/dllfile/DefaultIcon],如圖3-4,說明*.dll文件的圖標是ceshell.dll中ID為4608的圖標。
?
?
圖3-2
?
圖3-3
?
圖3-4
4、總結
?????? WCE文件系統根據文件名,通過注冊表管理其對應的文件圖標??偨Y有三種情況:
◆*.exe文件
Exe文件最簡單,直接通過ExtractIconEx獲取文件圖標。
◆簡介exe文件,如*.bmp等
如*.bmp文件雖然不是exe文件,但在注冊表中會將*.bmp文件關聯到imageviewer.exe,再通過ExtractIconEx獲取imageviewer.exe圖標作為*.bmp文件圖標。
◆WCE系統SHELL中的圖標
如*.dll文件,在注冊表中關聯的并不是exe文件,那么這樣情況,是由ceshell.dll中的圖標來作為*.dll的文件圖標。
?
?
總結
以上是生活随笔為你收集整理的Windows CE如何根据文件名获取其对应文件图标icon的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Python【批量】生产【电子奖状】的
- 下一篇: MS17-010特别版补丁NSA漏洞