Seite 1 von 1
Dateitypen mit Icon Handler - API Methoden
Verfasst: 13.11.2004 17:49
von Robert
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?
Verfasst: 13.11.2004 18:50
von Andre
Schau doch mal auf
www.PureArea.net ins CodeArchiv. Dort findest Du in "Windows_System/Icons" verschiedene Beispielcodes zum Thema

Verfasst: 13.11.2004 19:20
von Robert
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.
Verfasst: 14.11.2004 23:46
von Robert
Hab mal ein Beispiel mit SHGetFileInfo zusammengestellt:
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
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???