Search
Module:
Directory

   Desktop Functions:

   Smart Device Functions:


Show Recent Changes
Subscribe (RSS)
Misc. Pages
Comments
FAQ
Helpful Tools
Playground
Suggested Reading
Website TODO List
Download Visual Studio Add-In

GetIconInfo (user32)
 
.
Summary

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
Public Declare Function GetIconInfo Lib "user32" (ByVal hIcon As IntPtr, ByVal piconinfo As ICONINFO) As Boolean

User-Defined Types:

None.

Notes:

12/29/2012.

EDIT

   <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 on MSDN

Please edit this page!

Do you have...

  • helpful tips or sample code to share for using this API in managed code?
  • corrections to the existing content?
  • variations of the signature you want to share?
  • additional languages you want to include?

Select "Edit This Page" on the right hand toolbar and edit it! Or add new pages containing supporting types needed for this API (structures, delegates, and more).

 
Access PInvoke.net directly from VS:
Terms of Use
Edit This Page
Find References
Show Printable Version
Revisions