Retrieves the Notifyicon bounding rectangle.
[DllImport("shell32.dll", SetLastError = true)]
static extern int Shell_NotifyIconGetRect([In]ref NOTIFYICONIDENTIFIER identifier, [Out]out RECT iconLocation);
NOTIFYICONIDENTIFIER
RECT
Do you know one? Please contribute it!
Minimum supported client: Windows 7 [desktop apps only]
Minimum supported server: Windows Server 2008 R2 [desktop apps only]
Please add some!
[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;
}
[DllImport("shell32.dll", SetLastError = true)]
private static extern int Shell_NotifyIconGetRect([In]ref NOTIFYICONIDENTIFIER identifier, [Out]out RECT iconLocation);
public static RECT GetNotifyIconRect(IntPtr windowHandle, uint taskbarIconId)
{
var rect = new RECT();
var notifyIcon = new NOTIFYICONIDENTIFIER();
notifyIcon.cbSize = (uint)Marshal.SizeOf(notifyIcon.GetType());
notifyIcon.hWnd = windowHandle;
notifyIcon.uID = taskbarIconId;
var hresult = Shell_NotifyIconGetRect(ref notifyIcon, out rect);
if (hresult == 0x80004005)
{
// E_FAIL, will happen if the icon is not there.
throw new Win32Exception(hresult, "Failed to get icon position.");
}
if (hresult != 0)
{
throw new Win32Exception(hresult);
}
return rect;
}