Processing Ajax...

Title
Close Dialog

Message

Confirm
Close Dialog

Confirm
Close Dialog

Ultra Wide Borderless Fullscreen

Description
Allows Borderless Fullscreen on some games with an ultra wide setup without Nvidia Surround or Eyefinity. For the best results try adding a custom resolution for the main monitor of 5760x1080 and setting the game to windowed with that resolution and then using this script.
Language
C#.net
Minimum Version
Created By
Bastani
Contributors
-
Date Created
Nov 21, 2016
Date Last Modified
Nov 21, 2016

Scripted Function (Macro) Code

using System;
using System.Drawing;

// The 'windowHandle' parameter will contain the window handle for the:
//   - Active window when run by hotkey
//   - Window Location target when run by a Window Location rule
//   - TitleBar Button owner when run by a TitleBar Button
//   - Jump List owner when run from a Taskbar Jump List
//   - Currently focused window if none of these match
public static class DisplayFusionFunction
{
	public static void Run(IntPtr windowHandle)
	{
		//get the window styles
		BFS.WindowEnum.WindowStyle style = BFS.Window.GetWindowStyle(windowHandle);
		
		//if the window has any borders and titles, make it full screen
		if(BFS.Window.HasWindowStyle(BFS.WindowEnum.WindowStyle.WS_CAPTION, windowHandle) ||
			BFS.Window.HasWindowStyle(BFS.WindowEnum.WindowStyle.WS_SYSMENU, windowHandle) ||
			BFS.Window.HasWindowStyle(BFS.WindowEnum.WindowStyle.WS_THICKFRAME__SIZEBOX, windowHandle) ||
			BFS.Window.HasWindowStyle(BFS.WindowEnum.WindowStyle.WS_MINIMIZEBOX, windowHandle) ||
			BFS.Window.HasWindowStyle(BFS.WindowEnum.WindowStyle.WS_MAXIMIZEBOX, windowHandle))
		{
			//save the size and position of the window
			SaveWindowSize(windowHandle);
			
			//make sure to remove the styles. just toggling these settings may turn on something we dont want
			style &= ~BFS.WindowEnum.WindowStyle.WS_CAPTION;
			style &= ~BFS.WindowEnum.WindowStyle.WS_SYSMENU;
			style &= ~BFS.WindowEnum.WindowStyle.WS_THICKFRAME__SIZEBOX;
			style &= ~BFS.WindowEnum.WindowStyle.WS_MINIMIZEBOX;
			
			//add Maximize Window in case it doesn't exist (needs to be done due to bug with DisplayFusion)
			style |= BFS.WindowEnum.WindowStyle.WS_MAXIMIZEBOX;
			
			//set the window style
			BFS.Window.SetWindowStyle(style, windowHandle);
			
		
			//get the bounds of the monitor that the window is in
			Rectangle bounds = BFS.Monitor.GetMonitorBoundsByWindow(windowHandle);
			
			//size and position the window to be fullscreen within the monitor
			BFS.Window.SetSizeAndLocation(windowHandle, -1920, 0, 5760, 1080);
			
			//remove Maximize Window
			style &= ~BFS.WindowEnum.WindowStyle.WS_MAXIMIZEBOX;
			BFS.Window.SetWindowStyle(style, windowHandle);
		}
		else
		{
			//if we got here, then the window must already be fullscreen.
			//add non-fullscreen styles back to the window
			style |= BFS.WindowEnum.WindowStyle.WS_CAPTION;
			style |= BFS.WindowEnum.WindowStyle.WS_SYSMENU;
			style |= BFS.WindowEnum.WindowStyle.WS_THICKFRAME__SIZEBOX;
			style |= BFS.WindowEnum.WindowStyle.WS_MINIMIZEBOX;
			style |= BFS.WindowEnum.WindowStyle.WS_MAXIMIZEBOX;
			
			//try and load saved window size and position
			bool isMaximized;
			Rectangle bounds = GetSavedWindowSize(windowHandle, out isMaximized);
			
			//set the window style
			BFS.Window.SetWindowStyle(style, windowHandle);
			
			//if we couldnt load the size, exit the script
			if(bounds.Equals(Rectangle.Empty))
				return;
				
			//if the window was maximized, maximize it, otherwise set the window size and location with the values we loaded
			if(isMaximized)
				BFS.Window.Maximize(windowHandle);
			else
				BFS.Window.SetSizeAndLocation(windowHandle, bounds.X, bounds.Y, bounds.Width, bounds.Height);
		}
	}
	
	//this is a function that will save the window size and position in window properties
	private static void SaveWindowSize(IntPtr windowHandle)
	{
		Rectangle bounds = BFS.Window.GetBounds(windowHandle);
		BFS.Window.SetWindowProperty(windowHandle, "ToggleFullscreen_X", new IntPtr(bounds.X));
		BFS.Window.SetWindowProperty(windowHandle, "ToggleFullscreen_Y", new IntPtr(bounds.Y));
		BFS.Window.SetWindowProperty(windowHandle, "ToggleFullscreen_Width", new IntPtr(bounds.Width));
		BFS.Window.SetWindowProperty(windowHandle, "ToggleFullscreen_Height", new IntPtr(bounds.Height));
		BFS.Window.SetWindowProperty(windowHandle, "ToggleFullscreen_IsMaximized", new IntPtr(BFS.Window.IsMaximized(windowHandle) ? 1 : 0));
	}
	
	private static Rectangle GetSavedWindowSize(IntPtr windowHandle, out bool isMaximized)
	{
		Rectangle bounds = new Rectangle();
		bounds.X = BFS.Window.GetWindowProperty(windowHandle, "ToggleFullscreen_X").ToInt32();
		bounds.Y = BFS.Window.GetWindowProperty(windowHandle, "ToggleFullscreen_Y").ToInt32();
		bounds.Width = BFS.Window.GetWindowProperty(windowHandle, "ToggleFullscreen_Width").ToInt32();
		bounds.Height = BFS.Window.GetWindowProperty(windowHandle, "ToggleFullscreen_Height").ToInt32();
		isMaximized = (BFS.Window.GetWindowProperty(windowHandle, "ToggleFullscreen_IsMaximized").ToInt32() == 1);
		return bounds;
	}
}