如何得到远程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

你可能感兴趣的:(dos,asp,IIS)