Delphi-PRAXiS
Seite 2 von 4     12 34      

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 21:26

AW: Icon anderer EXE Datei ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das Resultat ist leider das selbe. Alle Icons werden verändert bis auf dieses eine *sfz*.

Edit: Hier mal bein Screenshot. Oben das erste Icon macht die Probleme und ändert sich nicht.

SMO 14. Dez 2015 21:38

AW: Icon anderer EXE Datei ändern
 
Zitat:

Zitat von hoika (Beitrag 1324438)
Hallo,
kann es sein, dass das Icon intern mehrere Auflösungen enthält?

Symbole sind ein Zusammenspiel von zwei Ressourcentypen: RT_ICON und RT_GROUP_ICON.
Ein RT_GROUP_ICON ist mehr oder weniger nur eine Liste, die mehrere RT_ICON referenziert.
Ein RT_ICON hat nur eine feste Auflösung, es ist das RT_GROUP_ICON welches mehrere Auflösungen zu einer Einheit bündelt.


Zitat:

Zitat von Satyr (Beitrag 1324441)
Ich verstehe das nicht. Wenn ich das dann umschreibe für meine Bedürfnisse, dann hab ich doch keine Symbolgruppe die ich eintragen will.

Und ist das als eigene Unit zu verstehen?

(Entschuldigt, ich bin der Typ Autodidakt der sich vielews bei Google zusammensucht und Zusammenhänge meist erst spät versteht...)

Kein Problem. Du musst den Code auch nicht unbedingt verstehen, um ihn zu benutzen (aber gut wäre es).

In deinem ursprünglichen Code möchtest du ein RT_ICON mit der ID 105 "transplantieren" und zum MAINICON machen. Das geht aber so nicht, weil MAINICON nicht vom Typ RT_ICON, sondern RT_GROUP_ICON ist. Ein RT_GROUP_ICON verwendet ein oder mehrere RT_ICON anhand ihrer ID. Du musst MAINICON auf jeden Fall anpassen, es sei denn es verwendet schon von Anfang an nur ein RT_ICON mit der ID 105, was sehr unwahrscheinlich ist.

Am einfachsten für dich wäre folgendes: Finde heraus, zu welchem RT_GROUP_ICON dein Quellicon mit der ID 105 gehört. Dann benutze den Namen bzw. die ID dieses RT_GROUP_ICON mit meinem Code (kannst du in eine eigene Unit machen oder auch nicht, deine Entscheidung). Fertig.

Zitat:

Zitat von Satyr (Beitrag 1324442)
Das Resultat ist leider das selbe. Alle Icons werden verändert bis auf dieses eine *sfz*.

Edit: Hier mal bein Screenshot. Oben das erste Icon macht die Probleme und ändert sich nicht.

Ok, ich sehe das ist ein Problem mit den doofen Sprachcodes...

Satyr 14. Dez 2015 21:50

AW: Icon anderer EXE Datei ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
ID 105 ist ja schon eine Icon Gruppe, wenn ich das richtig sehe. Die wurde bei meinem Code auch ersetzt. Aber im Ordner "Icon" das mit der ID 1 eben nicht. Auch nicht mit dem Code von Dir.

SMO 14. Dez 2015 22:10

AW: Icon anderer EXE Datei ändern
 
Zitat:

Zitat von Satyr (Beitrag 1324446)
ID 105 ist ja schon eine Icon Gruppe, wenn ich das richtig sehe. Die wurde bei meinem Code auch ersetzt. Aber im Ordner "Icon" das mit der ID 1 eben nicht. Auch nicht mit dem Code von Dir.

Stimmt. Ich habe den Code auf der letzten Seite angepasst, probier's damit nochmal.
Das Problem sind die Language IDs, bei dir eben "Englisch (Großbritannien)". Die musst du beim Aufruf von UpdateResource exakt angeben, sonst schlägt der fehl.
("Englisch (Großbritannien)" = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_UK))

Mein Code benutzt jetzt die Holzhammermethode und löscht die Icons in sämtlichen Sprachen, in denen sie vorhanden sind. Die neuen Icons werden dann als "sprachneutral" eingefügt.

Satyr 14. Dez 2015 22:22

AW: Icon anderer EXE Datei ändern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich dachte das würde einfach überschrieben.

Aber irgendwie stimmt es noch nicht. Jetzt wird einen neue Icongruppe erzeugt (mainicon) und bei den Einzelicons einige hzinzugefügt (Sprache Neutral) und die existierenden bleiben die alten Icons...

SMO 14. Dez 2015 22:37

AW: Icon anderer EXE Datei ändern
 
Du musst den Code schon richtig anwenden. ;)
Was genau möchtest du machen? Ich dachte, diese Datei mit der Symbolgruppe 105 wäre die Quelle, nicht das Ziel.

Delphi-Quellcode:
procedure Test;
var
  AGroupIcon: TSmoGroupIcon;
begin
  // Hole die Symbolgruppe #105 aus abc.exe
  if not GetGroupIcon('abc.exe', MakeIntResource(105), AGroupIcon) then
    RaiseLastOSError;
  // Speichere die Symbolgruppe in Test.exe unter dem Namen "MAINICON"
  if not SetGroupIcon('D:\Test.exe', 'MAINICON', AGroupIcon) then
    RaiseLastOSError;
end;

Satyr 14. Dez 2015 22:44

AW: Icon anderer EXE Datei ändern
 
Nene, die ist das Ziel. Bzw. ich weiß nicht ob sie es ist.

Ich möchte einfach nur bei einer bestimmten EXE das Icon das angezeigt wird ändern. Ich habe in einem Ressourcen Editor dann die Icons in der Gruppe 105 gefunden und 5 einzelne Icons. Und die dann versucht zu ersetzen. Aber das klappt irgendwie nicht so richtig...

Zacherl 14. Dez 2015 22:46

AW: Icon anderer EXE Datei ändern
 
Hatte auch mal was gebastelt, vielleicht hilft dir das ja weiter:
http://www.delphipraxis.net/170682-l...resourcen.html

Wenn die .exe schon ein Icon hat, musst du gegebenenfalls die primäre IconGroup vorher manuell löschen. Die APIs dazu wurden ja schon genannt (UpdateResource mit nil und 0 als Größe sollte den Eintrag entfernen).

Satyr 14. Dez 2015 22:56

AW: Icon anderer EXE Datei ändern
 
Zitat:

Zitat von Zacherl (Beitrag 1324451)
Hatte auch mal was gebastelt, vielleicht hilft dir das ja weiter:
http://www.delphipraxis.net/170682-l...resourcen.html

Danke, das sieht... kompliziert aus (für mich) *g*.

Ich werde mich morgen einlesen und hoffentlich rausfinden wie ich das benutzen kann. Wenns klappt, geb ich hier bescheid :).

SMO 14. Dez 2015 22:59

AW: Icon anderer EXE Datei ändern
 
Zitat:

Zitat von Satyr (Beitrag 1324450)
Nene, die ist das Ziel. Bzw. ich weiß nicht ob sie es ist.

Ich möchte einfach nur bei einer bestimmten EXE das Icon das angezeigt wird ändern. Ich habe in einem Ressourcen Editor dann die Icons in der Gruppe 105 gefunden und 5 einzelne Icons. Und die dann versucht zu ersetzen. Aber das klappt irgendwie nicht so richtig...

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.


Zitat:

Zitat von Zacherl (Beitrag 1324451)
Hatte auch mal was gebastelt, vielleicht hilft dir das ja weiter:
http://www.delphipraxis.net/170682-l...resourcen.html

Wenn die .exe schon ein Icon hat, musst du gegebenenfalls die primäre IconGroup vorher manuell löschen. Die APIs dazu wurden ja schon genannt (UpdateResource mit nil und 0 als Größe sollte den Eintrag entfernen).

Danke für den Link, das schaue ich mir mal an. UpdateResource hat Satyr ja schon von Anfang an benutzt, das Problem waren eher die Language IDs. UpdateResource funktionier nämlich nur dann, wenn man die richtige Language ID angibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 Uhr.
Seite 2 von 4     12 34      

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