EXE dosyasının iconunu değiştirmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
hboraabaci
Üye
Mesajlar: 11
Kayıt: 31 Ara 2004 01:27

EXE dosyasının iconunu değiştirmek

Mesaj gönderen hboraabaci »

Derlenmiş her işi tastamam bitmiş bir programdan bahsediyorum
iconu nasıl değiştirilir..
Geleceği Görmek Demek Ecelini Görmek Demektir Ölülerde Konuşur.
Kullanıcı avatarı
Asri
Kıdemli Üye
Mesajlar: 767
Kayıt: 16 Eyl 2003 09:54
Konum: istanbul

Mesaj gönderen Asri »

Merhaba,
exe dosyanın üzerine gelip sağ tuş a tıklarsınız. Özelliklerden simge değiştiri seçersiniz.
Ama derlemeden olursa Project /Options tan Application tabına geçip Load Icon butonuna basabilirsiniz.

İyi çalışmalar.

____________________
ofenX
Öğrenmek ve öğretmek, akıntıya karşı yüzmek gibidir ilerleyemediğiniz taktirde gerilersiniz.
Kullanıcı avatarı
hboraabaci
Üye
Mesajlar: 11
Kayıt: 31 Ara 2004 01:27

Kod ile ama

Mesaj gönderen hboraabaci »

lütfen resource hacker lardan falan bahsetmeyin
Delphi yada C++ da örnek verebilcek varsa çok hoş olur...
Geleceği Görmek Demek Ecelini Görmek Demektir Ölülerde Konuşur.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Kod ile uygulama resource'una nasıl müdahale edebileceğini mi soruyorsun?
Kullanıcı avatarı
hboraabaci
Üye
Mesajlar: 11
Kayıt: 31 Ara 2004 01:27

Mesaj gönderen hboraabaci »

Öylede denebilir yapmak istediğim sadece uygulamanın iconunu değiştirmek
Geleceği Görmek Demek Ecelini Görmek Demektir Ölülerde Konuşur.
Kullanıcı avatarı
hboraabaci
Üye
Mesajlar: 11
Kayıt: 31 Ara 2004 01:27

Mesaj gönderen hboraabaci »

Yokmu bir fikri olan
Geleceği Görmek Demek Ecelini Görmek Demektir Ölülerde Konuşur.
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

selam kardeş derlenmiş ve her şey tastamam olan bir projeye delphi ile kodla nasıl müdahale edeceksin onu anlamadım.İşin gerçeği.Ama normal yoldan değişitiriliyo zaten.Artı icon bence de o ha değiştirilmiş ha değiştirilmemiş bence o kadar da elzem olmasa gerek.tabiiki yinede karar sizin.Kolay gelsin
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Merhaba...

- Exe içindeki ICON'un offsetini bulduğun taktirde, aynı boyutttaki başka bir icon ile değiştime şansın var.

- Bunun için senin de onaylayacağın gibi EXE'nin çalışıyor olmaması gerekiyor...

- AssignFile, FileMode, Seek, BlockRead, BlockWrite, CloseFile komut dizisini barındıran direkt yazma olduğu gibi FileStream ile bu işlemi gerçekleştirebilirsin. Forumda binary erişim hakkında konular geçmişti. Yukardaki kelimeler senin için arama anahtarı olacaktır.

- Exe içindeki bir icon'u nasıl arayacağını merak ediyorsan; ShellApi unitini ekledikten sonra kullanabileceğin ExtractIcon ile bir EXE'den ionu çekebiliyor ve de fiziksel olarak dosya halinde kaydedebiliyorsun.

- Bu noktada çektiğin icon byte/byte birebir aynı olur mu olmaz mı emin değilim, deneyimim olmadı ama başlangıcından en azından belli bir kısmının aynı olacağını değerlendiriyorum. EXE dosya içindeki yerine dair Icon başlangıç offset numarası ve icon uzunluğu için bu noktadan çıkılabileceğini sanıyorum.

- Sonucu buradan bildirmen herkes için faydalı olacaktır. :)
Resim
Resim ....Resim
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
cozturk
Üye
Mesajlar: 484
Kayıt: 15 Haz 2005 05:22

Mesaj gönderen cozturk »

tmm bahsettiğm şeyi sildim
En son cozturk tarafından 26 Nis 2006 06:49 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- @sadettinpolat güzel bir ipucu vermiş. Teşekkürler.

- Sadece NT tabanlı sistemlerde çalıştığını okudum. Bunu hafızanızın bir kenarına not ediniz.

- Kod olarak da bir örnek buldum...

Kod: Tümünü seç

  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;

Kod: Tümünü seç

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;

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
Var
  IcoDosya,
  ExeDosya : PChar;
begin
  IcoDosya := 'c:\XLogo.ico';
  ExeDosya := 'c:\deneme.exe';
  UpdateApplicationIcon(IcoDosya, ExeDosya);
end;
- Başarılar...
Resim
Resim ....Resim
Kullanıcı avatarı
hboraabaci
Üye
Mesajlar: 11
Kayıt: 31 Ara 2004 01:27

Mesaj gönderen hboraabaci »

Evet böylece bu sorunuda hep birlikte aşmış olduk.. Teşekkürkler
Geleceği Görmek Demek Ecelini Görmek Demektir Ölülerde Konuşur.
Kullanıcı avatarı
MercilessTurk
Üye
Mesajlar: 94
Kayıt: 28 Eki 2005 10:14

Mesaj gönderen MercilessTurk »

ewet bu kodu bende netten bulup denedim ama üzerine stream atanmış yada dışarıdan çeşitli yollarla müdahale edilmiş exeyi bozuyor. Bende ilkönce iconu değişip sonra exenin üzerinde bazı değişiklikler yapma yoluna gittim bu defada "ornek.exe gecerli bir win32 uygulaması değil" diyor.
Cevapla