AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Icon einer Anwendung speichern

Ein Thema von ErazerZ · begonnen am 12. Aug 2005 · letzter Beitrag vom 13. Aug 2005
 
Benutzerbild von ErazerZ
ErazerZ

Registriert seit: 27. Mai 2005
Ort: Baden
315 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Icon einer Anwendung speichern

  Alt 12. Aug 2005, 17:52
mein code bis jetzt ..
Delphi-Quellcode:
function SaveIcon(Filename: String; Savename: String): Boolean;
var
  lpResource, lpResource2, Buffer: PChar;
  hResource: HRSRC;
  ResSize, ResSize2, Written: LongWord;
  hMem, h, hExe: THandle;
  ID: Integer;
begin
  Result := False;
  bGotResource := False;
  bStringRes := False;
  hExe := LoadLibrary(PChar(Filename));

  EnumResourceNames(hExe, RT_GROUP_ICON, @ResourceNameCallback, hInstance); // les nur die namen heraus, immer nur den ersten, wegen testen ..

  if bStringRes then // wenns ein string ist, ansonsten integer
    hResource := FindResource(hExe, PChar(ResourceNameStr), RT_GROUP_ICON)
  else
    hResource := FindResource(hExe, MAKEINTRESOURCE(ResourceName), RT_GROUP_ICON);
  ResSize := sizeofResource(hExe, hResource);
  hMem := LoadResource(hExe, hResource);
  lpResource := LockResource(hMem);

// testen - erstes icon auslesen
// ID := LookupIconIdFromDirectoryEx(PBYTE(lpResource), True, SM_CXICON, SM_CYICON, LR_DEFAULTCOLOR);
  ID := 1;
  hResource := FindResource(hExe, MAKEINTRESOURCE(ID), MAKEINTRESOURCE(RT_ICON));
  ResSize2 := sizeofResource(hExe, hResource);
  hMem := LoadResource(hExe, hResource);
  lpResource2 := LockResource(hMem);

  if lpResource <> nil then
  begin
    h := CreateFile(PChar(Savename), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
    GetMem(Buffer, 1);
    // die hier hab mit nem hexeditor herausgefunden, indem ich eine datei (ico) mit reshack entpack habe und einfach eine binäre icon-datei mit der anderen icon datei verglichen habe
    // patch other stuff from Group Icon
    PByte(Cardinal(lpResource) + $7)^ := $40;
    PByte(Cardinal(lpResource) + $12)^ := $16;
    // zero offsets ( 2bytes )
    PByte(Cardinal(Buffer) + $0)^ := $00;
    PByte(Cardinal(Buffer) + $1)^ := $00;
    // write to file
    WriteFile(h, lpResource^, ResSize, Written, nil);
    WriteFile(h, Buffer^, 2, Written, nil);
    WriteFile(h, lpResource2^, ResSize2, Written, nil);
    CloseHandle(h);
    Result := True;
  end;
  FreeLibrary(hExe);
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz