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)); }
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); }