internal static void RestoreOriginalPosition() { User32Wrapper.SetWindowPos( _hWndActive.Value, 0, _rect.Value.Left, _rect.Value.Top, _rect.Value.Right - _rect.Value.Left, _rect.Value.Bottom - _rect.Value.Top, SWP_NOZORDER | SWP_SHOWWINDOW | SWP_NOACTIVATE); }
internal static void CaptureCurrentForeground() { _hWndActive = User32Wrapper.GetForegroundWindow(); Object obj = new object(); if (!User32Wrapper.GetWindowRect(new HandleRef(obj, _hWndActive.Value), out User32Wrapper.RECT rect)) { Console.WriteLine("Error: Cannot get current foreground window dimensions."); return; } _rect = rect; }
public static void TransformWindow(TranslateWindowCommand direction, int rows, int cols) { if (_hWndActive == null) { throw new Exception("Error: ForegroundWindow not initialized!"); } Object obj = new object(); if (!User32Wrapper.GetWindowRect(new HandleRef(obj, _hWndActive.Value), out User32Wrapper.RECT rect)) { Console.WriteLine("Error: Cannot get window dimensions."); return; } if (direction == TranslateWindowCommand.Minimize) { if (User32Wrapper.IsWindowVisible(_hWndActive.Value)) { User32Wrapper.MinimizeWindow(_hWndActive.Value); } else { User32Wrapper.NormalizeWindow(_hWndActive.Value); } } else if (direction == TranslateWindowCommand.Maximize) { User32Wrapper.MaximizeWindow(_hWndActive.Value); } else { User32Wrapper.NormalizeWindow(_hWndActive.Value); int x = rect.Left; int width = rect.Right - rect.Left; int y = rect.Top; int height = rect.Bottom - rect.Top; int offset = CalculateOffsetToClosestStop(rows, cols, x, y, width, height, direction); if (offset == -1) { return; } switch (direction) { case TranslateWindowCommand.MoveUp: y = y - offset; break; case TranslateWindowCommand.MoveDown: y = y + offset; break; case TranslateWindowCommand.MoveLeft: x = x - offset; break; case TranslateWindowCommand.MoveRight: x = x + offset; break; case TranslateWindowCommand.MoveTopUp: y = y - offset; height = height + offset; break; case TranslateWindowCommand.MoveTopDown: y = y + offset; height = height - offset; break; case TranslateWindowCommand.MoveBottomUp: height = height - offset; break; case TranslateWindowCommand.MoveBottomDown: height = height + offset; break; case TranslateWindowCommand.MoveLeftLeft: x = x - offset; width = width + offset; break; case TranslateWindowCommand.MoveLeftRight: x = x + offset; width = width - offset; break; case TranslateWindowCommand.MoveRightLeft: width = width - offset; break; case TranslateWindowCommand.MoveRightRight: width = width + offset; break; } User32Wrapper.SetWindowPos(_hWndActive.Value, 0, x, y, width, height, SWP_NOZORDER | SWP_SHOWWINDOW | SWP_NOACTIVATE); } }