大凡熟悉 Windows的人,都知道系统中大多数的图标都在 %SystemRoot%/system32/shell32.dll 中,应用程序的图标存在于应用程序中,以下示例说明了如何获取他们的大小图标。
示例程序—
界面设计:
相关代码:
运行结果:
获得应用程序的图标,
获得系统文件的图标
获得外部文件的图标。
SHGetFileInfo函数
function SHGetFileInfo(pszPath: PAnsiChar; dwFileAttributes: DWORD;
var psfi: TSHFileInfo; cbFileInfo, uFlags: UINT): DWORD; stdcall;
pszPath 参数:指定的文件名。
当uFlags的取值中不包含 SHGFI_PIDL时,可直接指定;
当uFlags的取值中包含 SHGFI_PIDL时pszPath要通过计算获得,不能直接指定;
dwFileAttributes参数:文件属性。
仅当uFlags的取值中包含SHGFI_USEFILEATTRIBUTES时有效,一般不用此参数;
psfi 参数:返回获得的文件信息,是一个记录类型,有以下字段:
_SHFILEINFOA = record
hIcon: HICON; { out: icon } //文件的图标句柄
iIcon: Integer; { out: icon index } //图标的系统索引号
dwAttributes: DWORD; { out: SFGAO_ flags } //文件的属性值
szDisplayName: array [0..MAX_PATH-1] of AnsiChar; { out: display name (or path) } //文件的显示名
szTypeName: array [0..79] of AnsiChar; { out: type name } //文件的类型名
end;
cbFileInfo 参数:psfi的比特值;
uFlags 参数:指明需要返回的文件信息标识符,常用的有以下常数:
SHGFI_ICON; //获得图标
SHGFI_DISPLAYNAME; //获得显示名
SHGFI_TYPENAME; //获得类型名
SHGFI_ATTRIBUTES; //获得属性
SHGFI_LARGEICON; //获得大图标
SHGFI_SMALLICON; //获得小图标
SHGFI_PIDL; // pszPath是一个标识符
函数SHGetFileInfo()的返回值也随uFlags的取值变化而有所不同。
可见通过调用SHGetFileInfo()可以由psfi参数得到文件的图标句柄。但要注意在uFlags参数中不使用SHGFI_PIDL时,SHGetFileInfo()不能获得“我的电脑”等虚似文件夹的信息。