/// <summary> /// Get window border size /// </summary> private void GetBorder() { NativeMethods.DwmGetWindowAttribute(Handle, DWMWINDOWATTRIBUTE.ExtendedFrameBounds, out NativeStructs.Rect frame, Marshal.SizeOf(typeof(NativeStructs.Rect))); Border = new NativeStructs.Rect( (int)(Math.Floor(frame.Left / DpiX) - Rect.Left), (int)(Math.Floor(frame.Top / DpiY) - Rect.Top), (int)(Rect.Right - Math.Ceiling(frame.Right / DpiX)), (int)(Rect.Bottom - Math.Ceiling(frame.Bottom / DpiY)) ); }
/// <summary> /// Constructor /// </summary> /// <param name="windowInfo">Selected window</param> /// <param name="selectedRegion">Selected region</param> public SelectedWindow(WindowInfo windowInfo, NativeStructs.Rect selectedRegion) { WindowInfo = windowInfo; selectedRegion = new NativeStructs.Rect( (int)(selectedRegion.Left * ScaleHelper.ScalingFactor), (int)(selectedRegion.Top * ScaleHelper.ScalingFactor), (int)(selectedRegion.Right * ScaleHelper.ScalingFactor), (int)(selectedRegion.Bottom * ScaleHelper.ScalingFactor) ); SelectedRegion = new NativeStructs.Rect( selectedRegion.Left + WindowInfo.Border.Left, selectedRegion.Top + WindowInfo.Border.Top, selectedRegion.Right + WindowInfo.Border.Left, selectedRegion.Bottom + WindowInfo.Border.Top ); }
/// <summary> /// Constructor /// </summary> /// <param name="windowInfo">Selected window</param> /// <param name="selectedRegion">Selected region</param> public SelectedWindow(WindowInfo windowInfo, NativeStructs.Rect selectedRegion) { WindowInfo = windowInfo; selectedRegion = new NativeStructs.Rect( (int)(selectedRegion.Left * windowInfo.DpiX), (int)(selectedRegion.Top * windowInfo.DpiY), (int)(selectedRegion.Right * windowInfo.DpiX), (int)(selectedRegion.Bottom * windowInfo.DpiY) ); SelectedRegion = new NativeStructs.Rect( selectedRegion.Left + WindowInfo.Border.Left, selectedRegion.Top + WindowInfo.Border.Top, selectedRegion.Right + WindowInfo.Border.Left, selectedRegion.Bottom + WindowInfo.Border.Top ); }
private static void WmGetMinMaxInfo(IntPtr hwnd, IntPtr lParam) { MINMAXINFO mmi = (MINMAXINFO)Marshal.PtrToStructure(lParam, typeof(MINMAXINFO)); IntPtr hMonitor = MonitorFromWindowNative(hwnd, NativeFlags.MONITOR_DEFAULTTONEAREST); MonitorInfoEx info = new MonitorInfoEx(); GetMonitorInfoNative(new HandleRef(null, hMonitor), info); NativeStructs.Rect rcWorkArea = info.rcWork; NativeStructs.Rect rcMonitorArea = info.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); }
/// <summary> /// Get window size and position /// </summary> private void GetSizeAndPosition() { if (!NativeMethods.GetWindowRect(Handle, out var rct)) { return; } //DpiHelper.GetDpi(Handle, out var dpiX, out var dpiY); DpiHelper.GetPrimaryDpi(out var dpiPrimaryX, out var dpiPrimaryY); var temprct = new NativeStructs.Rect( (int)(rct.Left / DpiX), (int)(rct.Top / DpiY), (int)(rct.Right / DpiX), (int)(rct.Bottom / DpiY) ); Rect = temprct; Position = new Point((int)(rct.Left / dpiPrimaryX), (int)(rct.Top / dpiPrimaryY)); Size = new Size(temprct.Right - temprct.Left + 1, temprct.Bottom - temprct.Top + 1); }