@msdn=http://search.microsoft.com/search/results.aspx?qu=$$$ @pinvoke=http://pinvoke.net/$$$.htm Summary: The GetIconInfo API !!!!C# Signature: [StructLayout(LayoutKind.Sequential)] struct ICONINFO { public bool fIcon; // Specifies whether this structure defines an icon or a cursor. A value of TRUE specifies // an icon; FALSE specifies a cursor. public Int32 xHotspot; // Specifies the x-coordinate of a cursor's hot spot. If this structure defines an icon, the hot // spot is always in the center of the icon, and this member is ignored. public Int32 yHotspot; // Specifies the y-coordinate of the cursor's hot spot. If this structure defines an icon, the hot // spot is always in the center of the icon, and this member is ignored. public IntPtr hbmMask; // (HBITMAP) Specifies the icon bitmask bitmap. If this structure defines a black and white icon, // this bitmask is formatted so that the upper half is the icon AND bitmask and the lower half is // the icon XOR bitmask. Under this condition, the height should be an even multiple of two. If // this structure defines a color icon, this mask only defines the AND bitmask of the icon. public IntPtr hbmColor; // (HBITMAP) Handle to the icon color bitmap. This member can be optional if this // structure defines a black and white icon. The AND bitmask of hbmMask is applied with the SRCAND // flag to the destination; subsequently, the color bitmap is applied (using XOR) to the // destination by using the SRCINVERT flag. } [DllImport("user32.dll")] static extern bool GetIconInfo(IntPtr hIcon, out ICONINFO piconinfo); !!!!VB.Net Signature: Public Declare Function GetIconInfo Lib "user32" (ByVal hIcon As IntPtr, ByRef piconinfo As ICONINFO) As Boolean !!!!User-Defined Types: None. !!!!Notes: 12/29/2012. EDIT: VB. The 'piconinfo' is an 'OUT' parameter, i.e. 'ByRef' <System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint:="GetIconInfo")> _ Public Shared Function GetIconInfo(ByVal hIcon As System.IntPtr, ByRef piconinfo As ICONINFO) As <System.Runtime.InteropServices.MarshalAsAttribute(System.Runtime.InteropServices.UnmanagedType.Bool)> Boolean End Function 'Jens Madsen None. !!!!Tips & Tricks: Please add some! This function CREATES two GDI objects: bitmap hbmColor and bitmap hbmMask. Don't forget to delete them!!! !!!!Sample Code: The hbmColor and hbmMask are pointers to unmanaged data and must be deleted after use. The following code will grab the icon info for a cursor handle and dispose of the unmanaged resources, if needed: public class IconInfo : IDisposable { private ICONINFO ii; public IconInfo(IntPtr hCursor) { if (!GetIconInfo(hCursor, out ii)) { throw new Exception("Bad hCursor"); } } public Bitmap ColorBitmap { get { if (ii.hbmColor == IntPtr.Zero) return null; return Image.FromHbitmap(ii.hbmColor); } } public Bitmap MaskBitmap { get { if (ii.hbmMask == IntPtr.Zero) return null; return Image.FromHbitmap(ii.hbmMask); } } public Point HotPoint { get { return new Point(ii.xHotspot, ii.yHotspot); } } void IDisposable.Dispose() { if (ii.hbmColor != IntPtr.Zero) DeleteObject(ii.hbmColor); if (ii.hbmMask != IntPtr.Zero) DeleteObject(ii.hbmMask); } [DllImport("gdi32.dll", EntryPoint = "DeleteObject")] static extern IntPtr DeleteObject(IntPtr hDc); [DllImport("user32.dll")] static extern bool GetIconInfo(IntPtr hIcon, out ICONINFO piconinfo); [StructLayout(LayoutKind.Sequential)] struct ICONINFO { public bool fIcon; public Int32 xHotspot; public Int32 yHotspot; public IntPtr hbmMask; public IntPtr hbmColor; } } !!!!Alternative Managed API: Do you know one? Please contribute it! Documentation: GetIconInfo@msdn on MSDN
Edit user32.geticoninfo
You do not have permission to change this page. If you feel this is in error, please send feedback with the contact link on the main page.