System Icon extrahieren

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: System Icon extrahieren

Beitrag von STARGÅTE »

Wenn ich ein Icon/Image von einer Dateierweiterung haben möchte, verwende ich diese Prozedur hier:

Code: Alles auswählen

Enumeration
	#ExtensionIcon_Small
	#ExtensionIcon_Large
EndEnumeration

Procedure.i GetExtensionIcon(FileName.s, Size.i=#ExtensionIcon_Small)
	
	Protected FileInfo.SHFILEINFO, Flags.i = #SHGFI_ICON
	
	Select Size
		Case #ExtensionIcon_Small : Flags | #SHGFI_SMALLICON
		Case #ExtensionIcon_Large : Flags | #SHGFI_LARGEICON 
	EndSelect 
	
	If GetExtensionPart(FileName)
		Flags | #SHGFI_USEFILEATTRIBUTES
	EndIf
	
	If SHGetFileInfo_(@FileName, #FILE_ATTRIBUTE_NORMAL, @FileInfo, SizeOf(SHFILEINFO), Flags) 
		ProcedureReturn FileInfo\hIcon 
	Else
		ProcedureReturn #False
	EndIf 
	
EndProcedure


Enumeration
	#Window
	#StringGadget
	#ImageGadget
EndEnumeration

OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
StringGadget(#StringGadget, 10, 10, 200, 20, ".dll")
ImageGadget(#ImageGadget, 10, 40, 32, 32, GetExtensionIcon(".dll", #ExtensionIcon_Large))

Repeat
	
	Select WaitWindowEvent()
			
		Case #PB_Event_CloseWindow
			End
			
		Case #PB_Event_Gadget
			Select EventGadget()
				Case #StringGadget
					SetGadgetState(#ImageGadget, GetExtensionIcon(GetGadgetText(#StringGadget), #ExtensionIcon_Large))
			EndSelect
			
	EndSelect
	
ForEver
Die Funktion gibt dabei eine gültige ImageID zurück.

GetExtensionIcon() funktioniert vorallem auch mit ganzen Pfaden, so wird halt bei C:\ das Windows-Partitions-Icon gezeigt, oder bei einer Verknüpfung das dort zugewiesene Icon.
Ansonsten kannst du halt ".exe" und ".dll" für deine Icons verwenden.

EDIT: Nein, alles was du auf einem PC findest, darst du verwenden, ähnlich wie bei Schriftarten, nur darfst du die DLL mit den Icons nicht selber vertreiben.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: System Icon extrahieren

Beitrag von RSBasic »

@cOoki3druqs
Solange du diese Icons nicht mitlieferst, sondern nur auf die Icon-Ressourcen zugreifst, gibt es kein Problem.
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: System Icon extrahieren

Beitrag von ts-soft »

@STARGÅTE
Du solltest das Icon auch mit DestroyIcon wieder freigeben, ansonsten hast Du ein MemoryLeak!
In obigem Beispiel ist das aber nicht möglich.
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
Antworten