2.有一个API函数可获得在系统中注册的图标,具体是哪个我不记得了.我用这个函数做过一个程序.可实现这个功能.

解决方案 »

  1.   

    去年做的程序啦,记不起来了.你可以查一下API函数.
      

  2.   

    1.好像是用winexec()这个api函数来执行外部应用程序的
    2.读取文件可以用opendialog,然后用extracticon()获得句柄,再用drawicon()画出来吧
      当然要在canvas上面进行。
      

  3.   

    我对文件夹图标有过研究 最近在写一个相关的软件
    你可以读取Desktop.ini文件里面的设置为iconfile=/../aaa.ico等
      

  4.   

    你要是用vc你的这个问题就小kiss了
    可惜我刚学delphi
    还帮不上忙
      

  5.   

    创建一个应用程序的快捷方式:
    unit CreateLink_Unit;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ActiveX, ComObj, ShlObj;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      ShLink: IShellLink;
      PFile: IPersistFile;
      FileName: WideString;
    begin
      FileName := ExtractFilePath(Application.ExeName) + 'Shutcut to '
        + ExtractFileName(Application.ExeName) + '.lnk';
      if FileExists(FileName) then Exit;
      ShLink := CreateComObject (CLSID_ShellLink) as IShellLink;
      PFile := ShLink as IPersistFile;
      ShLink.SetPath(PChar(Application.ExeName));
      ShLink.SetWorkingDirectory(PChar(ExtractFilePath(Application.ExeName)));
      PFile.Save(PWChar(FileName), False);
    end;end.读取任意文件/文件夹的图标
    unit SysShellIcon_Unit;interfaceuses
      Windows, Messages, SysUtils,
    Classes, Graphics, Controls,
    Forms, Dialogs, ComCtrls,
    StdCtrls, ShellAPI, ExtCtrls,
    ImgList;type
      TForm1 = class(TForm)
        Button1: TButton;
        ListView1: TListView;
        Button2: TButton;
        ImageList1: TImageList;
        Edit1: TEdit;
        Button3: TButton;
        extedit: TEdit;
        Button4: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;const
    Test='c:\idftp.txt';var
    Form1: TForm1;
    implementation{$R *.DFM}
    function GetFileIconIndex(FileName:string):integer;
    var
    Ext:String;
    FileInfo: TSHFILEINFO;
    begin
    Ext:=FileName;
    Result:=ShGetFileInfo(Pchar
    (Ext), 0, FileInfo,
    SizeOf(TSHFileInfo), SHGFI_LARGEICON or
    SHGFI_SYSICONINDEX);
    Result:=FileInfo.iIcon;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
    ListView1.SmallImages.Free;
    ListView1.LargeImages.Free;
    end;procedure TForm1.Button1Click
    (Sender: TObject);
    begin
    if ListView1.Items.Count<>0 then
    ListView1.Items.Item[0].ImageIndex:=GetFileIconIndex(edit1.Text);
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    var i,j:integer;
    FileInfo: TSHFILEINFO;
    begin
    //with ListView1 do
    begin
    {SmallImages:=TImageList.CreateSize(32,32);
    SmallImages.ShareImages:=True;
    i:=ShGetFileInfo('*.*',0,
    FileInfo, SizeOf(TSHFileInfo),
    SHGFI_SmallICON or
    SHGFI_ICON or SHGFI_SYSICONINDEX);
    if i<>0 then SmallImages.Handle:=i;
    LargeImages:=TImageList.CreateSize(32,32);
    LargeImages.ShareImages:=True;}
    j:=ShGetFileInfo('',0,
    FileInfo, SizeOf(TSHFileInfo),
    SHGFI_LARGEICON or
    SHGFI_ICON or SHGFI_SYSICONINDEX {or SHGFI_PIDL});
    if j<>0 then ImageList1.Handle:=j;
    end;
    end;
    procedure TForm1.Button3Click(Sender: TObject);
    var FileInfo:TSHFileInfo;
    begin
      SHGetFileInfo(pchar('temp.'+extedit.Text),FILE_ATTRIBUTE_NORMAL, FileInfo, SizeOf(TSHFileInfo),
                            SHGFI_LargeICON or SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES);
      ListView1.Items.Item[0].ImageIndex:=FileInfo.iIcon;
    end;procedure TForm1.Button4Click(Sender: TObject);
    var i:integer; it:tlistitem;
    begin
      listview1.Items.Clear;
      for i:=0 to listview1.LargeImages.Count-1 do
        begin
          it:=listview1.Items.Add;
          it.Caption:=Inttostr(i);
          it.ImageIndex:=i;
        end;
    end;end.
      

  6.   

    1. 用Image显示Dll中的ico. 想使Image显示C:\windows\system\shell32.dll中的第2个图标,应该用image.picture.icon.handle:=ExtractIcon   (Hinstance,'C:\windows\system\shell32.dll',1)
    2.快捷方式...
    Uses
      comobj,ShlObj,activex,FileCtrl//快捷方式(桌面,开始按钮)
    //filename 文件名  filedesc 文件描述
    Procedure MakeLink(Filename:string;FileDesc:string;leixing:integer);
    var
      tmpObject : IUnknown;
      tmpSLink : IShellLink;
      tmpPFile : IPersistFile;
      PIDL : PItemIDList;
      StartupDirectory : array[0..MAX_PATH] of Char;
      LinkFilename : WideString;
      bianliang,Path:string;
    begin
      bianliang:='\'+FileDesc+'.lnk';
      tmpObject := CreateComObject(CLSID_ShellLink);//创建建立快捷方式的外壳扩展
      tmpSLink := tmpObject as IShellLink;          //取得接口
      tmpPFile := tmpObject as IPersistFile;        //用来储存*.lnk文件的接口
      tmpSLink.SetPath(pChar(FileName));            //设定 filename 所在路径
      tmpSLink.SetWorkingDirectory(pChar(ExtractFilePath(FileName)));    //设定工作目录
    //创建桌面快捷方式
      if leixing=1 then
        begin
          SHGetSpecialFolderLocation(0,CSIDL_DESKTOPDIRECTORY,PIDL);//获得桌面的Itemidlist
          Fillchar(startupdirectory,Max_Path+1,0);
          SHGetPathFromIDList(PIDL,StartupDirectory);               //获得路径
          LinkFilename := StartupDirectory + bianliang;
          WriteToUnstallFile(LinkFilename,2);
          tmpPFile.Save(pWChar(LinkFilename),FALSE);                //保存*.lnk文件
        End
      else
        begin
    //创建开始按钮中的 program 快捷方式
          SHGetSpecialFolderLocation(0,  CSIDL_PROGRAMS,PIDL);      //获得开始按钮中的program的Itemidlist
          Fillchar(startupdirectory,Max_Path+1,0);
          SHGetPathFromIDList(PIDL,StartupDirectory);               //获得路径
          Path:=StartupDirectory+'\港澳资讯';
          If not DirectoryExists(Path) then
            begin
              MkDir(Path);
              WriteToUnstallFile(Path,1);
            end;
          Path:=Path+'\'+ChanPinName;
          If not DirectoryExists(path) then
            begin
              MkDir(Path);
              WriteToUnstallFile(Path,1);
            end;
          LinkFilename := path + bianliang;
          WriteToUnstallFile(LinkFilename,2);
          tmpPFile.Save(pWChar(LinkFilename),FALSE);                //保存*.lnk文件
        End;
    end; 
    3.ExtractAssociatedIcon /ExtractIcon...自己看帮助吧 :p