Muchísimas gracias Roman, muchas, muchas gracias tienes toda la razón:
Código:
ImageList1.Handle := SHGetFileInfo('C:\noexiste.txt',0,FInfo,SizeOf(TSHFileInfo),
SHGFI_SMALLICON or SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES);
Ahora me devuelve el tipo de icono segun sea su extensión aunque el archivo no exista! Ahora solo falta hacerle una función para que me devuelva solo el icono nº 4, que es el que contiene el icono.
Muchas, muchas gracias!