I did have a try at substituting actual filename using FileGetShortcut, but I got left with the same icon throughout the list.
maybe I did it wrong?
I can have another go.
I was thinking that a MOD of line:
if not DllCall("Shell32\SHGetFileInfoA", "str", FileName, "uint", 0, "str", sfi, "uint", sfi_size, "uint", 0x101) ; 0x101 is SHGFI_ICON+SHGFI_SMALLICON
might be required.