文档章节

从 EXE 或 DLL 中获取图标的函数 - 回复 "小李子子" 的问题

涂孟超
 涂孟超
发布于 2014/09/26 15:34
字数 364
阅读 11
收藏 0
问题来源: http://www.cnblogs.com/del/archive/2008/12/25/1070115.html#1413353

代码文件:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses ShellAPI;

{从 EXE 或 DLL 中获取 ICO 图标的函数, 需要 uses ShellAPI}
function GetIco(const ExePath: string; SavePath: string): Integer; {返回获取总数}
var
  ico: TIcon;
  i,count: Integer;
  FileName: string;
begin
  Result := 0;
  count := ExtractIcon(HInstance, PChar(ExePath), $FFFFFFFF);
  if count = 0 then Exit;

  if not DirectoryExists(SavePath) then ForceDirectories(SavePath);
  FileName := ChangeFileExt(ExtractFileName(ExePath), '');
  SavePath := ExcludeTrailingPathDelimiter(SavePath) + '\' + FileName + '_%.3d.ico';

  ico := TIcon.Create;
  for i := 0 to count - 1 do
  begin
    ico.Handle := ExtractIcon(HInstance, PChar(ExePath), i);
    ico.SaveToFile(Format(SavePath, [i+1]));
  end;
  ico.Free;
  Result := count;
end;

{测试: 获取当前程序图标}
procedure TForm1.Button1Click(Sender: TObject);
begin
  GetIco(ParamStr(0), 'c:\temp');
end;

{测试: 获取记事本图标}
procedure TForm1.Button2Click(Sender: TObject);
var
  buf: array[0..MAX_PATH] of Char;
begin
  GetSystemDirectory(buf, Length(buf)*SizeOf(buf[0]));
  GetIco(buf + '\notepad.exe', 'c:\temp');
end;

{测试: 获取 Windows 的标准图标库}
procedure TForm1.Button3Click(Sender: TObject);
var
  buf: array[0..MAX_PATH] of Char;
begin
  GetSystemDirectory(buf, Length(buf)*SizeOf(buf[0]));
  GetIco(buf + '\Shell32.dll','c:\temp');
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 194
  ClientWidth = 206
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 64
    Top = 32
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 64
    Top = 80
    Width = 75
    Height = 25
    Caption = 'Button2'
    TabOrder = 1
    OnClick = Button2Click
  end
  object Button3: TButton
    Left = 64
    Top = 127
    Width = 75
    Height = 25
    Caption = 'Button3'
    TabOrder = 2
    OnClick = Button3Click
  end
end

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/12/26/1362860.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
Inno Setup 制作jar转EXE文件的安装包 之权限、图标、卸载菜单的问题

·怎么给在开始菜单中增加卸载快捷方式? 在相应节点下,添加以下代码 ·怎么自定义卸载图标? (例中卸载图标名字为:uninstallico.ico) 下载一个UpdateIcon.dll放在同一个文件夹下(JAR、脚...

周田
2016/07/08
50
0
代码注入的三种方法

http://www.vckbase.com/index.php/wv/1580 目录 Windows 钩子 CreateRemoteThread 和 LoadLibrary 技术 ――进程间通信 CreateRemoteThread 和 WriteProcessMemory 技术 ――如何用该技术子......

nothingfinal
2012/08/31
0
0
Yunlong/CPP-ThreadInject

#C++ 线程注入 写在前面,本人C++纯小白,公开项目是希望获得更多朋友的帮助,如果您正好能解决我目前遇到的问题,希望您能在问题中回复我,项目改进后会继续保持开源,感谢大家的支持 编译 ...

Yunlong
2015/07/08
0
0
[发布] Photoshop ICO 文件格式插件 V2.0版

    [更新预告] 我正在开发 ICO 插件的 3.0 版本。增加了新的比原来更好的缩放算法。同时将改进一些 UI。预计 2017 年 6 ~ 7 月可以发布。2017 年 6 月 11 日。     【声明】此插件下...

hoodlum1980
2010/12/29
0
0
MFC获取程序安装目录

描述: 对office做插件 使用DLL注入方式 目的: 获取DLL文件的真实路径 使用方法: GetCurrentDirectory() GetModuleFileName() 区别: GetCurrentDirectory()获取的是程序安装的目录 如:c:wind...

Norman_li
2014/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Memcached启动参数详解

memcached -d -m 1024 -l 192.168.100.101 -p 11211 -P /tmp/memcached.pid -c 1024 -f 1.25 -n 80 -t 16 运行参数描述 -d:以守护(daemon)进程方式启动; -u:是运行Memcache的用户,例如 ......

月下狼
24分钟前
0
0
xgboost-kaggle

https://www.kaggle.com/dansbecker/xgboost This tutorial is part of the Learn Machine Learning series. In this step, you will learn how to build and optimize models with the powe......

tantexian
24分钟前
0
0
nginx学习八 代理服务

最常用的语法 proxy_pass Syntax: proxy_pass URL;Default: --Context:location.if in location,limit_exception 反向代理 例:/etc/nginx/conf.d/default.conf 反向代理(代理服务端)......

Romanceling
32分钟前
0
0
npm ERR! Unexpected end of JSON ...

npm install 报错: npm ERR! Unexpected end of JSON input while parsing near '..."^2.8.14"},"_hasShrin' npm ERR! A complete log of this run can be found in: ... 打开终端 命令: 第......

大_侠
36分钟前
0
0
Android中的设计模式之责任链模式

参考 《设计模式:可复用面向对象软件的基础 》5.1 Chain of responsibility 职责链 对象行为型模式 《Android源码设计模式解析与实战》第9章 使编程更有灵活性--责任链模式 意图 使多个对象...

newtrek
39分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部