提取應用程式中的圖示資源 (轉)
提取應用中的圖示資源
經常看見一些有著美麗,光豔奪目,非常個性化的圖示,曾幾何時也想擁有,可苦於缺少一點點藝術細胞,只好打起妙手空空的念頭。經過一天的捉摸,也找到一些門道,效果還佳,再用自帶的Image Editor加以修改,徹底私有化,為我所用。灑家用此法做了一些漂亮的圖示,令老友羨慕不已。好了,好東西當然不敢獨享,且容我為各位慢慢道來:
首先用LoadLibrary(lpLibFileName: PChar): HMODULE; stdcall; 把指定的程式模組對映到程式的地址空間去。該函式返回模組的控制程式碼,假定為hExe;
然後用EnumReNames(hExe,RT_ICON,@EnumResName,myflag)找到圖示的資源名,其中引數EnumResName是回撥函式,圖示的name值將由回撥函式的一個變參得到。
然後再向回撥函式體內加入程式碼提取圖示就可以了。EnumResourceNames函式將會一直查詢每一個圖示直到查詢失敗或EnumResName返回false值為止。這樣我們就能提取程式所包含的每一個圖示,榨盡最後一滴油,夠狠吧!
詳細程式碼如下:
unit main;
interface
uses
, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, Menus, ImgList;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
Save1: TMenuItem;
Exit1: TMenuItem;
OpenDialog1: TOpenDialog;
ListView1: TListView;
Statar1: TStatusBar;
ImageList1: TImageList;
procedure Open1Click(Sender: T);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Exit1Click(Sender: TObject);
private
{ Private declarations }
FileName: TFileName;
FIcon: TIcon;
public
{ Public declarations }
end;
Function EnumResName(hModule: HMODULE; lpType, lpName: PChar;lParam: Longint):BOOL;stdcall;
var
Form1: TForm1;
hExe: HINST;
implementation
{$R *.DFM}
Function EnumResName(hModule: HMODULE; lpType, lpName: PChar;lParam: Longint):BOOL; //回撥函式不能是方法
//lpType是要提取的資源型別,這裡為RT_ICON
//lpName為圖示資源名
var
hIcon1: HICON;
hResource: HRSRC;
hMem: HRSRC;
lpResource: PByte;
ListItem: TListItem;
Begin
//返回在hExe模組中lpName指定的圖示資源的控制程式碼;
hResource:=FindResource(hExe,lpName,RT_ICON);
//Load and Lock the icon
hMem:=LoadResource(hExe,hResource);
lpResource:=LockResource(hMem);
//從資源中建立圖示並返回其控制程式碼
hIcon1:=Create Iconfrom Resource Ex(lp Resource,Sizeof Resource(hExe,h Resource),True,$00030000,32,32,LR-DEFAULTCOLOR);
with Form1 do
begin
//用ImageList儲存提取的圖示,並在ListView中顯示出來
FIcon.Handle:=hIcon1;
ImageList1.AddIcon(fIcon);
ListItem:=ListView1.Items.Add;
ListItem.ImageIndex:=ImageList1.Count-1;
end;
result:=true;//注意:只有返回為真值時,才能繼續提取下一個圖示
end;
procedure TForm1.Open1Click(Sender: TObject);
var
myflag: integer;
begin
if Opendialog1.Execute then
begin
FileName:=Opendialog1.FileName;
StatusBar1.Panels.Items[0].Text:=FileName;
Opendialog1.HistoryList.Add(FileName);
hExe:=LoadLibrary((PCharFileName));
myflag:=1;
ImageList1.Clear;
ListView1.Items.Clear;
EnumResourceNames(hExe,RT_ICON,@EnumResName,myflag);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FIcon:=TIcon.Create;
Opendialog1.Filter:='可檔案(*.exe)|*.exe';
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FIcon.Free;
end;
procedure TForm1.Exit1Click(Sender: TObject);
begin
Close;
end;
end.
篇幅所限,存檔和查錯的程式碼沒有列出
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1002569/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於VS.Net應用的圖示提取方法
- 【轉】設定Qt應用程式圖示及應用程式名QT
- 字型圖示的應用
- 一個從EXE、DLL檔案中提取、存取圖示完整程式 (轉)
- 開發具有Windows工作列佈告區圖示的應用程式 (轉)Windows
- 【Qt開發】更改應用程式圖示和工作列圖示QT
- 開源軟體在地圖資料處理中的應用地圖
- 將應用圖示新增到ubuntu dash中Ubuntu
- Win10原生自帶應用程式如何提取_win10提取自帶應用程式的步驟Win10
- 13套精美Web應用程式圖示素材Web
- 用xwin32顯示遠端Linux主機圖形應用程式(轉)Win32Linux
- 向量圖示的管理和應用
- Flutter 動態更改應用程式啟動圖示Flutter
- 為應用程式設計的10個超酷的圖示集程式設計
- 圖示字型 VS 雪碧圖——圖示字型應用實踐
- (原創)IconFont(向量圖示字型)在Winform中的應用ORM
- 在生產環境中除錯 Angular 應用程式而不顯示源對映除錯Angular
- SQL中的where條件,在資料庫中提取與應用淺析SQL資料庫
- 人力資源知識圖譜搭建及應用
- 教你用微信小程式快速提取圖片上的文字微信小程式
- Vector在Java程式設計中的應用 (轉)Java程式設計
- 2.3 應用程式容器中的應用程式概述
- win10如何修改應用圖示_win10怎麼更換應用圖示Win10
- Android應用設定多個啟動圖示,動態列換應用圖示Android
- 在Delphi中開發使用多顯示器的應用程式
- 應用程式圖示更換器 (非明碼比較)
- 資料庫中的XML應用例項 (轉)資料庫XML
- 調整mac應用圖示排列Mac
- 字型圖示固用程式碼
- 用於Github的圖片資源Github
- win10應用程式的圖示顯示不出來怎麼辦_win10軟體圖示不顯示的解決方法Win10
- 遊戲圖示的設計跟其它應用的圖示設計有何不同?遊戲
- 系統托盤中的快捷圖示(轉)
- Mac操作指南:如何在Mac電腦匯出應用程式的圖示?Mac
- Android SDK簡明教程:應用程式資源Android
- 【轉】釋出的QT程式無法顯示圖示和圖片的問題QT
- 在Docker容器中執行GUI圖形應用的開源專案DockerGUI
- Android應用資源Android