Tak SHGetFileInfo zwróci ci ikonkę powiązaną z plikiem (używałem tego kiedyś w swoim komponencie), jednak nie zwróci ikonki związanej z konkretnym dyskiem :( Niestety w swoim komponencie pisanym jeszcze pod Win95 musiałem ręcznie określić które ikonki z shell32.dll pasują do dysków, a w Win98 już się wszystko zmieniło ;( Jak będziesz wiedział jak coś takiego zrobić to wrzuć do FAQ.
A jeżeli chodzi o uzyskiwanie ikonki to takie coś w moim komponenciku jest:
ShGetFileInfo(Buf, 0, Dir, SizeOf(Dir), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
Node.ImageIndex := Dir.iIcon;
ShGetFileInfo(Buf, 0, Dir, SizeOf(Dir), SHGFI_OPENICON or SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
Node.SelectedIndex := Dir.iIcon;
Gdzie
Buf: array [0..260] of Char; //W Windowsie 260 znaków maks. dł. ścieżki
a Dir: TShFileInfo;
oraz Node to jest jedeno z dzieci TTreeView