Type a page name and press Enter. You'll jump to the page if it exists, or you can create it if it doesn't.
To create a page in a module other than user32, prefix the name with the module name and a period.
geticoninfo (user32)
.
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.
<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("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!
The GetIconInfo API
12/29/2012 7:54:14 AM - Makarevich Ivan-93.125.39.169
ByRef is a VB keyword that specifies a variable to be passed as a parameter BY REFERENCE. In other words, the pointer to the variable is passed and any change to its value made within the function or sub will change its value outside the function/sub.
4/25/2007 3:19:29 AM - anonymous
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).