Processing Ajax...

Title
Close Dialog

Message

Confirm
Close Dialog

Confirm
Close Dialog

Confirm
Close Dialog

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
orlando2bjr
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);
	}
}