Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Icon anderer EXE Datei ändern (https://www.delphipraxis.net/187609-icon-anderer-exe-datei-aendern.html)

Satyr 14. Dez 2015 23:10

AW: Icon anderer EXE Datei ändern
 
Zitat:

Zitat von SMO (Beitrag 1324455)
Ok, dann müsste Post #15 aber schon gestimmt haben.
MAINICON ist das Hauptsymbol. Falls das schon im Ziel existiert, wird es überschrieben. Falls nicht, hinzugefügt. Es macht doch nichts, dass da noch eine andere Symbolgruppe ist. Aber denke an den Icon-Cache, der kann dazu führen, dass du immer noch in Windows das alte Symbol siehst.

Auch im RessourceEditor (Resource Tuner)? MAINICON war noch nicht da. Wird das automatisch als Anzeigesymbol genommen, statt der anderen Icons? Kann ich auch einfach alles was ist rauslöschen (so hab ich zumindest Zacherl verstanden), MAINICON Gruppe reinladen und fertig?

SMO 14. Dez 2015 23:54

AW: Icon anderer EXE Datei ändern
 
Zitat:

Zitat von Satyr (Beitrag 1324456)
Auch im RessourceEditor (Resource Tuner)? MAINICON war noch nicht da. Wird das automatisch als Anzeigesymbol genommen, statt der anderen Icons? Kann ich auch einfach alles was ist rauslöschen (so hab ich zumindest Zacherl verstanden), MAINICON Gruppe reinladen und fertig?

Ich hab's nochmal getestet: Das Hauptsymbol ist nicht unbedingt das, welches "MAINICON" heißt, sondern das mit der kleinsten ID. IDs können ja Namen (Strings) und Nummern sein. Namen "gewinnen" über die Nummern.

Soll heißen:
Hast du zwei Symbolgruppen, "MAINICON" und 105, dann gewinnt "MAINICON", weil es keine Nummer ist.
Hast du zwei Symbolgruppen, "MAINICON" und "BLA", dann gewinnt "BLA", weil es kleiner ist, d.h. alphabetisch sortiert zuerst kommt.
Hast du zwei Symbolgruppen, 105 und 13, dann gewinnt 13, weil es kleiner ist.
Hast du vier Symbolgruppen, 105, 13, "MAINICON" und "BLA", dann gewinnt "BLA".

Wenn du das neue Symbol als Hauptsymbol einrichten willst, dann nimm also einfach "A" als Name, der kommt alphabetisch immer als erstes! (Ressourcennamen übrigens bitte immer nur in Großbuchstaben.)

Alles klar?

Satyr 15. Dez 2015 00:04

AW: Icon anderer EXE Datei ändern
 
Verstehe. Dann such ich morgen bei Google wie ich vorhandene Icons alle lösche, eine neue Icongroup importiere und dann müsste das alles sein, wenn ich das richtig verstanden habe.

SMO 15. Dez 2015 00:10

AW: Icon anderer EXE Datei ändern
 
Wieso willst du alle vorhandenen Icons löschen? Das halte ich für keine gute Idee. Ein Programm könnte die Icons ja eventuell im Code benutzen. Wenn sie nicht mehr existieren, könnte es dann zu Fehlern kommen.

Wenn du sie wirklich löschen willst, dann kannst du mit EnumResourceNames die IDs aller RT_GROUP_ICON herausfinden und z.B. mit der DeleteGroupIcon-Funktion aus meinem Code löschen. Aber ich rate wie gesagt davon ab. Wenn du einfach nur das Symbol ändern willst, welches der Windows Explorer anzeigt, dann benutze SetGroupIcon mit 'A' als GroupName-Parameter.

Satyr 15. Dez 2015 00:27

AW: Icon anderer EXE Datei ändern
 
Ich dachte ich komme dann weniger in Konflikte, wenn ich nur meine Icons da habe, quasi.
Sag mal... kann ich Dir die exe mal schicken an der ich rumversuche? Ich wüsste nur gerne ob Du es schaffst das Icon zu ändern. Ich frage nicht nach dem Code. Ich habe das Gefühl das irgendetwas bei der exe anders ist, ich komme aber nicht drauf was. Ist nur ein Gefühl.

SMO 15. Dez 2015 00:46

AW: Icon anderer EXE Datei ändern
 
Klar, kannst du mir gerne schicken.
Aber du kannst auch einfach mal für dich selbst eine Kopie deiner Exe erstellen, der Kopie dann einen zufälligen Namen geben, um dem Icon-Cache zu entgehen und das aktuelle Symbol sofort zu sehen.

Satyr 15. Dez 2015 00:51

AW: Icon anderer EXE Datei ändern
 
Das habe ich schon versucht, leider ohne Erfolg...

Hab Dir den Dropbox Link per PM geschickt.

SMO 15. Dez 2015 01:04

AW: Icon anderer EXE Datei ändern
 
Funktioniert problemlos bei mir mit dem Code aus #9.

So bin ich vorgegangen (deine Exe nennen wir mal z.exe):

Delphi-Quellcode:
procedure ChangeIcon;
var
  IconA: TSmoGroupIcon;
begin
  // Hole die neue Symbolgruppe... hier als Beispiel #2 aus Notepad.exe
  if not GetGroupIcon('C:\Windows\System32\Notepad.exe', MakeIntResource(2), IconA) then RaiseLastOSError;
  // Speichere die Symbolgruppe in z.exe unter dem Namen "A"
  if not SetGroupIcon('D:\z.exe', 'A', IconA) then RaiseLastOSError;
end;
Im Explorer hatte D:\z.exe dann nach wie vor das alte Symbol - wegen des Icon-Caches.
Also habe ich z.exe im Explorer einfach schnell kopiert (Strg+C, Strg+V) und schon wurde bei der Kopie das Notepad-Symbol angezeigt, wie erwartet.

Satyr 15. Dez 2015 01:09

AW: Icon anderer EXE Datei ändern
 
Merkwürdig... dann scheint es irgendwie an meinem (VMWare) System zu liegen. Viell. ist da der Cache noch kurioser als eh schon.
Ich danke Dir für all die Hilfe und das geklärt ist, das es im Grunde funktionieren müsste.

Kann ich den Code eig. auch mit einer ico Datei benutzen oder nur mit exe Dateien?

SMO 15. Dez 2015 01:35

AW: Icon anderer EXE Datei ändern
 
Ich benutze übrigens Windows 8.1.

Im jetzigen Zustand kannst du den Code nur mit Exe/Dll benutzen. Aber eine Lade-Routine für Ico-Dateien ist überhaupt kein Problem, weil Ico-Dateien praktisch dasselbe Format haben: ein TGroupIconRsrcHeader, gefolgt von einem oder mehreren TGroupIconRsrcEntry (nicht ganz, kleine Änderung), gefolgt von den Rohdaten der Bitmaps/PNGs. Die Lade-Routine schreibe ich vielleicht morgen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:55 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz