Processing Ajax...

Title
Close Dialog

Message

Confirm
Close Dialog

Confirm
Close Dialog

Detect SteamBP and switch Profile

Description
A modification of orlando2bjr's Script to detect Steam Big Picture and make the change. Rather then manually running it
Language
C#.net
Minimum Version
Created By
solaris765
Contributors
-
Date Created
Mar 21, 2018
Date Last Modified
Mar 21, 2018

Scripted Function (Macro) Code

using System;
using System.Drawing;
using System.Runtime.InteropServices;

//
// Modification of "Switch Monitor Profiles and Launch Steam in Big Picture Mode" by: orlando2bjr
//
// 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
{
    //replace these variables with ones that will work on your system
	const string defaultProfile = "[your default profile]";
	const string bigPictureProfile = "[your big picture profile]";
	
	public static void Run(IntPtr windowHandle)
	{
        while (true)
        {
            if (IsBigPictureRunning())
            {
                SteamBP();
            }
            else
            {
                DefaultProfile();
            }
            
            System.Threading.Thread.Sleep(5000);
		}
	}
	
	[DllImport("user32.dll",EntryPoint="FindWindow")]
    private static extern int FindWindow(string sClass, string sWindow);

    private static bool IsBigPictureRunning()
    {
        return FindWindow("CUIEngineWin32", "Steam") != 0;
    }
	
	private static void SteamBP()
	{
        // 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();
		}
	}
	
	private static void DefaultProfile()
	{
        // wake up the monitors
		BFS.General.WakeMonitors();
		
		// load the last running monitor profile and wait for it to switch
		BFS.DisplayFusion.LoadMonitorProfile(defaultProfile);
	}
}