public static TaskBarInfo GetTaskBarInfo()
{
// allocate appbardata structure
NativeMethods.APPBARDATA abdata = new NativeMethods.APPBARDATA() { hWnd = IntPtr.Zero };
abdata.cbSize = (uint)Marshal.SizeOf(abdata);
// get task bar info
IntPtr result = NativeMethods.SHAppBarMessage(NativeMethods.ABMsg.ABM_GETTASKBARPOS, ref abdata);
// return null if the call failed
if (result == IntPtr.Zero)
throw new Exception("Could not retrieve taskbar information.");
Rect position = abdata.rc;
TaskBarAlignment alignment;
switch (abdata.uEdge)
{
case NativeMethods.ABEdge.ABE_BOTTOM:
alignment = TaskBarAlignment.Bottom;
break;
case NativeMethods.ABEdge.ABE_TOP:
alignment = TaskBarAlignment.Top;
break;
case NativeMethods.ABEdge.ABE_LEFT:
alignment = TaskBarAlignment.Left;
break;
case NativeMethods.ABEdge.ABE_RIGHT:
alignment = TaskBarAlignment.Right;
break;
default:
throw new ArgumentOutOfRangeException("Couldn't retrieve location of taskbar.");
}
return new TaskBarInfo() { Position = position, Alignment = alignment };
}