private static void HandleNcCalcSize(IntPtr hwnd, IntPtr wParam, IntPtr lParam) { if (wParam == BasicValues.TRUE) { var wpl = default(WINDOWPLACEMENT); wpl.length = (uint)Marshal.SizeOf(typeof(WINDOWPLACEMENT)); if (User32.GetWindowPlacement(hwnd, ref wpl)) { // detect if maximizd and set to workspace remove padding if (wpl.showCmd == ShowWindowOption.SW_MAXIMIZE) { // in multi-monitor case where app is minimized to a monitor on the right/bottom // the MonitorFromWindow will incorrectly return the leftmost monitor due to the minimized // window being set to the far left, so this routine now uses the proposed rect to correctly // identify the real nearest monitor to calc the nc size. NCCALCSIZE_PARAMS para = (NCCALCSIZE_PARAMS)Marshal.PtrToStructure(lParam, typeof(NCCALCSIZE_PARAMS)); var windowRect = para.rectProposed; IntPtr hMonitor = User32.MonitorFromRect(ref windowRect, MonitorOption.MONITOR_DEFAULTTONEAREST);// MonitorFromWindow(hWnd, 2); if (hMonitor != IntPtr.Zero) { MONITORINFO lpmi = new MONITORINFO(); lpmi.cbSize = (uint)Marshal.SizeOf(typeof(MONITORINFO)); if (User32.GetMonitorInfo(hMonitor, ref lpmi)) { var workArea = lpmi.rcWork; User32.AdjustForAutoHideTaskbar(hMonitor, ref workArea); Debug.WriteLine($@"NCCalc original = {para.rectProposed}, new ={workArea}"); para.rectProposed = workArea; Marshal.StructureToPtr(para, lParam, true); } } } } } }