function GetFileIcon(const Filename:String; SmallIcon:Boolean):HICON;
var info:TSHFILEINFO;
    Flag: Integer;
begin
  if SmallIcon then Flag:=(SHGFI_SMALLICON or SHGFI_ICON)
  else Flag:=(SHGFI_LARGEICON or SHGFI_ICON);
  SHGetFileInfo(Pchar(Filename),0,info,Sizeof(info),Flag);
  Result:=info.hIcon;
end;

解决方案 »

  1.   

    procedure TForm1.FileListBox1Click(Sender: TObject);
    var
      i:integer;
      icon:hicon;
      ll:ticon;
    begin
      with listbox1.items do
        for i:=0 to count-1 do ticon(objects[i]).free;
      listbox1.clear;
      i:=0;
      repeat
        icon:=ExtractIcon(hinstance,pchar(filelistbox1.filename),i);
        if icon<>0 then
        begin
          ll:=ticon.create;
          ll.handle:=icon;
          listbox1.Items.Addobject('',ll);
        end;
        inc(i);
      until icon=0;
    end;procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    var
      icon:ticon;
    begin
      with (control as tlistbox).canvas do
      begin
        fillrect(rect);
        icon:=ticon(listbox1.items.objects[index]);
        if icon<>nil then
        begin
          draw(rect.left+(39-icon.width)div 2,rect.top+(39-icon.height)div 2,icon);
        end;
      end;
    end;
      

  2.   

    var
      TheIcon: TIcon;
    begin
      TheIcon := TIcon.Create;
      TheIcon.Handle := ExtractIcon(hInstance,
                                    'C:\SOMEPATH\SOMEPROG.EXE',
                                    0);
    {对icon进行一些操作}
      TheIcon.Free;
    end;
      

  3.   

    唉,
    帮你找资料,累S我了~~~呵呵呵,不用那么麻烦吧楼上的~~
      
    有一个api函数GetClassLong可以返回自身窗口类的图标句柄 
    如下:  
    HICON  hIcon=GetClassLong(hwnd,GCL_HICON);  
    试试吧  当然,在这之间,你必须知道"外部已经运行的程序"的句柄了~~
    千万别再问我这个了(FindWindow)!!!!!!
      

  4.   

    CoolSlob的回答最有用,我试了一下,还成,不过Mplayer2.exe的图标取不到,能解决吗?---------------------------------
    风过西窗客渡舟船无觅处
    年年一川新草遥看却似旧