public static WINDOWPLACEMENT GetPlacement(IntPtr hwnd) { WINDOWPLACEMENT placement = new WINDOWPLACEMENT(); placement.length = Marshal.SizeOf(placement); GetWindowPlacement(hwnd, ref placement); return placement; }
private void SyncWindowState(string newWindowState) { _logger.Info("Setting window state to {0}", newWindowState); try { FormWindowState newState; bool fullscreen = false; if (string.Equals(newWindowState, "fullscreen", StringComparison.OrdinalIgnoreCase)) { newState = FormWindowState.Maximized; fullscreen = true; } else if (string.Equals(newWindowState, "maximized", StringComparison.OrdinalIgnoreCase)) { newState = FormWindowState.Maximized; fullscreen = true; } else if (string.Equals(newWindowState, "minimized", StringComparison.OrdinalIgnoreCase)) { newState = FormWindowState.Minimized; } else { newState = FormWindowState.Normal; } _form.InvokeIfRequired(() => { _form.WindowState = newState; }); if (fullscreen) { NativeWindowMethods.SetWindowPos(_windowHandle, -1, _form.Left, _form.Top, _form.Width, _form.Height, 0); //var placement = new WINDOWPLACEMENT(); //placement.showCmd = ShowWindowCommands.Maximized; //placement.length = Marshal.SizeOf(typeof(WINDOWPLACEMENT)); //NativeWindowMethods.SetWindowPlacement(_windowHandle, ref placement); } else if (newState == FormWindowState.Maximized) { //NativeWindowMethods.SetWindowPos(_windowHandle, -1, _form.Left, _form.Top, _form.Width, _form.Height, 0); var placement = new WINDOWPLACEMENT(); placement.showCmd = ShowWindowCommands.Maximized; placement.length = Marshal.SizeOf(typeof(WINDOWPLACEMENT)); NativeWindowMethods.SetWindowPlacement(_windowHandle, ref placement); } else if (newState == FormWindowState.Normal) { var placement = new WINDOWPLACEMENT(); placement.showCmd = ShowWindowCommands.Normal; NativeWindowMethods.SetWindowPos(_windowHandle, -2, _form.Left, _form.Top, _form.Width, _form.Height, 0); //NativeWindowMethods.SetWindowPlacement(_windowHandle, ref placement); } if (newState != FormWindowState.Minimized) { NativeWindowMethods.SetForegroundWindow(_windowHandle); } } catch (Exception ex) { _logger.ErrorException("Error syncing window positions", ex); } }
public static extern bool SetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);
private static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);