Icon in Exe-Dateien

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Sauer-RAM
Beiträge: 326
Registriert: 13.04.2009 16:22
Computerausstattung: Lenovo ThinkPad X230t Convertible
Wohnort: Haslach i. K.

Icon in Exe-Dateien

Beitrag 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
"Bildung kommt vom Bildschirm und nicht vom Buch, sonst hieße es ja Buchung."
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Icon in Exe-Dateien

Beitrag 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 :freak:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Sauer-RAM
Beiträge: 326
Registriert: 13.04.2009 16:22
Computerausstattung: Lenovo ThinkPad X230t Convertible
Wohnort: Haslach i. K.

Re: Icon in Exe-Dateien

Beitrag von Sauer-RAM »

Ok vielen Dank. Das mit der Signatur werd ich nachher noch ändern. Ich poste mein Ergebniss wenn ichs hab ^^
"Bildung kommt vom Bildschirm und nicht vom Buch, sonst hieße es ja Buchung."
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein
Benutzeravatar
Sauer-RAM
Beiträge: 326
Registriert: 13.04.2009 16:22
Computerausstattung: Lenovo ThinkPad X230t Convertible
Wohnort: Haslach i. K.

Re: Icon in Exe-Dateien

Beitrag 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?
"Bildung kommt vom Bildschirm und nicht vom Buch, sonst hieße es ja Buchung."
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Icon in Exe-Dateien

Beitrag von ts-soft »

Da haste Dir ja was vorgenommen :mrgreen:
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)
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Sauer-RAM
Beiträge: 326
Registriert: 13.04.2009 16:22
Computerausstattung: Lenovo ThinkPad X230t Convertible
Wohnort: Haslach i. K.

Re: Icon in Exe-Dateien

Beitrag 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.
"Bildung kommt vom Bildschirm und nicht vom Buch, sonst hieße es ja Buchung."
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Icon in Exe-Dateien

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Icon in Exe-Dateien

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Sauer-RAM
Beiträge: 326
Registriert: 13.04.2009 16:22
Computerausstattung: Lenovo ThinkPad X230t Convertible
Wohnort: Haslach i. K.

Re: Icon in Exe-Dateien

Beitrag von Sauer-RAM »

Vielen Dank für den Link, aber ich muss sage: "Hä? :oops: "
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.
"Bildung kommt vom Bildschirm und nicht vom Buch, sonst hieße es ja Buchung."
Dieter Hildebrandt
"Bildung ist Das, was übrig bleibt, wenn man alles was man in der Schule gelernt hat, vergisst. "
Albert Einstein
Antworten