如何得到远程ICO文件图标[整理]

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

 

用以下函数不行,返回值为0:
procedure TForm1.ListView1GetImageIndex(Sender: TObject; Item: TListItem);
Const
   Mode = SHGFI_ICON or SHGFI_SYSICONINDEX;
Var
   info : TSHFileInfo;
   P : ^String;
begin
     If Item.ImageIndex = -1 then
        begin
        FillChar(Info,SizeOf(TSHFileInfo),0);
        P := Item.Data;
        SHGetFileInfo(PChar(P^), 0, Info, SizeOf(TSHFileInfo), Mode);
        Item.ImageIndex := Info.iIcon;
        end;
end;
其中DATA是FTP服务器上文件的全名,如: /public_html (文件夹或文件)

特此求教。
希望不要用读注册表取文件类型对应图标和检查文件夹的方法。  

 

 

来自: wuyi, 时间:1999-9-14 17:16:00, ID:133959
ExtractAssociatedIcon不知是否是Winapi中的函数?  我想应该能根据
文件后缀取得图标。  

 

 

来自: 3h, 时间:1999-9-15 19:53:00, ID:134295
我是想利用它的扩展名,取得此一类型的图标,而且是图标在系统 IMAGELIST 中的INDEX,仅此而已。看来只有读注册表一个办法了,不过EXE的怎么办? :)  

 

来自: cytown, 时间:1999-9-16 9:03:00, ID:134467
用这个可以不用读注册表. 不过你必须先建立所有FILE 的映射.
举例: FTP SERVER上有3个文件, 分别是AAA.TXT, AAA.DOC, AAA.EXE, 建立这三
个文件到临时目录上, 然后用下面的API得到ICON, 然后再删除就可以了.
另外, EXE和DLL的图标可以在DL下来后更新图标, 方法一样.
HICON ExtractAssociatedIcon(
  HINSTANCE hInst,    // application instance handle
  LPTSTR lpIconPath,  // path and filename of file for which icon is
                      // wanted
  LPWORD lpiIcon      // pointer to icon index
);
  
来自: cAkk, 时间:1999-9-16 9:11:00, ID:134475
to cytown: 太浪费资源了吧?为了看图标就把文件下下来,然后再删除,
           那么决定下载的时候是不是还要下一次?

我觉得没必要看ftp上的图标,ws_ftp都看不了的。  


来自: wuyi, 时间:1999-9-16 9:19:00, ID:134481
建个同名后缀的文件,取得图标。  


来自: cytown, 时间:1999-9-16 9:42:00, ID:134495
CAKK: 不是的, 我说用临时文件来建立ICON, 不是把文件DL下来.
  


来自: cAkk, 时间:1999-9-16 9:50:00, ID:134500
to cytown: 对,关键是提取EXE/DLL的图标,看来没有更实用的办法了。  


来自: 3h, 时间:1999-9-16 11:22:00, ID:134545
不知大家有没有用过CUTFTP?
它反映的EXE图标就很正确,不知它是用什么办法?  


来自: 3h, 时间:1999-9-17 17:30:00, ID:135051
都没用过?不是吧?:)  


来自: guo_qpeter, 时间:1999-9-22 1:44:00, ID:136549
用 MODE=SHGFI_SYSICONINDEX OR SHGFI_LARGEICON OR SHGFI_TYPENAME
我用LISTVIEW 察看图标,屡试百爽.
  


来自: cytown, 时间:1999-9-22 9:37:00, ID:136581
3h: cuteftp也不能得到远程exe文件的图标!

 

来自: cAkk, 时间:1999-9-25 1:19:00, ID:137365
试验结果出来了:

测试版本: CuteFTP 3.3 beta
测试结果: 无法显示服务器上exe文件的图标.
详细描述: 凡是EXE文件,显示的图标均为DOS程序的图标,就是那个空白的窗
         口图标. 其他文档类型到是显示出正确的图标,但这个图标是基于
         自己本地机器的文件关联的,就是说,假如server上有一个ASP文件,
         如果你的本地机器上安装了PWS或IIS,你会看到正确的图标,否则没有.

顺便说一句,CuteFTP挺好用, 以前只用ws-ftp的说. :-)  


来自: Town, 时间:1999-9-25 8:22:00, ID:137376
    俺用了3年的CuteFtp,应该有点发言权,呵呵.
    CuteFtp并不能真正地取得FTP Server上的*.exe文件图标,即使高版本
也不行.但是,高版本的CuteFTP有个有趣的功能,即当你的机器上存在和服务
器上同名的exe文件,或者你下载过同名的文件时,CuteFTP就会以该图标显示该
exe文件,即使FTP服务器上的文件根本不是你机器上的那个文件. 同理, *.doc
之类的,也仅仅是取得你机器上注册过的扩展名对应的图标而已.
    如果是你从未下载过的exe文件,机器上也没有同名文件,那么, 就只能以
空白的窗口图标来显示了.  

 

 

原来写“文件木马”的时候,疏忽了,本机运行可以,改成C/S就玩完了

有了上面的思路,再做应该不会有太大困难了......

 

 

 

 

原文地址

http://www.delphibbs.com/delphibbs/dispq.asp?lid=133908

 

你可能感兴趣的:(ListView,server,FTP服务器,exe,imagelist,winapi)