I found some code in CodeArchiv that did what I wanted (I believe it was by Freak), except that the images are now upside down in 4.40.
Code: Select all
Procedure GetShellThumbnail(FileName$, Image, Width, Height, Depth = #PB_Image_DisplayFormat)
Protected Result = 0, ImageResult
Protected Desktop.IShellFolder, Folder.IShellFolder
Protected Extract.IExtractImage
Protected *pidlFolder.ITEMIDLIST, *pidlFile.ITEMIDLIST
Protected Priority, Flags, Bitmap = 0, size.SIZE
If SHGetDesktopFolder_(@Desktop) >= 0
If Desktop\ParseDisplayName(#Null, #Null, GetPathPart(FileName$), #Null, @*pidlFolder, #Null) = #S_OK
If Desktop\BindToObject(*pidlFolder, #Null, ?IID_IShellFolder, @Folder) = #S_OK
If Folder\ParseDisplayName(#Null, #Null, GetFilePart(FileName$) , #Null, @*pidlFile, #Null) = #S_OK
If Folder\GetUIObjectOf(#Null, 1, @*pidlFile, ?IID_IExtractImage, 0, @Extract) = #S_OK
ImageResult = CreateImage(Image, Width, Height, Depth)
If ImageResult
If Image = #PB_Any
Image = ImageResult
EndIf
If Depth = #PB_Image_DisplayFormat
Depth = ImageDepth(Image)
EndIf
size\cx = Width
size\cy = Height
If Extract\GetLocation(Space(#MAX_PATH), #MAX_PATH, @Priority, @size, Depth, @Flags) >= 0
If Extract\Extract(@Bitmap) >= 0 And Bitmap
If StartDrawing(ImageOutput(Image))
DrawImage(Bitmap, 0, 0)
StopDrawing()
Result = ImageResult
EndIf
DeleteObject_(Bitmap)
EndIf
EndIf
Extract\Release()
EndIf
If Result = 0
FreeImage(Image)
EndIf
EndIf
CoTaskMemFree_(*pidlFile)
EndIf
Folder\Release()
EndIf
CoTaskMemFree_(*pidlFolder)
EndIf
Desktop\Release()
EndIf
ProcedureReturn Result
DataSection
IID_IShellFolder: ; {000214E6-0000-0000-C000-000000000046}
Data.l $000214E6
Data.w $0000, $0000
Data.b $C0, $00, $00, $00, $00, $00, $00, $46
IID_IExtractImage: ; {BB2E617C-0920-11D1-9A0B-00C04FC2D6C1}
Data.l $BB2E617C
Data.w $0920, $11D1
Data.b $9A, $0B, $00, $C0, $4F, $C2, $D6, $C1
EndDataSection
EndProcedure
#ExplorerGadget = 0
#ImageGadget = 1
#Image = 0
If OpenWindow(0, 0, 0, 500, 400, "Shell Thumbnails", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
ExplorerTreeGadget(#ExplorerGadget, 5, 5, 190, 390, "C:\")
ImageGadget(#ImageGadget, 225, 100, 250, 200, 0, #PB_Image_Border)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadget() = #ExplorerGadget And EventType() = #PB_EventType_Change
If GetShellThumbnail(GetGadgetText(#ExplorerGadget), #Image, 250, 200)
SetGadgetState(#ImageGadget, ImageID(#Image))
Else
SetGadgetState(#ImageGadget, 0)
EndIf
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
End
--blueb