Wie kann ich ein Icon aus eine EXE extrahieren und in eine Liste einfügen?
Und wie funktioniert dass mit Dateien, wo die Symbole ja nur indirekt über
die verknüpfte Anwendung zugewiesen werden?
Icon aus EXE
Re: Icon aus EXE
Mit dem WinAPI-Befehl ExtractIcon(Ex) kannst du das Icon aus einer Executable-Datei oder DLL-Datei extrahieren: http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Beispielcode aus der WinAPI Library:
Beispielcode aus der WinAPI Library:
Code: Alles auswählen
EnableExplicit
Define FolderIcon
Define Draw
ExtractIconEx_("shell32.dll",3,0,@FolderIcon, 1)
CreateImage(1,32,32)
Draw = StartDrawing(ImageOutput(1))
Box(0,0,32,32,RGB(255,255,255))
DrawIcon_(Draw,0,0,FolderIcon)
StopDrawing()
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(1,10,10,0,0,ImageID(1),0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
- 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 aus EXE
Farbe wäre: Box(0,0,32,32,GetSysColor_(#COLOR_BTNFACE)) die bessere Wahl.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Icon aus EXE
Zum zweiten Teil der Frage:
Code: Alles auswählen
EnableExplicit
Procedure.l CatchExeIcon(Pfad.s)
Protected Icon.SHFILEINFO
SHGetFileInfo_(Pfad, #Null, @Icon, SizeOf(SHFILEINFO), #SHGFI_ICON|#SHGFI_SMALLICON|#SHGFI_USEFILEATTRIBUTES)
ProcedureReturn Icon\hIcon
EndProcedure
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ImageGadget(1,10,10,0,0,CatchExeIcon("C:\Autoexec.bat"),0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: Icon aus EXE
Vielen Dank für die Beispiele.
Unter Win7 wirkt das Icon aus shell32.dll abgeschnitten (siehe Antwort zu 1.Frage).
Sind die Symbole unter Win7 etwas größer als 32 Pixel?
Kann oder sollte man die Größe vom Symbol ermitteln, bevor es extrahiert wird?
Wenn ja, wie macht man das?
Unter Win7 wirkt das Icon aus shell32.dll abgeschnitten (siehe Antwort zu 1.Frage).
Sind die Symbole unter Win7 etwas größer als 32 Pixel?
Kann oder sollte man die Größe vom Symbol ermitteln, bevor es extrahiert wird?
Wenn ja, wie macht man das?
- 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 aus EXE
Nein, aber der Rand vom Style klaut Dir ca. 4 pixel. Die solltest Du mit ranbasteln.
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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Icon aus EXE
Da ich mich auch grad damit beschäftigen muss
....
Allerdings ist in der Prozedur von sibru alles drin um die Abmessungen zu ermitteln, sobald man das Iconhandle hat.
Aber du kannst das #SHGFI_SMALLICON in ein #SHGFI_LARGEICON ändern, aber ob sich an den Maßen irgendetwas tut,
kann ich so nicht sagen. (nachzulesen unter MSDN)

Also vor dem extrahieren geht es nicht...purebas hat geschrieben:Kann oder sollte man die Größe vom Symbol ermitteln, bevor es extrahiert wird?
Wenn ja, wie macht man das?
Allerdings ist in der Prozedur von sibru alles drin um die Abmessungen zu ermitteln, sobald man das Iconhandle hat.
Aber du kannst das #SHGFI_SMALLICON in ein #SHGFI_LARGEICON ändern, aber ob sich an den Maßen irgendetwas tut,
kann ich so nicht sagen. (nachzulesen unter MSDN)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom