コード例 #1
0
        internal static System.Windows.Point ScreenToWorkArea(System.Windows.Point pt)
        {
            Rect monitorRect;
            Rect workAreaRect;

            FindMonitorRectsFromPoint(pt, out monitorRect, out workAreaRect);
            return(new System.Windows.Point(pt.X - workAreaRect.Left + monitorRect.Left, pt.Y - workAreaRect.Top + monitorRect.Top));
        }
コード例 #2
0
        internal static void FindMonitorRectsFromPoint(System.Windows.Point point, out Rect monitorRect, out Rect workAreaRect)
        {
            var hMonitor = NativeMethods.NativeMethods.MonitorFromPoint(new Point
            {
                X = (int)point.X,
                Y = (int)point.Y
            }, 2);

            monitorRect  = new Rect(0.0, 0.0, 0.0, 0.0);
            workAreaRect = new Rect(0.0, 0.0, 0.0, 0.0);
            if (!(hMonitor != IntPtr.Zero))
            {
                return;
            }
            var monitorInfo = new Monitorinfo {
                CbSize = (uint)Marshal.SizeOf(typeof(Monitorinfo))
            };

            NativeMethods.NativeMethods.GetMonitorInfo(hMonitor, ref monitorInfo);
            monitorRect  = new Rect(monitorInfo.RcMonitor.Position, monitorInfo.RcMonitor.Size);
            workAreaRect = new Rect(monitorInfo.RcWork.Position, monitorInfo.RcWork.Size);
        }