SHGetFileInfo函数详解
SHGetFileInfo函數(shù):
WINSHELLAPI DWORD WINAPI SHGetFileInfo(LPCTSTR pszPath,DWORD dwFileAttributes,SHFILEINFO FAR *psfi,UINT cbFileInfo,UINT uFlags );pszPath 參數(shù):指定的文件名。
?當uFlags的取值中不包含 SHGFI_PIDL時,可直接指定;
?當uFlags的取值中包含 SHGFI_PIDL時pszPath要通過計算獲得,不能直接指定;
dwFileAttributes參數(shù):文件屬性。
?僅當uFlags的取值中包含SHGFI_USEFILEATTRIBUTES時有效,一般不用此參數(shù);
psfi 參數(shù):返回獲得的文件信息,是一個記錄類型,有以下字段:
? _SHFILEINFOA = record
??? hIcon: HICON;????????????????????? { out: icon }? //文件的圖標句柄
??? iIcon: Integer;??????????????????? { out: icon index }???? //圖標的系統(tǒng)索引號
??? 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 參數(shù):psfi的比特值;
uFlags 參數(shù):指明需要返回的文件信息標識符,常用的有以下常數(shù):
??? SHGFI_ICON;?????????? //獲得圖標
??? SHGFI_DISPLAYNAME;??? //獲得顯示名
??? SHGFI_TYPENAME;?????? //獲得類型名
??? SHGFI_ATTRIBUTES;???? //獲得屬性
??? SHGFI_LARGEICON;????? //獲得大圖標
??? SHGFI_SMALLICON;????? //獲得小圖標
??? SHGFI_PIDL;?????????? // pszPath是一個標識符
函數(shù)SHGetFileInfo()的返回值也隨uFlags的取值變化而有所不同。
可見通過調(diào)用SHGetFileInfo()可以由psfi參數(shù)得到文件的圖標句柄。但要注意在uFlags參數(shù)中不使用SHGFI_PIDL時,SHGetFileInfo()不能獲得“我的電腦”等虛似文件夾的信息。
應該注意的是,在調(diào)用SHGetFileInfo()之前,必須使用 CoInitialize 或者OleInitialize 初始化COM,否則表面上能夠使用,但是會造成不安全或者喪失部分功能。例如,一個常見的例子:如果不初始化COM,那么調(diào)用該函數(shù)就無法得到.htm/.mht/.xml文件的圖標。
以下是兩個例子:
1.獲得系統(tǒng)圖標列表:
//取得系統(tǒng)圖標列表 usesShellAPI varImageListHandle : THandle;FileInfo: TSHFileInfo; //小圖標 ImageListHandle := SHGetFileInfo('C:/',0,FileInfo,SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON); //把圖標列表同一個名叫ListView1的ListView控件的小圖標關聯(lián)。 SendMessage(ListView1.Handle, LVM_SETIMAGELIST, LVSIL_SMALL, ImageListHandle); //大圖標 ImageListHandle := SHGetFileInfo('C:/',0,FileInfo,SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_LARGEICON); //把圖標列表同一個名叫ListView1的ListView控件的大圖標關聯(lián)。 SendMessage(ListView1.Handle, LVM_SETIMAGELIST, LVSIL_NORMAL, ImageListHandle);2.獲得一個文件的顯示名和圖標
varsfi: TSHFileInfo;IconIndex : Integer; //取圖標的索引號等信息 SHGetFileInfo(PAnsiChar(FileName),0,sfi,sizeof(TSHFileInfo),ShellAPI.SHGFI_DISPLAYNAME or ShellAPI.SHGFI_TYPENAME or ShellAPI.SHGFI_LARGEICON or ShellAPI.SHGFI_ICON); //顯示名和圖標在系統(tǒng)圖標列表中的編號就分別在sfi.szDisplayName和sfi.iIcon中原文鏈接:SHGetFileInfo函數(shù)詳解
總結
以上是生活随笔為你收集整理的SHGetFileInfo函数详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: winform记事本初步实现
- 下一篇: Qt实现FlatUI样式(开源)