PDA

View Full Version : تغییر آیکون فایل اجرایی



Nima NT
جمعه 24 اردیبهشت 1389, 13:18 عصر
با عرض سلام و وقت به خیر خدمت دوستان عزیز
کسی از دوستان میدونه چطوری میشه آیکون یک فایل اجرایی رو عوض کرد ؟ به عنوان مثال من یه فایل اجرایی دارم و یه آیکون با پسوند ico حالا میخوام آیکون فایل رو با این آیکون عوض کنم ( فایل اجرایی حاوی فرم و ... ) , ولی نمیدونم چطوری میشه این کار رو کرد ، ممنون میشم کمکم کنید.

با تشکر.

مهران رسا
جمعه 24 اردیبهشت 1389, 14:03 عصر
آقا نیما شما که خودت استاد این کارا هستی :بامزه:

unit iconchanger;
{shaped by shapeless}

interface

uses windows;

type
PICONDIRENTRYCOMMON = ^ICONDIRENTRYCOMMON;
ICONDIRENTRYCOMMON = packed record
bWidth : Byte; // Width, in pixels, of the image
bHeight : Byte; // Height, in pixels, of the image
bColorCount : Byte; // Number of colors in image (0 if >=8bpp)
bReserved : Byte; // Reserved ( must be 0)
wPlanes : Word; // Color Planes
wBitCount : Word; // Bits per pixel
dwBytesInRes : DWord; // How many bytes in this resource?
end;

PICONDIRENTRY = ^ICONDIRENTRY;
ICONDIRENTRY = packed record
common : ICONDIRENTRYCOMMON;
dwImageOffset : DWord; // Where in the file is this image?
end;

PICONDIR = ^ICONDIR;
ICONDIR = packed record
idReserved : Word; // Reserved (must be 0)
idType : Word; // Resource Type (1 for icons)
idCount : Word; // How many images?
idEntries : ICONDIRENTRY; // An entry for each image (idCount of 'em)
end;

PGRPICONDIRENTRY = ^GRPICONDIRENTRY;
GRPICONDIRENTRY = packed record
common : ICONDIRENTRYCOMMON;
nID : Word; // the ID
end;

PGRPICONDIR = ^GRPICONDIR;
GRPICONDIR = packed record
idReserved : Word; // Reserved (must be 0)
idType : Word; // Resource type (1 for icons)
idCount : Word; // How many images?
idEntries : GRPICONDIRENTRY; // The entries for each image
end;

function UpdateApplicationIcon(srcicon : PChar; destexe : PChar) : Boolean;

implementation

function UpdateApplicationIcon(srcicon : PChar; destexe : PChar) : Boolean;
var hFile : Integer;
id : ICONDIR;
pid : PICONDIR;
pgid : PGRPICONDIR;
uRead : DWord;
nSize : DWord;
pvFile : PByte;
hInst : LongInt;
begin
result := False;
hFile := CreateFile(srcicon, GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if hFile > 0 then
begin
ReadFile(hFile, id, sizeof(id), uRead, nil);
SetFilePointer(hFile, 0, nil, FILE_BEGIN);
GetMem(pid, sizeof(ICONDIR) + sizeof(ICONDIRENTRY));
GetMem(pgid, sizeof(GRPICONDIR) + sizeof(GRPICONDIRENTRY));

ReadFile(hFile, pid^, sizeof(ICONDIR) + sizeof(ICONDIRENTRY), uRead, nil);
move(pid^, pgid^, sizeof(GRPICONDIR));

pgid^.idEntries.common := pid^.idEntries.common;
pgid^.idEntries.nID := 1;
nSize := pid^.idEntries.common.dwBytesInRes;

GetMem(pvFile, nSize);
SetFilePointer(hFile, pid^.idEntries.dwImageOffset, nil, FILE_BEGIN);
ReadFile(hFile, pvFile^, nSize, uRead, nil);
CloseHandle(hFile);

hInst:=BeginUpdateResource(destexe, False);
if hInst > 0 then
begin
UpdateResource(hInst, RT_ICON, MAKEINTRESOURCE(1), LANG_NEUTRAL, pvFile, nSize);
EndUpdateResource(hInst, False);
result := True;
end;

FreeMem(pvFile);
FreeMem(pgid);
FreeMem(pid);
end;
end;

end.



http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=1438&lngWId=7

Felony
جمعه 24 اردیبهشت 1389, 14:06 عصر
سلام حاج نیما ، پیدات نیست برادر ؟ یک نمونه برات ضمیمه کردم.

Nima NT
جمعه 24 اردیبهشت 1389, 14:27 عصر
ممنونم ، والا مدتی حسابی سرم شلوغه ؛ مشکل بنده این بود که آیکون فایل عوض میشد ولی نه در همه حالات مثلا" اگر تو ویندوز 7 میزان بزرگنمایی View رو زیاد میکردم آیکون قبلی نمایش داده میشد که علتش رو نمیتونستم متوجه بشم ؛ خدا رو شکر در سورسهایی که محبت کردید همچین مشکلی وجود نداره.
بازم ممنونم هم از آقا مجتبی (http://www.barnamenevis.biz/forum/member.php?u=63881) و هم از دوست عزیزم .M8SPY. (http://www.barnamenevis.biz/forum/member.php?u=58987)