public static extern IntPtr SHAppBarMessage(int dwMessage, ref APPBARDATA pData);
/// <summary> /// This method handles the window size if the taskbar is set to auto-hide. /// </summary> private static MINMAXINFO AdjustWorkingAreaForAutoHide(IntPtr monitorContainingApplication, MINMAXINFO mmi) { var hwnd = UnsafeNativeMethods.FindWindow("Shell_TrayWnd", null); var monitorWithTaskbarOnIt = UnsafeNativeMethods.MonitorFromWindow(hwnd, Constants.MONITOR_DEFAULTTONEAREST); if (monitorContainingApplication.Equals(monitorWithTaskbarOnIt) == false) { return mmi; } var abd = new APPBARDATA(); abd.cbSize = Marshal.SizeOf(abd); abd.hWnd = hwnd; UnsafeNativeMethods.SHAppBarMessage((int)ABMsg.ABM_GETTASKBARPOS, ref abd); var uEdge = GetEdge(abd.rc); var autoHide = UnsafeNativeMethods.SHAppBarMessage((int)ABMsg.ABM_GETSTATE, ref abd) == new IntPtr(1); if (!autoHide) { return mmi; } switch (uEdge) { case (int)ABEdge.ABE_LEFT: mmi.ptMaxPosition.X += 2; mmi.ptMaxTrackSize.X -= 2; mmi.ptMaxSize.X -= 2; break; case (int)ABEdge.ABE_RIGHT: mmi.ptMaxSize.X -= 2; mmi.ptMaxTrackSize.X -= 2; break; case (int)ABEdge.ABE_TOP: mmi.ptMaxPosition.Y += 2; mmi.ptMaxTrackSize.Y -= 2; mmi.ptMaxSize.Y -= 2; break; case (int)ABEdge.ABE_BOTTOM: mmi.ptMaxSize.Y -= 2; mmi.ptMaxTrackSize.Y -= 2; break; default: return mmi; } return mmi; }