日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SHGetFileInfo函数详解

發布時間:2025/5/22 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SHGetFileInfo函数详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SHGetFileInfo函數:

WINSHELLAPI DWORD WINAPI SHGetFileInfo(LPCTSTR pszPath,DWORD dwFileAttributes,SHFILEINFO FAR *psfi,UINT cbFileInfo,UINT uFlags );

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()不能獲得“我的電腦”等虛似文件夾的信息。
應該注意的是,在調用SHGetFileInfo()之前,必須使用 CoInitialize 或者OleInitialize 初始化COM,否則表面上能夠使用,但是會造成不安全或者喪失部分功能。例如,一個常見的例子:如果不初始化COM,那么調用該函數就無法得到.htm/.mht/.xml文件的圖標。
以下是兩個例子:

1.獲得系統圖標列表:

//取得系統圖標列表 usesShellAPI varImageListHandle : THandle;FileInfo: TSHFileInfo; //小圖標 ImageListHandle := SHGetFileInfo('C:/',0,FileInfo,SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON); //把圖標列表同一個名叫ListView1的ListView控件的小圖標關聯。 SendMessage(ListView1.Handle, LVM_SETIMAGELIST, LVSIL_SMALL, ImageListHandle); //大圖標 ImageListHandle := SHGetFileInfo('C:/',0,FileInfo,SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_LARGEICON); //把圖標列表同一個名叫ListView1的ListView控件的大圖標關聯。 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); //顯示名和圖標在系統圖標列表中的編號就分別在sfi.szDisplayName和sfi.iIcon中

原文鏈接:SHGetFileInfo函數詳解

總結

以上是生活随笔為你收集整理的SHGetFileInfo函数详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。