예제 #1
0
        private static void FindMaximumSingleMonitorRectangle(InteropValues.RECT windowRect, out InteropValues.RECT screenSubRect, out InteropValues.RECT monitorRect)
        {
            var rects = new List <InteropValues.RECT>();

            InteropMethods.EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero,
                                               delegate(IntPtr hMonitor, IntPtr hdcMonitor, ref InteropValues.RECT rect, IntPtr lpData)
            {
                var monitorInfo    = default(InteropValues.MONITORINFO);
                monitorInfo.cbSize = (uint)Marshal.SizeOf(typeof(InteropValues.MONITORINFO));
                InteropMethods.GetMonitorInfo(hMonitor, ref monitorInfo);
                rects.Add(monitorInfo.rcWork);
                return(true);
            }, IntPtr.Zero);

            var num = 0L;

            screenSubRect = new InteropValues.RECT
            {
                Left   = 0,
                Right  = 0,
                Top    = 0,
                Bottom = 0
            };

            monitorRect = new InteropValues.RECT
            {
                Left   = 0,
                Right  = 0,
                Top    = 0,
                Bottom = 0
            };

            foreach (var current in rects)
            {
                var rect = current;
                InteropMethods.IntersectRect(out var rECT2, ref rect, ref windowRect);
                var num2 = (long)(rECT2.Width * rECT2.Height);
                if (num2 > num)
                {
                    screenSubRect = rECT2;
                    monitorRect   = current;
                    num           = num2;
                }
            }
        }