有关如何用 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 (文件夹或文件)
特此求教。
希望不要用读注册表取文件类型对应图标和检查文件夹的方法。
文件后缀取得图标。
举例: 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
);
那么决定下载的时候是不是还要下一次?
我觉得没必要看ftp上的图标,ws_ftp都看不了的。
它反映的EXE图标就很正确,不知它是用什么办法?
我用LISTVIEW 察看图标,屡试百爽.
测试版本: CuteFTP 3.3 beta
测试结果: 无法显示服务器上exe文件的图标.
详细描述: 凡是EXE文件,显示的图标均为DOS程序的图标,就是那个空白的窗
口图标. 其他文档类型到是显示出正确的图标,但这个图标是基于
自己本地机器的文件关联的,就是说,假如server上有一个ASP文件,
如果你的本地机器上安装了PWS或IIS,你会看到正确的图标,否则没有.
顺便说一句,CuteFTP挺好用, 以前只用ws-ftp的说. :-)
CuteFtp并不能真正地取得FTP Server上的*.exe文件图标,即使高版本
也不行.但是,高版本的CuteFTP有个有趣的功能,即当你的机器上存在和服务
器上同名的exe文件,或者你下载过同名的文件时,CuteFTP就会以该图标显示该
exe文件,即使FTP服务器上的文件根本不是你机器上的那个文件. 同理, *.doc
之类的,也仅仅是取得你机器上注册过的扩展名对应的图标而已.
如果是你从未下载过的exe文件,机器上也没有同名文件,那么, 就只能以
空白的窗口图标来显示了.
原来写“文件木马”的时候,疏忽了,本机运行可以,改成C/S就玩完了
有了上面的思路,再做应该不会有太大困难了......
原文地址
http://www.delphibbs.com/delphibbs/dispq.asp?lid=133908