Seite 2 von 2

Re: System Icon extrahieren

Verfasst: 27.09.2012 14:46
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.

Re: System Icon extrahieren

Verfasst: 27.09.2012 14:47
von RSBasic
@cOoki3druqs
Solange du diese Icons nicht mitlieferst, sondern nur auf die Icon-Ressourcen zugreifst, gibt es kein Problem.

Re: System Icon extrahieren

Verfasst: 27.09.2012 14:56
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.