Dateitypen mit Icon Handler - API Methoden

Für allgemeine Fragen zur Programmierung mit PureBasic.
Robert
Beiträge: 25
Registriert: 14.09.2004 23:24

Dateitypen mit Icon Handler - API Methoden

Beitrag 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?
Robert
Benutzeravatar
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:

Beitrag von Andre »

Schau doch mal auf www.PureArea.net ins CodeArchiv. Dort findest Du in "Windows_System/Icons" verschiedene Beispielcodes zum Thema :D
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Robert
Beiträge: 25
Registriert: 14.09.2004 23:24

Beitrag 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.
Robert
Robert
Beiträge: 25
Registriert: 14.09.2004 23:24

Beitrag 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???
Robert
Antworten