private void WmGetMinMaxInfo(IntPtr hwnd, IntPtr lparam) { var mmi = (MINMAXINFO)Marshal.PtrToStructure(lparam, typeof(MINMAXINFO)); const int MONITOR_DEFAULTTONEAREST = 0x00000002; var monitor = NativeMethods.MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); if (monitor != IntPtr.Zero) { var monitorInfo = new MONITORINFO(); NativeMethods.GetMonitorInfo(monitor, monitorInfo); var rcWorkArea = monitorInfo.rcWork; var 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); }
internal static extern bool GetMonitorInfo(IntPtr hMonitor, MONITORINFO lpmi);