<br> WINSHELLAPI DWORD WINAPI SHGetFileInfo(<br> LPCSTR pszPath,<br> DWORD dwFileAttributes,<br> SHFILEINFO FAR *psfi,<br> UINT cbFileInfo,<br> UINT uFlags<br>  
;<br>它的作用是:取回文件系统中的一个对象的信息,对象可以是文件、文件夹、<br>目录或驱动器的根目录。经过三个多小时的调试,我终于完全弄明白怎样取<br>得并显示一个文件的图标了:包括大图标、小图标,象资源管理器上的那样。<br>操作过程大体如下:<br>var ShFileInfo: TSHFILEINFO;<br> FileList:TListView;<br>begin<br> ...<br> Result := FileList.Items.Add;<br> with Result do<br> begin<br> Caption:=filename;<br> ShGetFileInfo(pchar(vartostr(filename)), 0, SHFileInfo, SizeOf(SHFileInfo),<br> SHGFI_SMALLICON or SHGFI_SYSICONINDEX or SHGFI_TYPENAME)=0 then<br> showmessage('error in shgetfileinfo');<br> ImageIndex := SHFileInfo.iIcon;<br> end;<br> ...<br>end;<br>这是最关键的几个地方,中间省略了许多细节。<br>另:我在6月17日的笔记里提到ExtractAssociatedIcon()和ExtractIcon()函数,<br>也可以提取文件的图标,但是速度比这个方法要慢上许多,而且我不会用它们提<br>取小图标。<br>//////////////////////////////////////////////////////////////<br>uses ShellApi;<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br> Icon : hIcon;<br> IconIndex : word;<br><br>begin<br> Icon := ExtractAssociatedIcon(HInstance,<br> 'C:/SomePath/SomeFile.ext',<br> IconIndex);<br> DrawIcon(Form1.Canvas.Handle, 10, 10, Icon);<br>end;<br><br>