有关如何用 SHGetFileInfo 或者其它函数取得 FTP 服务器上图标的问题(100分)

3

3h

Unregistered / Unconfirmed
GUEST, unregistred user!
如题。<br>用以下函数不行,返回值为0:<br>procedure TForm1.ListView1GetImageIndex(Sender: TObject; Item: TListItem);<br>Const<br>&nbsp; &nbsp;Mode = SHGFI_ICON or SHGFI_SYSICONINDEX;<br>Var<br>&nbsp; &nbsp;info : TSHFileInfo;<br>&nbsp; &nbsp;P : ^String;<br>begin<br>&nbsp; &nbsp; &nbsp;If Item.ImageIndex = -1 then<br>&nbsp; &nbsp; &nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; &nbsp; FillChar(Info,SizeOf(TSHFileInfo),0);<br>&nbsp; &nbsp; &nbsp; &nbsp; P := Item.Data;<br>&nbsp; &nbsp; &nbsp; &nbsp; SHGetFileInfo(PChar(P^), 0, Info, SizeOf(TSHFileInfo), Mode);<br>&nbsp; &nbsp; &nbsp; &nbsp; Item.ImageIndex := Info.iIcon;<br>&nbsp; &nbsp; &nbsp; &nbsp; end;<br>end;<br>其中DATA是FTP服务器上文件的全名,如: /public_html (文件夹或文件)<br><br>特此求教。<br>希望不要用读注册表取文件类型对应图标和检查文件夹的方法。
 
呵呵,这样可以吗? 好象不能得到耶!<br>
 
希望不要用读注册表取文件类型对应图标<br>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>好像只有这个办法:(,要不然就先把文件下载下来。3h有点异想天开了:)
 
ExtractAssociatedIcon不知是否是Winapi中的函数? &nbsp;我想应该能根据<br>文件后缀取得图标。
 
我是想利用它的扩展名,取得此一类型的图标,而且是图标在系统 IMAGELIST 中的INDEX,仅此而已。看来只有读注册表一个办法了,不过EXE的怎么办? :)
 
用这个可以不用读注册表. 不过你必须先建立所有FILE 的映射.<br>举例: FTP SERVER上有3个文件, 分别是AAA.TXT, AAA.DOC, AAA.EXE, 建立这三<br>个文件到临时目录上, 然后用下面的API得到ICON, 然后再删除就可以了.<br>另外, EXE和DLL的图标可以在DL下来后更新图标, 方法一样.<br>HICON ExtractAssociatedIcon(<br>&nbsp; HINSTANCE hInst, &nbsp; &nbsp;// application instance handle<br>&nbsp; LPTSTR lpIconPath, &nbsp;// path and filename of file for which icon is <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // wanted<br>&nbsp; LPWORD lpiIcon &nbsp; &nbsp; &nbsp;// pointer to icon index<br>);<br>
 
to cytown: 太浪费资源了吧?为了看图标就把文件下下来,然后再删除,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;那么决定下载的时候是不是还要下一次?<br><br>我觉得没必要看ftp上的图标,ws_ftp都看不了的。
 
建个同名后缀的文件,取得图标。
 
CAKK: 不是的, 我说用临时文件来建立ICON, 不是把文件DL下来.<br>
 
to cytown: 对,关键是提取EXE/DLL的图标,看来没有更实用的办法了。
 
不知大家有没有用过CUTFTP?<br>它反映的EXE图标就很正确,不知它是用什么办法?
 
都没用过?不是吧?:)
 
用 MODE=SHGFI_SYSICONINDEX OR SHGFI_LARGEICON OR SHGFI_TYPENAME<br>我用LISTVIEW 察看图标,屡试百爽.<br>
 
3h: cuteftp也不能得到远程exe文件的图标!<br>
 
to guo_qpeter:<br>&nbsp; 这个方法我知道不过只限于本地文件。<br><br>to cytown:<br>&nbsp; 打赌五百分怎么样?(没办法天生爱赌) <br>&nbsp; :)<br>&nbsp; 我用的是2.8的版本。
 
3h: 呵呵,白给我分?<br>&nbsp;
 
索性再加上100分!怎么样?!
 
我来当裁判! 我去下个cuteftp看看先.....
 
试验结果出来了:<br><br>测试版本: CuteFTP 3.3 beta<br>测试结果: 无法显示服务器上exe文件的图标.<br>详细描述: 凡是EXE文件,显示的图标均为DOS程序的图标,就是那个空白的窗<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;口图标. 其他文档类型到是显示出正确的图标,但这个图标是基于<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;自己本地机器的文件关联的,就是说,假如server上有一个ASP文件, <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;如果你的本地机器上安装了PWS或IIS,你会看到正确的图标,否则没有.<br><br>顺便说一句,CuteFTP挺好用, 以前只用ws-ftp的说. :)
 
&nbsp; &nbsp;俺用了3年的CuteFtp,应该有点发言权,呵呵.<br>&nbsp; &nbsp; CuteFtp并不能真正地取得FTP Server上的*.exe文件图标,即使高版本<br>也不行.但是,高版本的CuteFTP有个有趣的功能,即当你的机器上存在和服务<br>器上同名的exe文件,或者你下载过同名的文件时,CuteFTP就会以该图标显示该<br>exe文件,即使FTP服务器上的文件根本不是你机器上的那个文件. 同理, *.doc<br>之类的,也仅仅是取得你机器上注册过的扩展名对应的图标而已. <br>&nbsp; &nbsp; 如果是你从未下载过的exe文件,机器上也没有同名文件,那么, 就只能以<br>空白的窗口图标来显示了.
 
顶部