Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Как прикрепить Иконку к программе?? (https://forum.antichat.xyz/showthread.php?t=126211)

andreipup 20.06.2009 21:15

Как прикрепить Иконку к программе??
 
Вопрос конечно тупой, но сильно не пинайте я новичок в этом.
Порога на Ams чем можно прикрепить иконку
к ней?

BrainDeaD 20.06.2009 21:19

м.б. resource hacker.

POS_troi 20.06.2009 21:37

Фасм.

Код:

section '.rsrc' resource data readable
 
  directory RT_ICON, icons,\
            RT_GROUP_ICON, group_icons
 
  resource icons,\
          1, LANG_NEUTRAL, icon_data
 
  resource group_icons,\
          1, LANG_NEUTRAL, main_icon
 
  ; Описание одиночной иконки
  icon main_icon, icon_data, 'имя иконки.ico'

Если уже скомпилированная то тогда редактором ресурсов - тем что сказал BrainDeaD или любым другим.

andreipup 20.06.2009 21:59

Есть исходник пороги просто даже не знаю в какое место кода вставить этот код.Редактором неполучилось(((.
MASM32 Editor в нем как то можно сделать?

swt1 20.06.2009 22:12

click
так же в masm32 есть,examples

andreipup 20.06.2009 22:59

Блин запутался дальше некуда(Есть порога которой приклеить иконку?

bons 20.06.2009 23:19

создаешь файл с содержимым
Код:

1 ICON icon.ico
и расширением *.rc
icon.ico - твоя иконка
Компилируеь его в файл ресурсов
Код:

rc resfile.rc
получится файл *.res
линкуешь вместе с основной программой
Код:

link mainprog.obj resfile.res

Fliplab 23.06.2009 11:44

Код:

unit UExtractIcon;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ShellApi, ExtCtrls, ComCtrls, Buttons;

type
  TFormExtractIcon = class(TForm)
    BitBtnOpen: TBitBtn;
    BitBtnSave: TBitBtn;
    ButtonReLoad: TButton;
    UpDownIconIndex: TUpDown;
    OpenDialogIcon: TOpenDialog;
    SaveDialogIcon: TSaveDialog;
    ImageIcon: TImage;
    EditIconIndex: TEdit;
    LabelIconIndex: TLabel;
    LabelIcon: TLabel;
    LabelFileName: TLabel;
    BevelIcon: TBevel;
    procedure OpenIconClick(Sender: TObject);
    procedure SaveIconClick(Sender: TObject);
    procedure LoadIconFromFile;
    procedure ButtonReLoadClick(Sender: TObject);
    procedure EditIconIndexKeyPress(Sender: TObject; var Key: Char);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormExtractIcon: TFormExtractIcon;

implementation

{$R *.DFM}

{ExtractIconResInfo}

var
  Bitmap  : TBitmap;
  IconSave : TIcon;
  FullDir  : String;
  IconIndex: Word;

procedure TFormExtractIcon.LoadIconFromFile;
var
  Pch: array[0..256] of Char;
  IconExtr: HIcon;
begin
  IconIndex := StrToInt(EditIconIndex.Text);
  FullDir := OpenDialogIcon.FileName;
  StrPCopy(Pch,FullDir);
  IconExtr := ExtractAssociatedIcon(hInstance,Pch,IconINdex);
  IconSave.Handle := IconExtr;
  Bitmap.Width := IconSave.Width;
  Bitmap.Height := IconSave.Height;
  Bitmap.Canvas.Draw(0, 0, IconSave);
  ImageIcon.Picture.Icon := IconSave;
  BitBtnSave.Enabled := True;
  ButtonReLoad.Enabled := True;
  LabelFileName.Caption := 'Файл: '+ExtractFileName(FullDir);
  SaveDialogIcon.InitialDir := ExtractFilePath(FullDir);
  SaveDialogIcon.FileName := '';
end;

procedure TFormExtractIcon.OpenIconClick(Sender: TObject);
begin
  if OpenDialogIcon.Execute then
    LoadIconFromFile;
end;

procedure TFormExtractIcon.SaveIconClick(Sender: TObject);
const
  SaveBoolean:Boolean = False;
begin
{SaveDialogIcon.FileName := ChangeFileExt(ExtractFileName(FullDir),'');}
  if SaveDialogIcon.Execute then begin
    case SaveDialogIcon.FilterIndex of
      1: IconSave.SaveToFile(ChangeFileExt(SaveDialogIcon.FileName,'.ico'));
      2: Bitmap.SaveToFile(ChangeFileExt(SaveDialogIcon.FileName,'.bmp'));
    end;
    SaveDialogIcon.InitialDir := ExtractFilePath(SaveDialogIcon.FileName);
  end;
end;

procedure TFormExtractIcon.ButtonReLoadClick(Sender: TObject);
begin
  LoadIconFromFile;
end;

procedure TFormExtractIcon.EditIconIndexKeyPress(Sender: TObject;
  var Key: Char);
begin
  if not (Key in ['0'..'9',#8]) then
    key := #0;
end;

procedure TFormExtractIcon.FormActivate(Sender: TObject);
begin
//  IconSave.Free;
  IconSave := TIcon.Create;
//  Bitmap.Free;
  Bitmap := TBitmap.Create;
end;

end.

Так тащи иконки, дальше пихай в exe

winlogon.exe 23.06.2009 13:05

Включаешь Resource Hacker
открываешь нужный *.exe файл
находишь в проге папку Icon Group, открываешь её
В раскрывшемся списке появится список папок, иконка проги должна бытьв первой из этих папок.
После тогго как нашёл иконку, нажимаешь на этот файлик с иконкой правой кнопкой мыши и выбераешь "Заменить ресурс", в появившемся окошке нажимаешь "открыть файл с значком..".
После этого, выбераешь иконку нужную.
Нажимаешь заменить.
Далее нажимаешь Файл -> Сохранить.
The end.
^Для замены иконки проги >_< ^

BrainDeaD 23.06.2009 13:12

Цитата:

Сообщение от andreipup
Блин запутался дальше некуда(Есть порога которой приклеить иконку?

я ж говорю reshacker.

есть ещё уйма прог, которые автоматически меняют иконку, но работают они или нет, сказать не могу, пробуй сам.

смотри здесь

ChuKeY 24.06.2009 00:36

Код:

unit IconChanger;
interface
uses
  Windows, Classes, SysUtils, Graphics;
procedure ChangeIcon(FileName, IconFile, ResName:string);
implementation
resourcestring
  SInvalidFileName = 'Invalide filename %s';
type
  TNewHeader = record
    idReserved:WORD;
    idType:WORD;
    idCount:WORD;
  end;
  TResDirHeader = packed record
    bWidth:Byte;
    bHeight:Byte;
    bColorCount:Byte;
    bReserved:Byte;
    wPlanes:WORD;
    wBitCount:WORD;
    lBytesInRes:Longint;
  end;
  TIconFileResDirEntry = packed record
    DirHeader:TResDirHeader;
    lImageOffset:Longint;
  end;
  TIconResDirEntry = packed record
    DirHeader:TResDirHeader;
    wNameOrdinal:WORD;
  end;
  PIconResDirGrp = ^TIconResDirGrp;
  TIconResDirGrp = packed record
    idHeader:TNewHeader;
    idEntries:array[0..0] of TIconResDirEntry;
  end;
  PIconFileResGrp = ^TIconFileResDirGrp;
  TIconFileResDirGrp = packed record
    idHeader:TNewHeader;
    idEntries:array[0..0] of TIconFileResDirEntry;
  end;
  TBeginUpdateRes=function(pFileName: PChar; bDeleteExistingResources: BOOL): THandle; stdcall;
  TUpdateRes=function(hUpdate: THandle; lpType, lpName: PChar;
              wLanguage: Word; lpData: Pointer; cbData: DWORD): BOOL; stdcall;
  TEndUpdateRes=function(hUpdate: THandle; fDiscard: BOOL): BOOL; stdcall;
function MakeLangID:WORD;
begin
  Result:=(SUBLANG_ENGLISH_US shl 10) or LANG_ENGLISH;
end;
procedure CheckFileName(Value:string);
begin
  if (Trim(Value) = EmptyStr) or (not FileExists(Value)) then
    raise Exception.Create(Format(SInvalidFileName, [Value]));
end;
procedure ChangeIcon(FileName, IconFile, ResName:string);
var
  I:Integer;
  Group:Pointer;

  Header:TNewHeader;
  FileGrp:PIconFileResGrp;
  IconGrp:PIconResDirGrp;
  IconGrpSize,
  FileGrpSize:Integer;

  Icon:TIcon;
  Stream:TMemoryStream;
  hUpdateRes:THandle;
begin
  CheckFileName(FileName);
  hUpdateRes:=BeginUpdateResource(PChar(FileName), False);
  Win32Check(hUpdateRes <> 0);
  CheckFileName(IconFile);
  Icon:=TIcon.Create;
  Icon.LoadFromFile(IconFile);
  Stream:=TMemoryStream.Create;
  try
    Icon.SaveToStream(Stream);
  finally
    Icon.Free;
  end;
  Stream.Position:=0;
  Stream.Read(Header, SizeOf(Header));
  FileGrpSize := SizeOf(TIconFileResDirGrp) + (Header.idCount - 1) * SizeOf(TIconFileResDirEntry);
  IconGrpSize := SizeOf(TIconResDirGrp) + (Header.idCount - 1) * SizeOf(TIconResDirEntry);
  GetMem(FileGrp, FileGrpSize);GetMem(IconGrp, IconGrpSize);
  Stream.Position:=0;
  Stream.Read(FileGrp^, FileGrpSize);//loading icongroup
  Group:=nil;
  try
    for I:=0 to FileGrp^.idHeader.idCount - 1 do //building icongroup from loaded entries
    begin
      with IconGrp^ do
      begin
        idHeader:=FileGrp^.idHeader;
        idEntries[I].DirHeader:=FileGrp^.idEntries[I].DirHeader;
        idEntries[I].wNameOrdinal:=I;//fixing Ordinals
      end;
      with FileGrp^.idEntries[I] do
      begin
        Stream.Seek(lImageOffset, soFromBeginning);
        ReallocMem(Group, DirHeader.lBytesInRes);
        Stream.Read(Group^, DirHeader.lBytesInRes);
        Win32Check(UpdateResource(hUpdateRes,RT_ICON,PChar(MakeIntResource(I)),
                            MakeLangID, Group, DirHeader.lBytesInRes));
      end;
    end;
    Win32Check(UpdateResource(hUpdateRes,RT_GROUP_ICON, PChar(ResName),
                                  MakeLangID, IconGrp, IconGrpSize));//adding the icongroup
    Win32Check(EndUpdateResource(hUpdateRes, False));
    finally
      Stream.Free;
      FreeMem(FileGrp);
      FreeMem(IconGrp);
      FreeMem(Group);
    end;
end;

var
  hLib:HMODULE;
  BeginUpdateRes:TBeginUpdateRes;
  UpdateRes:TUpdateRes;
  EndUpdateRes:TEndUpdateRes;
procedure GetFunctions(hLib:HMODULE);
begin
  @BeginUpdateRes:=GetProcAddress(hLib,'BeginUpdateResourceA');
  @UpdateRes:=GetProcAddress(hLib,'UpdateResourceA');
  @EndUpdateRes:=GetProcAddress(hLib,'EndUpdateResourceA');
end;

initialization
  if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
    hLib:=LoadLibrary('unicows.dll') //for win9x
  else
    hLib:=GetModuleHandle('Kernel32.dll');//assuming Kernel32 is mapped

  if hLib > 0 then GetFunctions(hLib);

finalization
  if GetModuleHandle('unicows.dll') > 0 then
    FreeLibrary(hLib);
end.

ChangeIcon('filename.exe','filename.ico', 'MAINICON');

andreipup 24.06.2009 00:52

Цитата:

Сообщение от winlogon.exe
Включаешь Resource Hacker
открываешь нужный *.exe файл
находишь в проге папку Icon Group, открываешь её
В раскрывшемся списке появится список папок, иконка проги должна бытьв первой из этих папок.
После тогго как нашёл иконку, нажимаешь на этот файлик с иконкой правой кнопкой мыши и выбераешь "Заменить ресурс", в появившемся окошке нажимаешь "открыть файл с значком..".
После этого, выбераешь иконку нужную.
Нажимаешь заменить.
Далее нажимаешь Файл -> Сохранить.
The end.
^Для замены иконки проги >_< ^

Спасибо всем что помогаете!

Я так и подумал что это самый верный выход!но не открываеться exe в этой пороге(((
Как тока непытался!
Хотя другие программы открывает бе проблем.


Время: 01:30