private void fullScreenToolStripMenuItem_Click(object sender, EventArgs e) { Favorites.Favorite fav = (Favorites.Favorite) this.lstFavorites.SelectedItem; if (!controller.Favorites.CanRemove(fav.SearchText)) { return; } controller.Favorites.Remove(fav); fav.SizeMode = (this.fullScreenToolStripMenuItem.Checked) ? Favorites.Favorite.SizeModes.FullScreen : Favorites.Favorite.SizeModes.NoChange; if (fav.SizeMode == Favorites.Favorite.SizeModes.FullScreen) { fav.PositionX = 0; fav.PositionY = 0; fav.PositionW = 0; fav.PositionH = 0; } else { fav.ShouldMaximize = false; } this.RefreshFavoritesList(fav); }
private void noSizeChangeToolStripMenuItem_Click(object sender, EventArgs e) { Favorites.Favorite fav = (Favorites.Favorite)lstFavorites.SelectedItem; if (!controller.Favorites.CanRemove(fav.SearchText)) { return; } controller.Favorites.Remove(fav); fav.SizeMode = (noSizeChangeToolStripMenuItem.Checked) ? Favorites.Favorite.SizeModes.NoChange : Favorites.Favorite.SizeModes.FullScreen; if (fav.SizeMode == Favorites.Favorite.SizeModes.NoChange) { fav.ShouldMaximize = false; fav.OffsetL = 0; fav.OffsetR = 0; fav.OffsetT = 0; fav.OffsetB = 0; fav.PositionX = 0; fav.PositionY = 0; fav.PositionW = 0; fav.PositionH = 0; } RefreshFavoritesList(fav); }
/// <summary> /// adds the currently selected process to the favorites (by window title text) /// </summary> private void byTheWindowTitleTextregexToolStripMenuItem_Click(object sender, EventArgs e) { if (lstProcesses.SelectedItem == null) { return; } ProcessDetails pd = ((ProcessDetails)lstProcesses.SelectedItem); if (!pd.Manageable) { return; } //TODO move to controller if (controller.Favorites.CanAdd(pd.WindowTitle)) { string res = Tools.Input_Text("Add to favorites by RegEx string", "Regex string (see the Help menu for reference)", pd.WindowTitle); if (res.Trim().Length > 0) { Favorites.Favorite fav = new Favorites.Favorite(); fav.Kind = Favorites.Favorite.FavoriteKinds.ByRegexString; fav.SearchText = res; controller.Favorites.Add(fav); } } }
/// <summary> /// adds the currently selected process to the favorites (by window title text) /// </summary> private void byTheWindowTitleTextregexToolStripMenuItem_Click(object sender, EventArgs e) { if (this.lstProcesses.SelectedItem == null) { return; } ProcessDetails pd = ((ProcessDetails)this.lstProcesses.SelectedItem); if (!pd.Manageable) { return; } //TODO move to controller if (controller.Favorites.CanAdd(pd.WindowTitle)) { InputText it = new InputText(); it.Text = "Add to favorites by regex string"; it.Input = pd.WindowTitle; it.Instructions = "Regex string (reference is in the Help menu)"; it.ShowDialog(); if (it.DialogResult != DialogResult.OK) { return; } Favorites.Favorite fav = new Favorites.Favorite(); fav.Kind = Favorites.Favorite.FavoriteKinds.ByRegexString; fav.SearchText = it.Input; controller.Favorites.Add(fav); } }
private void setWindowSizeToolStripMenuItem_Click(object sender, EventArgs e) { Favorites.Favorite fav = (Favorites.Favorite)lstFavorites.SelectedItem; if (!controller.Favorites.CanRemove(fav.SearchText)) { return; } DialogResult result = MessageBox.Show("Would you like to select the area using your mouse cursor?\r\n\r\nIf you answer No, you will be prompted for specific pixel dimensions.", "Select Area?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); if (result == DialogResult.Cancel) { return; } if (result == DialogResult.Yes) { using (DesktopAreaSelector frmSelectArea = new DesktopAreaSelector()) { if (frmSelectArea.ShowDialog() != DialogResult.OK) { return; } // Temporarily disable compiler warning CS1690: http://msdn.microsoft.com/en-us/library/x524dkh4.aspx // // We know what we're doing: everything is safe here. #pragma warning disable 1690 fav.PositionX = frmSelectArea.CurrentTopLeft.X; fav.PositionY = frmSelectArea.CurrentTopLeft.Y; fav.PositionW = frmSelectArea.CurrentBottomRight.X - frmSelectArea.CurrentTopLeft.X; fav.PositionH = frmSelectArea.CurrentBottomRight.Y - frmSelectArea.CurrentTopLeft.Y; #pragma warning restore 1690 } } else // System.Windows.Forms.DialogResult.No { int.TryParse(Tools.Input_Text("Set Window Size", "Pixel X location for the top left corner (X coordinate):", fav.PositionX.ToString()), out fav.PositionX); int.TryParse(Tools.Input_Text("Set Window Size", "Pixel Y location for the top left corner (Y coordinate):", fav.PositionY.ToString()), out fav.PositionY); int.TryParse(Tools.Input_Text("Set Window Size", "Window width (in pixels):", fav.PositionW.ToString()), out fav.PositionW); int.TryParse(Tools.Input_Text("Set Window Size", "Window height (in pixels):", fav.PositionH.ToString()), out fav.PositionH); } controller.Favorites.Remove(fav); if ((fav.PositionW == 0) || (fav.PositionH == 0)) { fav.SizeMode = Favorites.Favorite.SizeModes.FullScreen; } else { fav.SizeMode = Favorites.Favorite.SizeModes.SpecificSize; fav.ShouldMaximize = false; } RefreshFavoritesList(fav); }
/// <summary> /// remove the menu, resize the window, remove border, and maximize /// </summary> public void RemoveBorder(ProcessDetails pd, Favorites.Favorite favDetails = null, Boolean overrideTimeout = false) { if (favDetails != null && favDetails.DelayBorderless == true && overrideTimeout == false) { //Wait 10 seconds before removing the border. Task task = new Task(() => RemoveBorder(pd, favDetails, true)); task.Wait(TimeSpan.FromSeconds(10)); } Manipulation.MakeWindowBorderless(pd, window, pd.WindowHandle, new Rectangle(), favDetails ?? _favorites.FromProcessDetails(pd)); }
/// <summary> /// remove the menu, resize the window, remove border, and maximize /// </summary> public void RemoveBorder_ToSpecificRect(IntPtr hWnd, Rectangle targetFrame, Favorites.Favorite favDetails = null, Boolean overrideTimeout = false) { if (favDetails != null && favDetails.DelayBorderless == true && overrideTimeout == false) { //Wait 10 seconds before removing the border. Task task = new Task(() => RemoveBorder_ToSpecificRect(hWnd, targetFrame, favDetails, true)); task.Wait(TimeSpan.FromSeconds(10)); } var pd = _processDetails.FromHandle(hWnd); Manipulation.MakeWindowBorderless(pd, window, hWnd, targetFrame, favDetails ?? _favorites.FromProcessDetails(pd)); }
private void delayBorderlessToolStripMenuItem_Click(object sender, EventArgs e) { Favorites.Favorite fav = (Favorites.Favorite)lstFavorites.SelectedItem; if (!controller.Favorites.CanRemove(fav.SearchText)) { return; } controller.Favorites.Remove(fav); fav.DelayBorderless = delayBorderlessToolStripMenuItem.Checked; RefreshFavoritesList(fav); }
private void hideMouseCursorToolStripMenuItem_Click(object sender, EventArgs e) { Favorites.Favorite fav = (Favorites.Favorite)lstFavorites.SelectedItem; if (!controller.Favorites.CanRemove(fav.SearchText)) { return; } controller.Favorites.Remove(fav); fav.HideMouseCursor = hideMouseCursorToolStripMenuItem.Checked; RefreshFavoritesList(fav); }
private void hideWindowsTaskbarToolStripMenuItem_Click(object sender, EventArgs e) { Favorites.Favorite fav = (Favorites.Favorite) this.lstFavorites.SelectedItem; if (!controller.Favorites.CanRemove(fav.SearchText)) { return; } controller.Favorites.Remove(fav); fav.HideWindowsTaskbar = this.hideWindowsTaskbarToolStripMenuItem.Checked; this.RefreshFavoritesList(fav); }
/// <summary> /// removes the currently selected entry from the favorites /// </summary> private void btnRemoveFavorite_Click(object sender, EventArgs e) { if (lstFavorites.SelectedItem == null) { return; } //TODO move to controller. Favorites.Favorite fav = (Favorites.Favorite)lstFavorites.SelectedItem; if (!controller.Favorites.CanRemove(fav.SearchText)) { return; } controller.Favorites.Remove(fav); }
/// <summary> /// remove the menu, resize the window, remove border, and maximize /// </summary> public void RemoveBorder(ProcessDetails pd, Favorites.Favorite favDetails = null, Boolean overrideTimeout = false) { if (favDetails != null && favDetails.DelayBorderless == true && overrideTimeout == false) { //Wait 10 seconds before removing the border. Task task = new Task(() => RemoveBorder(pd, favDetails, true)); task.Wait(TimeSpan.FromSeconds(10)); } // If a Favorite screen exists, use the Rect from that, instead if (null != favDetails && null != favDetails.favScreen) { RemoveBorder_ToSpecificRect(pd, favDetails.favScreen, favDetails, overrideTimeout); return; } Manipulation.MakeWindowBorderless(pd, window, pd.WindowHandle, new Rectangle(), favDetails ?? _favorites.FromProcessDetails(pd)); }
private void adjustWindowBoundsToolStripMenuItem_Click(object sender, EventArgs e) { Favorites.Favorite fav = (Favorites.Favorite)lstFavorites.SelectedItem; if (!controller.Favorites.CanRemove(fav.SearchText)) { return; } controller.Favorites.Remove(fav); int.TryParse(Tools.Input_Text("Adjust Window Bounds", "Pixel adjustment for the left window edge (0 pixels = no adjustment):", fav.OffsetL.ToString()), out fav.OffsetL); int.TryParse(Tools.Input_Text("Adjust Window Bounds", "Pixel adjustment for the right window edge (0 pixels = no adjustment):", fav.OffsetR.ToString()), out fav.OffsetR); int.TryParse(Tools.Input_Text("Adjust Window Bounds", "Pixel adjustment for the top window edge (0 pixels = no adjustment):", fav.OffsetT.ToString()), out fav.OffsetT); int.TryParse(Tools.Input_Text("Adjust Window Bounds", "Pixel adjustment for the bottom window edge (0 pixels = no adjustment):", fav.OffsetB.ToString()), out fav.OffsetB); RefreshFavoritesList(fav); }
private void removeMenusToolStripMenuItem_Click(object sender, EventArgs e) { if (this.lstFavorites.SelectedItem == null) { return; } Favorites.Favorite fav = (Favorites.Favorite) this.lstFavorites.SelectedItem; if (!controller.Favorites.CanRemove(fav.SearchText)) { return; } controller.Favorites.Remove(fav); fav.RemoveMenus = this.removeMenusToolStripMenuItem.Checked; RefreshFavoritesList(fav); }
private void alwaysOnTopToolStripMenuItem_Click(object sender, EventArgs e) { if (lstFavorites.SelectedItem == null) { return; } Favorites.Favorite fav = (Favorites.Favorite)lstFavorites.SelectedItem; if (!controller.Favorites.CanRemove(fav.SearchText)) { return; } controller.Favorites.Remove(fav); fav.TopMost = alwaysOnTopToolStripMenuItem.Checked; RefreshFavoritesList(fav); }
/// <summary> /// Sets up the Favorite-ContextMenu according to the current state /// </summary> private void mnuFavoritesContext_Opening(object sender, CancelEventArgs e) { if (lstFavorites.SelectedItem == null) { e.Cancel = true; return; } Favorites.Favorite fav = (Favorites.Favorite)lstFavorites.SelectedItem; fullScreenToolStripMenuItem.Checked = fav.SizeMode == Favorites.Favorite.SizeModes.FullScreen; automaximizeToolStripMenuItem.Checked = fav.ShouldMaximize; alwaysOnTopToolStripMenuItem.Checked = fav.TopMost; hideMouseCursorToolStripMenuItem.Checked = fav.HideMouseCursor; hideWindowsTaskbarToolStripMenuItem.Checked = fav.HideWindowsTaskbar; removeMenusToolStripMenuItem.Checked = fav.RemoveMenus; automaximizeToolStripMenuItem.Enabled = fav.SizeMode == Favorites.Favorite.SizeModes.FullScreen; adjustWindowBoundsToolStripMenuItem.Enabled = (fav.SizeMode == Favorites.Favorite.SizeModes.FullScreen) && (!fav.ShouldMaximize); setWindowSizeToolStripMenuItem.Enabled = fav.SizeMode != Favorites.Favorite.SizeModes.FullScreen; setWindowSizeToolStripMenuItem.Checked = fav.SizeMode == Favorites.Favorite.SizeModes.SpecificSize; noSizeChangeToolStripMenuItem.Checked = fav.SizeMode == Favorites.Favorite.SizeModes.NoChange; }
/// <summary> /// adds the currently selected process to the favorites (by process binary name) /// </summary> private void byTheProcessBinaryNameToolStripMenuItem_Click(object sender, EventArgs e) { if (lstProcesses.SelectedItem == null) { return; } ProcessDetails pd = ((ProcessDetails)lstProcesses.SelectedItem); if (!pd.Manageable) { return; } //TODO move to controller if (controller.Favorites.CanAdd(pd.BinaryName)) { Favorites.Favorite fav = new Favorites.Favorite(); fav.Kind = Favorites.Favorite.FavoriteKinds.ByBinaryName; fav.SearchText = pd.BinaryName; controller.Favorites.Add(fav); } }
private void automaximizeToolStripMenuItem_Click(object sender, EventArgs e) { Favorites.Favorite fav = (Favorites.Favorite)lstFavorites.SelectedItem; if (!controller.Favorites.CanRemove(fav.SearchText)) { return; } controller.Favorites.Remove(fav); fav.ShouldMaximize = automaximizeToolStripMenuItem.Checked; if (fav.ShouldMaximize) { fav.SizeMode = Favorites.Favorite.SizeModes.FullScreen; fav.PositionX = 0; fav.PositionY = 0; fav.PositionW = 0; fav.PositionH = 0; } RefreshFavoritesList(fav); }
/// <summary> /// remove the menu, resize the window, remove border, and maximize /// </summary> public void RemoveBorder_ToSpecificRect(IntPtr hWnd, Rectangle targetFrame, Favorites.Favorite favDetails = null) { var pd = _processDetails.FromHandle(hWnd); Manipulation.MakeWindowBorderless(pd, window, hWnd, targetFrame, favDetails ?? _favorites.FromProcessDetails(pd)); }
/// <summary> /// remove the menu, resize the window, remove border, and maximize /// </summary> public void RemoveBorder_ToSpecificScreen(IntPtr hWnd, Screen screen, Favorites.Favorite favDetails = null) { var pd = _processDetails.FromHandle(hWnd); Manipulation.MakeWindowBorderless(pd, window, hWnd, screen.Bounds, favDetails ?? _favorites.FromProcessDetails(pd)); }
/// <summary> /// remove the menu, resize the window, remove border, and maximize /// </summary> public void RemoveBorder(ProcessDetails pd, Favorites.Favorite favDetails = null) { Manipulation.MakeWindowBorderless(pd, window, pd.WindowHandle, new Rectangle(), favDetails ?? _favorites.FromProcessDetails(pd)); }
/// <summary> /// remove the menu, resize the window, remove border, and maximize /// </summary> public static void MakeWindowBorderless(ProcessDetails processDetails, MainWindow frmMain, IntPtr targetWindow, Rectangle targetFrame, Favorites.Favorite favDetails) { var isUnrealEngine = IsUnrealEngine(targetWindow); // Automatically match a window to favorite details, if that information is available. // Note: if one is not available, the default settings will be used as a new Favorite() object. // Automatically match this window to a process // Failsafe to prevent rapid switching, but also allow a few changes to the window handle (to be persistent) if (processDetails != null) { if (processDetails.MadeBorderless) { if ((processDetails.MadeBorderlessAttempts > 3) || (!processDetails.WindowHasTargetableStyles)) { return; } } } // If no target frame was specified, assume the entire space on the primary screen if ((targetFrame.Width == 0) || (targetFrame.Height == 0)) { targetFrame = Screen.FromHandle(targetWindow).Bounds; } // Get window styles var styleCurrentWindowStandard = Native.GetWindowLong(targetWindow, WindowLongIndex.Style); var styleCurrentWindowExtended = Native.GetWindowLong(targetWindow, WindowLongIndex.ExtendedStyle); // Compute new styles (XOR of the inverse of all the bits to filter) var styleNewWindowStandard = ( styleCurrentWindowStandard & ~( WindowStyleFlags.Caption // composite of Border and DialogFrame // | WindowStyleFlags.Border //| WindowStyleFlags.DialogFrame | WindowStyleFlags.ThickFrame | WindowStyleFlags.OverlappedWindow | WindowStyleFlags.SystemMenu | WindowStyleFlags.MaximizeBox // same as TabStop | WindowStyleFlags.MinimizeBox // same as Group ) ); var styleNewWindowExtended = ( styleCurrentWindowExtended & ~( WindowStyleFlags.ExtendedDlgModalFrame | WindowStyleFlags.ExtendedComposited | WindowStyleFlags.ExtendedWindowEdge | WindowStyleFlags.ExtendedClientEdge | WindowStyleFlags.ExtendedLayered | WindowStyleFlags.ExtendedStaticEdge | WindowStyleFlags.ExtendedToolWindow | WindowStyleFlags.ExtendedAppWindow ) ); // Should have process details by now if (processDetails != null) { // Save original details on this window so that we have a chance at undoing the process processDetails.OriginalStyleFlags_Standard = styleCurrentWindowStandard; processDetails.OriginalStyleFlags_Extended = styleCurrentWindowExtended; Native.GetWindowRect(processDetails.WindowHandle, out Native.Rect rect_temp); processDetails.OriginalLocation = new Rectangle(rect_temp.Left, rect_temp.Top, rect_temp.Right - rect_temp.Left, rect_temp.Bottom - rect_temp.Top); } // remove the menu and menuitems and force a redraw if (favDetails.RemoveMenus || isUnrealEngine) { // unfortunately, menus can't be re-added easily so they aren't removed by default anymore IntPtr menuHandle = Native.GetMenu(targetWindow); if (menuHandle != IntPtr.Zero) { int menuItemCount = Native.GetMenuItemCount(menuHandle); for (int i = 0; i < menuItemCount; i++) { Native.RemoveMenu(menuHandle, 0, MenuFlags.ByPosition | MenuFlags.Remove); } Native.DrawMenuBar(targetWindow); } } // auto-hide the Windows taskbar (do this before resizing the window) if (favDetails.HideWindowsTaskbar) { Native.ShowWindow(frmMain.Handle, WindowShowStyle.ShowNoActivate); if (frmMain.WindowState == FormWindowState.Minimized) { frmMain.WindowState = FormWindowState.Normal; } ToggleWindowsTaskbarVisibility(Tools.Boolstate.False); } // auto-hide the mouse cursor if (favDetails.HideMouseCursor) { ToggleMouseCursorVisibility(frmMain, Tools.Boolstate.False); } // update window position if (favDetails.SizeMode != Favorites.Favorite.SizeModes.NoChange) { if ((favDetails.SizeMode == Favorites.Favorite.SizeModes.FullScreen) || (favDetails.PositionW == 0) || (favDetails.PositionH == 0)) { // Set the window size to the biggest possible, using bounding adjustments Native.SetWindowPos ( targetWindow, 0, targetFrame.X + favDetails.OffsetL, targetFrame.Y + favDetails.OffsetT, targetFrame.Width - favDetails.OffsetL + favDetails.OffsetR, targetFrame.Height - favDetails.OffsetT + favDetails.OffsetB, SetWindowPosFlags.FrameChanged | SetWindowPosFlags.ShowWindow | SetWindowPosFlags.NoOwnerZOrder | SetWindowPosFlags.NoSendChanging ); // And auto-maximize if (favDetails.ShouldMaximize && !isUnrealEngine) { Native.ShowWindow(targetWindow, WindowShowStyle.Maximize); } } else { // Set the window size to the exact position specified by the user Native.SetWindowPos ( targetWindow, 0, favDetails.PositionX, favDetails.PositionY, favDetails.PositionW, favDetails.PositionH, SetWindowPosFlags.FrameChanged | SetWindowPosFlags.ShowWindow | SetWindowPosFlags.NoOwnerZOrder | SetWindowPosFlags.NoSendChanging ); } } // Set topmost if (favDetails.TopMost) { Native.SetWindowPos ( targetWindow, Native.HWND_TOPMOST, 0, 0, 0, 0, SetWindowPosFlags.FrameChanged | SetWindowPosFlags.ShowWindow | SetWindowPosFlags.NoMove | SetWindowPosFlags.NoSize | SetWindowPosFlags.NoSendChanging ); } //wait before applying styles if (isUnrealEngine) { Thread.Sleep(4200); } // update window styles Native.SetWindowLong(targetWindow, WindowLongIndex.Style, styleNewWindowStandard); Native.SetWindowLong(targetWindow, WindowLongIndex.ExtendedStyle, styleNewWindowExtended); // Make a note that we attempted to make the window borderless if (processDetails != null) { processDetails.MadeBorderless = true; processDetails.MadeBorderlessAttempts++; } if (Program.SteamLoaded) { BorderlessGamingSteam.Achievement_Unlock(0); } }
private void RefreshFavoritesList(Favorites.Favorite fav = null) { //refreshing is done through observables so this method just readds the favorite //to make it look like it updated and because i dont want to change all that code controller.Favorites.Add(fav); }
/// <summary> /// Sets up the Favorite-ContextMenu according to the current state /// </summary> private void mnuFavoritesContext_Opening(object sender, CancelEventArgs e) { if (lstFavorites.SelectedItem == null) { e.Cancel = true; return; } Favorites.Favorite fav = (Favorites.Favorite)lstFavorites.SelectedItem; fullScreenToolStripMenuItem.Checked = fav.SizeMode == Favorites.Favorite.SizeModes.FullScreen; automaximizeToolStripMenuItem.Checked = fav.ShouldMaximize; alwaysOnTopToolStripMenuItem.Checked = fav.TopMost; hideMouseCursorToolStripMenuItem.Checked = fav.HideMouseCursor; hideWindowsTaskbarToolStripMenuItem.Checked = fav.HideWindowsTaskbar; removeMenusToolStripMenuItem.Checked = fav.RemoveMenus; automaximizeToolStripMenuItem.Enabled = fav.SizeMode == Favorites.Favorite.SizeModes.FullScreen; adjustWindowBoundsToolStripMenuItem.Enabled = (fav.SizeMode == Favorites.Favorite.SizeModes.FullScreen) && (!fav.ShouldMaximize); setWindowSizeToolStripMenuItem.Enabled = fav.SizeMode != Favorites.Favorite.SizeModes.FullScreen; setWindowSizeToolStripMenuItem.Checked = fav.SizeMode == Favorites.Favorite.SizeModes.SpecificSize; noSizeChangeToolStripMenuItem.Checked = fav.SizeMode == Favorites.Favorite.SizeModes.NoChange; if (Screen.AllScreens.Length < 2) { contextFavScreen.Visible = false; } else { contextFavScreen.Visible = true; if (contextFavScreen.HasDropDownItems) { contextFavScreen.DropDownItems.Clear(); } Rectangle superSize = Screen.PrimaryScreen.Bounds; foreach (Screen screen in Screen.AllScreens) { superSize = Tools.GetContainingRectangle(superSize, screen.Bounds); // fix for a .net-bug on Windows XP int idx = screen.DeviceName.IndexOf('\0'); string fixedDeviceName = (idx > 0) ? screen.DeviceName.Substring(0, idx) : screen.DeviceName; string label = fixedDeviceName + ((screen.Primary) ? " (P)" : string.Empty); ToolStripMenuItem tsi = new ToolStripMenuItem(label); tsi.Checked = fav.favScreen.Equals(screen.Bounds); tsi.Click += (s, ea) => { if (tsi.Checked) { fav.favScreen = new Rectangle(); // Can't null a Rectangle, so can never fully un-favorite a screen without removing the favorite. } else { fav.favScreen = screen.Bounds; } controller.Favorites.Save(); }; contextFavScreen.DropDownItems.Add(tsi); } // add supersize Option ToolStripMenuItem superSizeItem = new ToolStripMenuItem("SuperSize!"); superSizeItem.Click += (s, ea) => { fav.favScreen = superSize; }; contextFavScreen.DropDownItems.Add(superSizeItem); } }