Ich versuche die Icons von Dateitypen zu bekommen, bei denen ein Icon Handler mit im Spiel ist, z.B. .otf, .ttf oder .html. SHGetFileInfo bringt bei diesen nur ein Default-Icon zurück.
Lt. MSDN soll man hierfür nicht SHGetFileInfo nehmen, sondern die Methoden IExtractIcon::GetIconLocation und IExtractIcon::Extract. Auch die Shell benutzt diese.
Siehe: http://msdn.microsoft.com/library/defau ... cticon.asp.
Nur - wie definiert man diese Methoden in PB? Oder wie sonst komme ich an diese Icons heran?
Dateitypen mit Icon Handler - API Methoden
- Andre
- PureBasic Team
- Beiträge: 1765
- Registriert: 11.09.2004 16:35
- Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10 - Wohnort: Saxony / Deutscheinsiedel
- Kontaktdaten:
Schau doch mal auf www.PureArea.net ins CodeArchiv. Dort findest Du in "Windows_System/Icons" verschiedene Beispielcodes zum Thema 

Hallo Andre,
die Beispiele vom CodeArchiv hab ich alle schon durchexerziert, die Icons für die besagten Dateitypen bekomme ich allerdings nicht zurück. Auch nicht mit dem API-Befehl SHGetFileInfo.
Sobald ein Icon Handler mit im Spiel ist, muß man irgendwie andere Wege gehen. Das mit IExtractIcon::GetIconLocation klingt schon einleuchtend, nur weiß ich halt nicht wie man das in PB definiert und ob das überhaupt geht.
Hoffentlich kann mir da jemand helfen, ich schlag mich schon recht lange dem Thema herum.
die Beispiele vom CodeArchiv hab ich alle schon durchexerziert, die Icons für die besagten Dateitypen bekomme ich allerdings nicht zurück. Auch nicht mit dem API-Befehl SHGetFileInfo.
Sobald ein Icon Handler mit im Spiel ist, muß man irgendwie andere Wege gehen. Das mit IExtractIcon::GetIconLocation klingt schon einleuchtend, nur weiß ich halt nicht wie man das in PB definiert und ob das überhaupt geht.
Hoffentlich kann mir da jemand helfen, ich schlag mich schon recht lange dem Thema herum.
Robert
Hab mal ein Beispiel mit SHGetFileInfo zusammengestellt:
Bei den ersten 3 Dateitypen gibt's nur ein Default-Icon zurück, die anderen funktionieren einwandfrei. Kann das jemand bestätigen?
Oder ist was auf meinem Rechner faul, ich hab WinXP Home SP2 + PB 3.91 hier.
Die Size von SHFILEINFO in PB ist auf jeden Fall schon mal madig. Ist das bekannt???
Code: Alles auswählen
Structure MySHFILEINFO
hIcon.l
iIcon.l
dwAttributes.l
szDisplayName.b[#MAX_PATH]
szTypeName.b[80]
EndStructure
Debug "SHFILEINFO size = " + Str(SizeOf(SHFILEINFO)) ; SizeOf(SHFILEINFO) is 259 bytes short in PB
Debug "MYSHFILEINFO size = " + Str(SizeOf(MySHFILEINFO))
szName.s = ".otf" ; einfach mal der Reihe nach aktivieren und debuggen
; szName.s = ".ttf"
; szName.s = ".html"
; szName.s = ".doc"
; szName.s = ".txt"
; szName.s = ".ini"
; szName.s = ".pdf"
SHGetFileInfo_(szName, #FILE_ATTRIBUTE_NORMAL, @Info.MySHFILEINFO, SizeOf(MySHFILEINFO), #SHGFI_TYPENAME|#SHGFI_ICON|#SHGFI_LARGEICON|#SHGFI_USEFILEATTRIBUTES)
iconhandle = PeekL(@Info\hicon)
Debug PeekL(@Info\iicon)
Debug PeekS(@Info\szTypeName)
If OpenWindow(0,0,0,100,100,#PB_Window_Screencentered|#PB_Window_SystemMenu, "Icon")
If CreateGadgetList(WindowID())
ImageGadget(0, 10, 10, 32, 32, IconHandle)
Repeat
Until WaitWindowEvent() = #PB_EventCloseWindow
EndIf
EndIf
Oder ist was auf meinem Rechner faul, ich hab WinXP Home SP2 + PB 3.91 hier.
Die Size von SHFILEINFO in PB ist auf jeden Fall schon mal madig. Ist das bekannt???
Robert