private static Minmaxinfo AdjustWorkingAreaForAutoHide(IntPtr monitor, Minmaxinfo mmi)
        {
            var hwnd = NativeMethods.FindWindow("Shell_TrayWnd", null);
            var monitorWithTaskBar = NativeMethods.MonitorFromWindow(hwnd, MonitorDefaulttonearest);

            if (!monitor.Equals(monitorWithTaskBar))
            {
                return(mmi);
            }
            var abd = new Appbardata();

            abd.cbSize = Marshal.SizeOf(abd);
            abd.hWnd   = hwnd;
            NativeMethods.SHAppBarMessage((int)AbMsg.AbmGettaskbarpos, ref abd);
            var uEdge    = GetEdge(abd.rc);
            var autoHide = Convert.ToBoolean(NativeMethods.SHAppBarMessage((int)AbMsg.AbmGetstate, ref abd));

            if (!autoHide)
            {
                return(mmi);
            }

            switch (uEdge)
            {
            case (int)AbEdge.AbeLeft:
                mmi.ptMaxPosition.X  += 2;
                mmi.ptMaxTrackSize.X -= 2;
                mmi.ptMaxSize.X      -= 2;
                break;

            case (int)AbEdge.AbeRight:
                mmi.ptMaxSize.X      -= 2;
                mmi.ptMaxTrackSize.X -= 2;
                break;

            case (int)AbEdge.AbeTop:
                mmi.ptMaxPosition.Y  += 2;
                mmi.ptMaxTrackSize.Y -= 2;
                mmi.ptMaxSize.Y      -= 2;
                break;

            case (int)AbEdge.AbeBottom:
                mmi.ptMaxSize.Y      -= 2;
                mmi.ptMaxTrackSize.Y -= 2;
                break;

            default:
                return(mmi);
            }
            return(mmi);
        }
        private static Minmaxinfo AdjustWorkingAreaForAutoHide(IntPtr monitor, Minmaxinfo mmi)
        {
            var hwnd = NativeMethods.FindWindow("Shell_TrayWnd", null);
            var monitorWithTaskBar = NativeMethods.MonitorFromWindow(hwnd, MonitorDefaulttonearest);
            if (!monitor.Equals(monitorWithTaskBar))
                return mmi;
            var abd = new Appbardata();
            abd.cbSize = Marshal.SizeOf(abd);
            abd.hWnd = hwnd;
            NativeMethods.SHAppBarMessage((int) AbMsg.AbmGettaskbarpos, ref abd);
            var uEdge = GetEdge(abd.rc);
            var autoHide = Convert.ToBoolean(NativeMethods.SHAppBarMessage((int) AbMsg.AbmGetstate, ref abd));

            if (!autoHide)
                return mmi;

            switch (uEdge)
            {
                case (int) AbEdge.AbeLeft:
                    mmi.ptMaxPosition.X += 2;
                    mmi.ptMaxTrackSize.X -= 2;
                    mmi.ptMaxSize.X -= 2;
                    break;
                case (int) AbEdge.AbeRight:
                    mmi.ptMaxSize.X -= 2;
                    mmi.ptMaxTrackSize.X -= 2;
                    break;
                case (int) AbEdge.AbeTop:
                    mmi.ptMaxPosition.Y += 2;
                    mmi.ptMaxTrackSize.Y -= 2;
                    mmi.ptMaxSize.Y -= 2;
                    break;
                case (int) AbEdge.AbeBottom:
                    mmi.ptMaxSize.Y -= 2;
                    mmi.ptMaxTrackSize.Y -= 2;
                    break;
                default:
                    return mmi;
            }
            return mmi;
        }