(.Net 4)
Code (csharp):
[DllImport
("shell32.dll", CharSet
= CharSet
.Auto)]
private static extern uint ExtractIconEx
(string szFileName,
int nIconIndex, IntPtr
[] phiconLarge, IntPtr
[] phiconSmall,
uint nIcons
);
[DllImport
("user32.dll")]
private static extern void DestroyIcon
(IntPtr hIcon
);
public static Tuple
<List
<Bitmap
>, List
<Bitmap
>> GetShellIcons
()
{
var count
= ExtractIconEx
("shell32.dll",
-1,
null,
null,
0);
var largeHIcons
= new IntPtr
[count
];
var smallHIcons
= new IntPtr
[count
];
ExtractIconEx
("shell32.dll",
0, largeHIcons, smallHIcons, count
);
var largeIcons
= largeHIcons
.Select(Icon
.FromHandle).Select(i
=> i
.ToBitmap()).ToList();
var smallIcons
= smallHIcons
.Select(Icon
.FromHandle).Select(i
=> i
.ToBitmap()).ToList();
largeHIcons
.ToList().ForEach(DestroyIcon
);
smallHIcons
.ToList().ForEach(DestroyIcon
);
return new Tuple
<List
<Bitmap
>, List
<Bitmap
>>(smallIcons, largeIcons
);
}
Ako koristiš .Net 3.5 zameni Tuple sa svojom klasom.
Edit: A, vidim da si se snašao i sam.
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.