Windows CE如何根据文件名获取其对应文件图标icon

来源:互联网 发布:外汇非农数据 编辑:程序博客网 时间:2024/06/08 17:27

Windows CE如何根据文件名获取其对应文件图标icon

1、背景介绍

如果把一文件copyWindows CE5.0系统的U盘(或者桌面等目录)中,那么这个文件就会有其对应的图标显示,如下图。那么Windows CE5.0文件系统是如何管理文件和其对应图标的呢?

2、文件图标简介

WCE5.0系统中,你能看到的图标都有其对应的图标资源,问题就在于这些图标在哪里,而WCE系统又是如何管理的呢?说到底,文件图标资源存在于两种形式——exe文件和dll文件中。

EXE文件图标

每个exe文件都有其对应的文件图标,可以通过函数ExtractIconEx来获取exe文件中图标。

dll文件中的图标

许多dll中都包含有图标资源,可以通过ExtractIconExLoadImage来获取dll中的图标(要知道图标ID)。

3Windows 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.dllID4608的图标。

 

图

 

3-2

图

 

3-3

图

 

3-4

4、总结

       WCE文件系统根据文件名,通过注册表管理其对应的文件图标。总结有三种情况:

*.exe文件

Exe文件最简单,直接通过ExtractIconEx获取文件图标。

简介exe文件,如*.bmp

*.bmp文件虽然不是exe文件,但在注册表中会将*.bmp文件关联到imageviewer.exe,再通过ExtractIconEx获取imageviewer.exe图标作为*.bmp文件图标。

WCE系统SHELL中的图标

*.dll文件,在注册表中关联的并不是exe文件,那么这样情况,是由ceshell.dll中的图标来作为*.dll的文件图标。

原创粉丝点击