Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Icon einer Anwendung speichern (https://www.delphipraxis.net/51460-icon-einer-anwendung-speichern.html)

ErazerZ 12. Aug 2005 17:28


Icon einer Anwendung speichern
 
hey leute,
ich hab da ein problem, ich weiß nicht wie ich es lösen kann, also, ich will ein icon einer exe datei auslesen und das in truecolor auf der festplatte speichern. Ich hab da einwenig rum getestet und auch etwas gemacht, jedoch funktioniert das nicht mit jeder ExeDatei, kA warum.

Hoffentlich kann mir jemand helfen, da mein code nur mit eigener und ein paar anderen anwendungen funkt, jedoch nicht mit Explorer.exe.

Ahja, das ganze sollte NonVCL sein. Nicht sowas wie TIcon :)

turboPASCAL 12. Aug 2005 17:46

Re: Icon einer Anwendung speichern
 
Darf man dich um einen kleinen Code-Schnipsel bitten, dass man mal Gucken kann ?

Luckie 12. Aug 2005 17:46

Re: Icon einer Anwendung speichern
 
Wie machst du es denn bisher? :roll:

ErazerZ 12. Aug 2005 17:52

Re: Icon einer Anwendung speichern
 
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;

turboPASCAL 12. Aug 2005 19:04

Re: Icon einer Anwendung speichern
 
Hi, hast Du mal deine Anwendung Gedebbug't?

Arbeitet die ResourceNameCallBack Funktion richtig (gibt sie ein Resourcen Namen zurück)?

ErazerZ 12. Aug 2005 19:09

Re: Icon einer Anwendung speichern
 
ja klar, es funktioniert sogar mit ein paar programmen, jedoch nicht mit allen, es liegt glaub ich an der farben oder menge der icons oder irgendwas, vielleicht sollt ich mir irgendwo Header von Icons oder was auch immer downloaden (weil es liegt an den Offsets die ich patche)

turboPASCAL 12. Aug 2005 19:16

Re: Icon einer Anwendung speichern
 
Hm, bei mir habe ich ein Probl. mit dem Auslesen von Icons als Intresource mit Strings als ResName klappt alles top. (Soweit ich das beurteilen kann)

(kann natürlich auch an meiner improv. function liegen :spin: )

ErazerZ 12. Aug 2005 23:39

Re: Icon einer Anwendung speichern
 
Ok leute, passt schon, ich habs schon gelöst, trotzdem thx

Mystic 13. Aug 2005 01:04

Re: Icon einer Anwendung speichern
 
Wär nett wenn du deine Lösung trotzdem hier posten würdest.

Luckie 13. Aug 2005 01:31

Re: Icon einer Anwendung speichern
 
Warum nimmst du nicht MSDN-Library durchsuchenSHGetFileInfo?


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr.
Seite 1 von 2  1 2      

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