Processing Ajax...

Title

Message

Confirm

Confirm

Confirm

Confirm

Are you sure you want to delete this item?

Confirm

Are you sure you want to delete this item?

Switch Monitor Profiles and Launch Steam in Big Picture Mode

Description
This script will load a Monitor Profile, kill Steam and re-launch it in Big Picture Mode. When you exit Big Picture Mode, it will switch the Monitor Profile back, kill Steam, and re-launch it in normal mode.
Language
C#.net
Minimum Version
Created By
orlando2b
Contributors
Owen Muhlethaler (BFS)
Date Created
Jul 24, 2015
Date Last Modified
Jan 11, 2023

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)
	{
		//replace these variables with ones that will work on your system
		string defaultProfile = "Office w/ Splits";
		string bigPictureProfile = "Middle Only";
		string steamDirectory = @"C:\\Program Files (x86)\\Steam\\Steam.exe";
		const int waitForever = 0;
		
		// get current profile name
		string currentProfileName = BFS.DisplayFusion.GetCurrentMonitorProfile();
		if(currentProfileName == "")
			currentProfileName = defaultProfile;

		// close Steam if it is running
		uint steamID;
		bool wasSteamRunning = BFS.Application.IsAppRunningByFile("*Steam.exe");
		if(wasSteamRunning)
		{
			steamID = BFS.Application.GetAppIDByFile("*Steam.exe");
			BFS.Application.Kill(steamID);
			
			// wait for Steam to exit
			BFS.Application.WaitForExitByAppID(steamID, waitForever);
		}

		// wake up the monitors
		BFS.General.WakeMonitors();
		
		// load the big picture monitor profile and wait for it to switch
		BFS.DisplayFusion.LoadMonitorProfile(bigPictureProfile);
		string profileName = BFS.DisplayFusion.GetCurrentMonitorProfile();
		while(!profileName.Equals(bigPictureProfile, StringComparison.OrdinalIgnoreCase))
		{			
			BFS.General.ThreadWait(100);
			profileName = BFS.DisplayFusion.GetCurrentMonitorProfile();
		}

		// start Steam in Big Picture mode
		steamID = BFS.Application.Start(steamDirectory, "-bigpicture");

		// wait for Steam to exit
		BFS.Application.WaitForExitByAppID(steamID, waitForever);
		
		// restart Steam in normal mode
		if(wasSteamRunning)
			BFS.Application.Start(steamDirectory, "");

		// wake up the monitors
		BFS.General.WakeMonitors();
		
		// load the last running monitor profile and wait for it to switch
		BFS.DisplayFusion.LoadMonitorProfile(currentProfileName);
	}
}