Shell_NotifyIconGetRect (shell32)
Last changed: -24.155.240.198

.
Summary

Retrieves the Notifyicon bounding rectangle.

C# Signature:

[DllImport("shell32.dll", SetLastError = true)]

static extern int Shell_NotifyIconGetRect(In NOTIFYICONIDENTIFIER identifier, Out RECT iconLocation);

User-Defined Types:

NOTIFYICONIDENTIFIER

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

[DllImport("shell32.dll", SetLastError = true)]

private static extern int Shell_NotifyIconGetRect(In NOTIFYICONIDENTIFIER identifier, Out RECT iconLocation);

[StructLayout(LayoutKind.Sequential)]

public struct RECT

{

    public Int32 left;
    public Int32 top;
    public Int32 right;
    public Int32 bottom;

}

[StructLayout(LayoutKind.Sequential)]

public struct NOTIFYICONIDENTIFIER

{

    public uint cbSize;
    public IntPtr hWnd;
    public uint uID;
    public Guid guidItem;

}

public static RECT GetNotifyIconRect(IntPtr windowHandle, uint taskbarIconId)

{

    var rect = new RECT();
    var notifyCon = new NOTIFYICONIDENTIFIER();
    notifyCon.cbSize = (uint) Marshal.SizeOf(notifyCon.GetType());
    notifyCon.hWnd = windowHandle;
    notifyCon.uID = taskbarIconId;
    var shellNotifyIconGetRect = WinApi.Shell_NotifyIconGetRect(ref notifyCon, out rect);
    if (shellNotifyIconGetRect == 0x80004005)
    {
        // E_FAIL, will happen if the icon is not there.
        throw new Win32Exception(shellNotifyIconGetRect, "Failed to get icon position.");
    }

           if (shellNotifyIconGetRect != 0)
    {
        throw new Win32Exception(shellNotifyIconGetRect);
    }

           return rect;

}

Documentation