/// <summary> /// Get the min max size of a window /// </summary> /// <param name="hwnd">The HWND.</param> /// <param name="lParam">The l param.</param> public static void WmGetMinMaxInfo(System.IntPtr hwnd, System.IntPtr lParam) { Win32Interop.MINMAXINFO mmi = (Win32Interop.MINMAXINFO)Marshal.PtrToStructure(lParam, typeof(Win32Interop.MINMAXINFO)); // Adjust the maximized size and position to fit the work area of the correct monitor System.IntPtr monitor = Win32Interop.MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); if (monitor != System.IntPtr.Zero) { Win32Interop.MONITORINFO monitorInfo = new Win32Interop.MONITORINFO(); Win32Interop.GetMonitorInfo(monitor, monitorInfo); Win32Interop.RECT rcWorkArea = monitorInfo.rcWork; Win32Interop.RECT rcMonitorArea = monitorInfo.rcMonitor; mmi.ptMaxPosition.X = Math.Abs(rcWorkArea.left - rcMonitorArea.left); mmi.ptMaxPosition.Y = Math.Abs(rcWorkArea.top - rcMonitorArea.top); mmi.ptMaxSize.X = Math.Abs(rcWorkArea.right - rcWorkArea.left); mmi.ptMaxSize.Y = Math.Abs(rcWorkArea.bottom - rcWorkArea.top); } Marshal.StructureToPtr(mmi, lParam, true); }