Seite 1 von 1
Icon in Exe-Dateien
Verfasst: 24.12.2012 12:42
von Sauer-RAM
Erstmal ein frohes Fest euch allen ^^! Und dann gleich mal zu meiner Frage:
Wo werden Die Icons ind Exe-Dateien abgespeichert?
Ich hab in der Boardsuche nichts gefunden, bei Google nichts gefunden und mit einer manuellen Suche einer Exe via HEX-Editor wurde ich wie erwartet leider auch nicht fündig. Ich hoffe ihr könnt mir helfen.
Danke schonmal für die Antworten
Re: Icon in Exe-Dateien
Verfasst: 24.12.2012 12:47
von ts-soft
Entweder in einer DataSection oder als Resource (Windows-Standard).
Guck Dir die Exe z.B. mit dem Resource Hacker an:
http://www.angusj.com/resourcehacker/
PS: Deine Signatur ist grösser als Dein Beitrag

Re: Icon in Exe-Dateien
Verfasst: 24.12.2012 12:53
von Sauer-RAM
Ok vielen Dank. Das mit der Signatur werd ich nachher noch ändern. Ich poste mein Ergebniss wenn ichs hab ^^
Re: Icon in Exe-Dateien
Verfasst: 24.12.2012 13:05
von Sauer-RAM
Also mit Resource Hacker find ich zwar ein Icon und kann das auch ändern, ich würde das aber nur gern selbst schreiben. Bei Resource Hacker sehe ich leider nicht wo das Icon in der Datei ist. gibt es da irgendwelche markierungen in der Exe wo das Icon anfängt und wieder aufhört?
Re: Icon in Exe-Dateien
Verfasst: 24.12.2012 13:17
von ts-soft
Da haste Dir ja was vorgenommen
Reicht nicht ExtractIcon_ oder LoadIcon_ ?
Da ich jetzt auch nicht weiß, was Du genau vorhast, ausser das es anders geht, als Du es Dir
gerade ausgemalt hast, hier eine Übersicht der relevanten APIs:
Resource Functions (Windows)
Re: Icon in Exe-Dateien
Verfasst: 24.12.2012 13:47
von Sauer-RAM
Vielen Dank, ExtractIcon_ War was ich suchte. Ich wusste nicht, dass es einen API Befehl für sowas gibt ^^. Hab ihn in der API Library übersehen. Gibt es auch einen Befehl um ein Icon auszutauschen? Ich möchte ein Programm schreiben, welches die Icons von Programmen ändern kann. z.B. Bekommt meine zusätzliche Firewall das Icon der Standart Firewall.
Re: Icon in Exe-Dateien
Verfasst: 24.12.2012 13:53
von RSBasic
Ich hab den folgenden Code zwar nicht getestet, aber ich habe mit Hilfe von Suchbegriffen wie "UpdateResource" oder "change icon" gefunden:
http://www.purebasic.fr/english/viewtopic.php?t=14019
Der alte Code aus dem Jahre 2005 muss natürlich an die neuste PB-Version angepasst werden. Sollte aber kein Problem sein.
Re: Icon in Exe-Dateien
Verfasst: 24.12.2012 14:05
von ts-soft
Das ganze wird wohl nicht so einfach gehen. Aber der link von RSBasic ist schon mal ein guter Anfang.
Der tauscht aber nur das erste Icon aus und nur wenn es ein einzelnes Icon ist. Das ist heutzutage
eher die Ausnahme, wirst Du ja sehen, was geht.
Wichtig ist, die Exe darf nicht geöffnet sein und sollte sich nicht in einem geschütztem Verzeichnis
befinden. Probleme mit AV-Programmen wirst Du evtl. auch haben.
Aber Versuch macht klug. Wenns klappt, dann kannst Du es hier ja posten.
Re: Icon in Exe-Dateien
Verfasst: 24.12.2012 14:42
von Sauer-RAM
Vielen Dank für den Link, aber ich muss sage: "Hä?

"
Ohje, Ohje... Ich hab noch nie mit Strukturen gearbeitet. Ich verstehe leider die Teile auf die es ankommt nicht. Hab jetzt mal versucht was zusammen zumurksen
Code: Alles auswählen
#RT_GROUP_ICON = #RT_ICON + 11
IconFile.s = "Pfad zur Quell-Exe"
ExeFile.s = "Pfad zu zu ändernden Exe"
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(1,10,10,32,32,0,0)
SetGadgetState(1,ExtractIcon_(GetModuleHandle_(0),IconFile,0))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
*icon = AllocateMemory(10000)
icon = ExtractIcon_(GetModuleHandle_(0),IconFile,0)
hlnst = BeginUpdateResource_(ExeFile, #False)
If hlnst
UpdateResource_(hlnst,#RT_GROUP_ICON, 1, #LANG_NEUTRAL,*icon,SizeOf(*icon))
UpdateResource_(hlnst,#RT_ICON, 1, #LANG_NEUTRAL,*icon,SizeOf(*icon))
EndUpdateResource_(hlnst,#False)
Else
MessageRequester("Error","Konnte Update nicht beginnen.")
EndIf
EndIf
läuft aber natürlich nicht. Ich lese mich jetzt mal in die Strukturen ein.