Standard-Icon ermitteln *gelöst*
Standard-Icon ermitteln *gelöst*
Challö miteinander,
es geht um WinAPI. Wie finde ich heraus, was für ein Icon mit einem Dateityp verknüpft ist? Bei ".txt" ist das ja z.B. standrdgemäß das Notitzblock-Icon.
Ich bin mir sicher, dass das hier irgendwo im Board schon einmal vorkam, habe es aber echt nichtmehr gefunden. In der MS Doku habe ich leider auch nichts gefunden. Bin ich mal wieder blind?
es geht um WinAPI. Wie finde ich heraus, was für ein Icon mit einem Dateityp verknüpft ist? Bei ".txt" ist das ja z.B. standrdgemäß das Notitzblock-Icon.
Ich bin mir sicher, dass das hier irgendwo im Board schon einmal vorkam, habe es aber echt nichtmehr gefunden. In der MS Doku habe ich leider auch nichts gefunden. Bin ich mal wieder blind?
Zuletzt geändert von Regenduft am 29.03.2009 12:20, insgesamt 1-mal geändert.
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Aus dem Archiv, plus beispiel
einfach eine Dateiendung eingeben und gucken ^^ zB.
.exe
.txt
.doc
Code: Alles auswählen
Structure MySHFILEINFO
hIcon.l
iIcon.l
dwAttributes.l
szDisplayName.b[#MAX_PATH]
szTypeName.b[80]
EndStructure
Procedure.l GetExtensionIcon(DateiPfad$, Size=0, Index=0)
Protected Info.MySHFILEINFO, StandardIcon.l, Flags.l, Typ$
StandardIcon = 0
Flags = #SHGFI_ICON
If Size = 0
Flags | #SHGFI_SMALLICON
Else
Flags | #SHGFI_LARGEICON
EndIf
If Right(DateiPfad$,1) <> "\" : Left(DateiPfad$,Len(DateiPfad$)-1) : EndIf
Typ$ = GetExtensionPart(DateiPfad$)
If Typ$
Flags | #SHGFI_USEFILEATTRIBUTES
EndIf
If SHGetFileInfo_(DateiPfad$, 0, @Info.MySHFILEINFO, SizeOf(MySHFILEINFO), Flags)
StandardIcon = Info\hIcon
Else
If Size = 0
ExtractIconEx_("shell32.dll", Index, 0, @StandardIcon, 1)
Else
ExtractIconEx_("shell32.dll", Index, @StandardIcon, 0, 1)
EndIf
EndIf
ProcedureReturn StandardIcon
EndProcedure
OpenWindow(0, 0, 0, 100, 100, "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(WindowID(0))
StringGadget(1,0,0,100,20,".txt")
ImageGadget(2,17,27,64,64, 0)
SetGadgetState(2, GetExtensionIcon(GetGadgetText(1), 0))
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case 1
SetGadgetState(2, GetExtensionIcon(GetGadgetText(1), 0))
EndSelect
EndSelect
ForEver
.exe
.txt
.doc
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Danke Stargate! Genau was ich gesucht habe! 
EDIT: Beinhaltet sogar mehr als ich ursprünglich dachte zu benötigen, da es auch Leufwerk-Icons korrekt ermittelt!
Natürlich ärgert es mich jetzt weil ich a) es im Archiv nicht gefunden habe und b) weil ich SHGetFileInfo_() eigentlich kenne und selbst hätte drauf kommen können.
Bin also nicht nur blind sondern auch blöd!
Muss mal noch kurz erwähnen: Bin jetzt genau ein Jahr und 3 Tage im Board, aber bin immerwieder von den schnellen, freundlichen und treffenden Antworten der Mitglieder begeistert!!!einself


EDIT: Beinhaltet sogar mehr als ich ursprünglich dachte zu benötigen, da es auch Leufwerk-Icons korrekt ermittelt!
Natürlich ärgert es mich jetzt weil ich a) es im Archiv nicht gefunden habe und b) weil ich SHGetFileInfo_() eigentlich kenne und selbst hätte drauf kommen können.

Bin also nicht nur blind sondern auch blöd!

Muss mal noch kurz erwähnen: Bin jetzt genau ein Jahr und 3 Tage im Board, aber bin immerwieder von den schnellen, freundlichen und treffenden Antworten der Mitglieder begeistert!!!einself


PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
(Das würde wohl jetzt eher in Anfänger gehören, 'n neuer Thread wäre aber wohl noch blöder.)
Was soll denn diese Zeile bringen? Die macht doch effektiv überhaupt nix, selbst wenn die If-Bedingung erfüllt ist!
Was soll denn diese Zeile bringen? Die macht doch effektiv überhaupt nix, selbst wenn die If-Bedingung erfüllt ist!
Code: Alles auswählen
if Right(DateiPfad$,1) <> "\" : Left(DateiPfad$,Len(DateiPfad$)-1) : EndIf
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
- 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
Da hat jemand gleiches mit ungleichem verwechselt
Hier mal der Code etwas aktueller:

Hier mal der Code etwas aktueller:
Code: Alles auswählen
Procedure GetExtensionIcon(DateiPfad$, Size=0, Index=0)
Protected Info.SHFILEINFO, StandardIcon, Flags, Typ$
Flags = #SHGFI_ICON
If Size = 0
Flags | #SHGFI_SMALLICON
Else
Flags | #SHGFI_LARGEICON
EndIf
If Right(DateiPfad$,1) = "\" : Left(DateiPfad$,Len(DateiPfad$)-1) : EndIf
Typ$ = GetExtensionPart(DateiPfad$)
If Typ$
Flags | #SHGFI_USEFILEATTRIBUTES
EndIf
If SHGetFileInfo_(DateiPfad$, 0, @Info.SHFILEINFO, SizeOf(SHFILEINFO), Flags)
StandardIcon = Info\hIcon
Else
If Size = 0
ExtractIconEx_("shell32.dll", Index, 0, @StandardIcon, 1)
Else
ExtractIconEx_("shell32.dll", Index, @StandardIcon, 0, 1)
EndIf
EndIf
ProcedureReturn StandardIcon
EndProcedure
OpenWindow(0, 0, 0, 100, 100, "Fenster", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
StringGadget(1,0,0,100,20,".txt")
ImageGadget(2,17,27,64,64, 0)
SetGadgetState(2, GetExtensionIcon(GetGadgetText(1), 0))
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_CloseWindow
End
Case #PB_Event_Gadget
Select EventGadget()
Case 1
SetGadgetState(2, GetExtensionIcon(GetGadgetText(1), 0))
EndSelect
EndSelect
ForEver
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.

das ding macht immer noch kein sinn, weil das ergebnis von
Left(DateiPfad$,Len(DateiPfad$)-1)
garnicht in DateiPfad$ geschrieben wird, deswegen hatte ich den fehler nie bemerkt ...
echt peinlich ...
einfach die ganze Zeile weg oder so:
Left(DateiPfad$,Len(DateiPfad$)-1)
garnicht in DateiPfad$ geschrieben wird, deswegen hatte ich den fehler nie bemerkt ...
echt peinlich ...
einfach die ganze Zeile weg oder so:
Code: Alles auswählen
If Right(DateiPfad$,1) = "\"
DateiPfad$ = Left(DateiPfad$,Len(DateiPfad$)-1)
EndIf
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- 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
hab ich einen Fehler zwar beseitigt, aber es war trotzdem sinnlos
lieber überprüfen obs eine extension gibt, weil ein pfad mit backslash am
ende wird keine datei mit gültiger extension enthalten
Was da so alles im CodeArchiv für Leichen schlummern

lieber überprüfen obs eine extension gibt, weil ein pfad mit backslash am
ende wird keine datei mit gültiger extension enthalten

Was da so alles im CodeArchiv für Leichen schlummern

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.
