有关如何用 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
都没用过?不是吧?:)
用 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