Занимался както этим, только на WinAPI, надо получать их из системного листа, это должно помочь:
| Код | public static System.Drawing.Icon GetFolderIcon2( IconSize size, FolderType folderType ) {
// Need to add size check, although errors generated at present! uint flags = Shell32.SHGFI_ICON | Shell32.SHGFI_USEFILEATTRIBUTES;
if (FolderType.Open == folderType) { flags += Shell32.SHGFI_OPENICON; } if (IconSize.Small == size) { flags += Shell32.SHGFI_SMALLICON; } else { flags += Shell32.SHGFI_LARGEICON; }
flags += Shell32.SHGFI_SYSICONINDEX;
Shell32.SHFILEINFO FI = new Shell32.SHFILEINFO();
// System listView IntPtr hSysLV = Shell32.SHGetFileInfo("C:\\", 0, ref FI, (uint) System.Runtime.InteropServices.Marshal.SizeOf(FI), flags);
// Get the folder icon Shell32.SHFILEINFO shfi = new Shell32.SHFILEINFO(); Shell32.SHGetFileInfo( null, Shell32.FILE_ATTRIBUTE_DIRECTORY, ref shfi, (uint) System.Runtime.InteropServices.Marshal.SizeOf(shfi), flags );
IntPtr hIcon = CommCtl32.ImageList_GetIcon(hSysLV, shfi.iIcon, flags);
System.Drawing.Icon.FromHandle(hIcon); // Load the icon from an HICON handle
// Now clone the icon, so that it can be successfully stored in an ImageList System.Drawing.Icon icon = (System.Drawing.Icon)System.Drawing.Icon.FromHandle(shfi.hIcon).Clone();
User32.DestroyIcon( shfi.hIcon ); // Cleanup return icon; } } public class CommCtl32 { [DllImport("comctl32.dll")] public static extern IntPtr ImageList_GetIcon(IntPtr himl, int i, uint flags); }
|
Добавлено через 1 минуту и 39 секунд Да, в ImageList_GetIcon флаги другие их надо в вин айпях смотреть  |