<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/">
<channel>
<title>DisplayFusion RSS: Screen fading on a schedule</title>
<atom:link href="https://www.displayfusion.com/Discussions/RSS/?TopicID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6" rel="self" type="application/rss+xml" />
<link>https://www.displayfusion.com/Discussions/RSS/?TopicID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6</link>
<description>DisplayFusion RSS: Screen fading on a schedule</description>
<lastBuildDate>Fri, 22 May 2026 21:59:42 GMT</lastBuildDate>
<language>en</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<generator>https://www.displayfusion.com/Discussions/RSS/?TopicID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6</generator>
<item>
<title>RE: Screen fading on a schedule</title>
<link>https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#11</link>
<pubDate>Fri, 12 Jul 2024 13:17:02 GMT</pubDate>
<dc:creator>Binary Fortress Software</dc:creator>
<guid isPermaLink="false">https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#11</guid>
<category>DisplayFusion</category>
<description><![CDATA[Yep we keep track of who has asked for what, so we can follow up if we add it in]]></description>
<content:encoded><![CDATA[<div class="CTDiscussions">
Yep we keep track of who has asked for what, so we can follow up if we add it in <img src="https://www.displayfusion.com/MediaCommon/SVGs/FontAwesome/face-smile.light.svg" alt=":)" style="box-sizing:border-box;position:relative;overflow:hidden;vertical-align:middle !important;width:16px;height:16px;" HelpButtonData=":)" HelpButtonDataAlign="BelowMiddle" />
</div>
]]></content:encoded>
</item>
<item>
<title>RE: Screen fading on a schedule</title>
<link>https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#10</link>
<pubDate>Thu, 11 Jul 2024 21:21:21 GMT</pubDate>
<dc:creator>Binary Fortress Software</dc:creator>
<guid isPermaLink="false">https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#10</guid>
<category>DisplayFusion</category>
<description><![CDATA[Thanks v.much Thomas for the scripts and Owen for notificaiton of this latest release.
Just out of interest... how do you know to come back to this thread to notify of this specific feature?  Is it done with tags?
Thanks
Al]]></description>
<content:encoded><![CDATA[<div class="CTDiscussions">
Thanks v.much Thomas for the scripts and Owen for notificaiton of this latest release.<br/>
<br/>
Just out of interest... how do you know to come back to this thread to notify of this specific feature?  Is it done with tags?<br/>
<br/>
Thanks<br/>
Al
</div>
]]></content:encoded>
</item>
<item>
<title>RE: Screen fading on a schedule</title>
<link>https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#9</link>
<pubDate>Wed, 26 Jun 2024 14:11:09 GMT</pubDate>
<dc:creator>Binary Fortress Software</dc:creator>
<guid isPermaLink="false">https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#9</guid>
<category>DisplayFusion</category>
<description><![CDATA[We've released a new beta that allows you set to a gradual fade time. You can grab it here: https://www.displayfusion.com/Download/Beta/
Thanks!]]></description>
<content:encoded><![CDATA[<div class="CTDiscussions">
We've released a new beta that allows you set to a gradual fade time. You can grab it here: <a href="https://www.displayfusion.com/Download/Beta/" target="_blank" rel="nofollow"><b>https://www.displayfusion.com/Download/Beta/</b></a><br/>
<br/>
Thanks!
</div>
]]></content:encoded>
</item>
<item>
<title>RE: Screen fading on a schedule</title>
<link>https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#8</link>
<pubDate>Mon, 04 Feb 2019 04:18:23 GMT</pubDate>
<dc:creator>Binary Fortress Software</dc:creator>
<guid isPermaLink="false">https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#8</guid>
<category>DisplayFusion</category>
<description><![CDATA[Sorry for the late response!
I was able to modify the script to be able to listen for the change of transparency value. The only downside is that you'll now need 3 scripts. One to toggle the dimming functionality and listen, another to increase the transparency value, and another to decrease it....]]></description>
<content:encoded><![CDATA[<div class="CTDiscussions">
<p>Sorry for the late response!</p>
<p>
I was able to modify the script to be able to listen for the change of transparency value. The only downside is that you'll now need 3 scripts. One to toggle the dimming functionality and listen, another to increase the transparency value, and another to decrease it.
</p>
<p>
Here's the first script:
</p>
<div class="col-md-12 BoxWrap"><div class="Box table-responsive"><a name="code" style="width:0; height:0;"></a><h2 class="TableTitle" style="border:0"><div class="TableTitleText">Code</div><div class="TitleButtons"><div class="TableTitleButton"><a href="#" onclick="return false;" data-clipboard-target="#code019e51b38ebf77169181f666ff23abe6" class="ClipboardCopyControl"><img src="https://www.displayfusion.com/MediaCommon/SVGs/FontAwesome/clone.blue.svg" style="box-sizing:border-box;position:relative;overflow:hidden;width:auto;max-width:16px;height:16px;" /><span class="Text">Copy</span></a></div><div class="TableTitleButton"><a href="#" onclick="bfs.util.codeEditorSelectAll('code019e51b38ebf77169181f666ff23abe6Js'); return false;"><img src="https://www.displayfusion.com/MediaCommon/SVGs/FontAwesome/square-check.blue.svg" style="box-sizing:border-box;position:relative;overflow:hidden;width:auto;max-width:16px;height:16px;" /><span class="Text">Select All</span></a></div></div></h2><div class="TableTitleContent table-responsive"><div class="AceEditorWrapper" style="border-top:solid 1px var(--color-default-border);padding:0"><pre id="code019e51b38ebf77169181f666ff23abe6Js" contenteditable="true" spellcheck="true" class="skiptranslate" style="width:100%; min-height:75px;">using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
using System.Collections.Generic;

// 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
{
    private static readonly string SettingName = "DimMonitor_TransparentForm_Running";
    private static readonly string TransparencySettingName = "DimMonitor_TransparentForm_TransparencyValue";
    public static void Run(IntPtr windowHandle)
    {
        // toggle the setting from running to not running, and vice versa
        ToggleSetting();
        
        // check to see if we should exit
        bool isExiting = !IsTransparentWindowRunning();
                
        // if we are exiting, exit
        if(isExiting)
            return;
            
        // get the transparency value. if there's none, set it to 30%
        decimal transparency = 30;
        if(new List&lt;string&gt;(BFS.ScriptSettings.GetValueNames()).Contains(TransparencySettingName))
            transparency = (decimal)BFS.ScriptSettings.ReadValueInt(TransparencySettingName);
        else
            BFS.ScriptSettings.WriteValueInt(TransparencySettingName, 30);
        
        // add all but the primary monitor to the list of monitors that will be dimmed
        List&lt;Form&gt; forms = new List&lt;Form&gt;();
        foreach(uint id in BFS.Monitor.GetMonitorIDs())
            forms.Add(new TransparentForm(id, transparency));
        
        // this will open the forms we added to the list by using our custom application context
        Application.Run(new MultipleFormApplicationContext(forms));
    }
    
    // this function toggles the script settings from running to not running
    private static void ToggleSetting()
    {
        string status = BFS.ScriptSettings.ReadValue(SettingName);
        if(status.Equals("running", StringComparison.Ordinal))
            BFS.ScriptSettings.WriteValue(SettingName, "not");
        else
            BFS.ScriptSettings.WriteValue(SettingName, "running");
    }
    
    // this function allows us to see the currect state of the script
    private static bool IsTransparentWindowRunning()
    {
        string status = BFS.ScriptSettings.ReadValue(SettingName);
        return status.Equals("running", StringComparison.Ordinal);
    }
    
    // extend the ApplicationContext class to support opening multiple forms
    private class MultipleFormApplicationContext : ApplicationContext 
    {
        internal MultipleFormApplicationContext(List&lt;Form&gt; forms)
        {
            //open each of the forms, and add our closing event to them
            foreach(Form form in forms)
            {
                form.FormClosed += OnFormClosed;
                form.Show();    
            }        
        }
        
        // when all the forms close, make sure to exit the application
        private void OnFormClosed(object sender, EventArgs e)
        {
            if(Application.OpenForms.Count == 0)
                ExitThread();
        }
    }
    
    // extend the Form class to get the behavior we want
    private class TransparentForm : Form 
    {
        // this will tell us what monitor to open on
        private uint MonitorId;
        
        // this will tell us what transparency to use
        private decimal LastTransparency;
        
        // this will help us with some threading
        private object ThreadLock = new object();
        
        // the contructor for our class
        internal TransparentForm(uint monitorId, decimal transparency)
        {        
            this.MonitorId = monitorId;
            lock(this.ThreadLock)
                this.LastTransparency = transparency;
            
            this.SuspendLayout();
            
            // setup the layout of this form
            this.BackColor = Color.Black;
            this.FormBorderStyle = FormBorderStyle.None;
            this.ShowInTaskbar = false;
            
            // setup the form load event
            this.Load += Form_Load;            
            
            this.ResumeLayout(false);
        }
        
        private void Form_Load(object sender, EventArgs e)
        {
            // set the window to be always on top
            BFS.Window.SetAlwaysOnTop(this.Handle, true);
            
            // make the window transparent
            lock(this.ThreadLock)
                BFS.Window.SetTransparency(this.Handle, this.LastTransparency);
            
            // add a windows style to the current style that will
            // tell this window to ignore user input
            uint style = (uint)BFS.Window.GetWindowStyleEx(this.Handle);
            BFS.Window.SetWindowStyleEx((BFS.WindowEnum.WindowStyleEx)(style | (uint)BFS.WindowEnum.WindowStyleEx.WS_EX_TRANSPARENT | (uint)BFS.WindowEnum.WindowStyleEx.WS_EX_LAYERED), this.Handle);
        
            // move the window to the desired monitor
            this.Bounds = BFS.Monitor.GetMonitorBoundsByID(this.MonitorId);
            
            // start up a thread to listen for an exit event
            new Thread(new ThreadStart(ExitListener)).Start();
        }
        
        private void ExitListener()
        {
            while(true)
            {
                // if we should close, tell the main thread to close the form
                if(!IsTransparentWindowRunning())
                {
                    try
                    {
                        this.Invoke((MethodInvoker) delegate
                        {
                            this.Close();
                        });
                    }
                    catch // something went wrong, ignore
                    {
                    }
                        
                    break;
                }
                
                // check to see if we need to update the transparency
                bool isNeedingToUpdateTransparency = false;
                int transparency = BFS.ScriptSettings.ReadValueInt(TransparencySettingName);
                lock(this.ThreadLock)
                {
                    if(transparency != (int)this.LastTransparency)
                    {  
                        this.LastTransparency = (decimal)transparency;
                        isNeedingToUpdateTransparency = true;
                    }
                }

                if(isNeedingToUpdateTransparency)
                {
                    decimal temp = (decimal)transparency;
                    this.Invoke((MethodInvoker) delegate
                    {
                        BFS.Window.SetTransparency(this.Handle, temp);
                    });
                }
                
                // sleep for a quarter of a second
                BFS.General.ThreadWait(250);
            }
        }
    }
}</pre><textarea id="code019e51b38ebf77169181f666ff23abe6" name="code019e51b38ebf77169181f666ff23abe6" style="position:absolute; top:0; left:-999999px; width:1px; height:1px;"></textarea></div>
</div></div></div>

<p>Here's the second that will increase the value:</p>
<div class="col-md-12 BoxWrap"><div class="Box table-responsive"><a name="code" style="width:0; height:0;"></a><h2 class="TableTitle" style="border:0"><div class="TableTitleText">Code</div><div class="TitleButtons"><div class="TableTitleButton"><a href="#" onclick="return false;" data-clipboard-target="#code019e51b38ec17036bf95e7f71a6f76e0" class="ClipboardCopyControl"><img src="https://www.displayfusion.com/MediaCommon/SVGs/FontAwesome/clone.blue.svg" style="box-sizing:border-box;position:relative;overflow:hidden;width:auto;max-width:16px;height:16px;" /><span class="Text">Copy</span></a></div><div class="TableTitleButton"><a href="#" onclick="bfs.util.codeEditorSelectAll('code019e51b38ec17036bf95e7f71a6f76e0Js'); return false;"><img src="https://www.displayfusion.com/MediaCommon/SVGs/FontAwesome/square-check.blue.svg" style="box-sizing:border-box;position:relative;overflow:hidden;width:auto;max-width:16px;height:16px;" /><span class="Text">Select All</span></a></div></div></h2><div class="TableTitleContent table-responsive"><div class="AceEditorWrapper" style="border-top:solid 1px var(--color-default-border);padding:0"><pre id="code019e51b38ec17036bf95e7f71a6f76e0Js" contenteditable="true" spellcheck="true" class="skiptranslate" style="width:100%; min-height:75px;">using System;
using System.Drawing;

// The 'windowHandle' parameter will contain the window handle for the:
//   - Active window when run by hotkey
//   - Trigger target when run by a Trigger 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
{
    private static readonly string TransparencySettingName = "DimMonitor_TransparentForm_TransparencyValue";
    public static void Run(IntPtr windowHandle)
    {
        int transparency = BFS.ScriptSettings.ReadValueInt(TransparencySettingName) + 5;
        if(transparency &gt; 100)
            transparency = 100;
            
        BFS.ScriptSettings.WriteValueInt(TransparencySettingName, transparency);
    }
}</pre><textarea id="code019e51b38ec17036bf95e7f71a6f76e0" name="code019e51b38ec17036bf95e7f71a6f76e0" style="position:absolute; top:0; left:-999999px; width:1px; height:1px;"></textarea></div>
</div></div></div>

<p>Here's the third that will decrease the value:</p>
<div class="col-md-12 BoxWrap"><div class="Box table-responsive"><a name="code" style="width:0; height:0;"></a><h2 class="TableTitle" style="border:0"><div class="TableTitleText">Code</div><div class="TitleButtons"><div class="TableTitleButton"><a href="#" onclick="return false;" data-clipboard-target="#code019e51b38ec375febfdba01063d17dbe" class="ClipboardCopyControl"><img src="https://www.displayfusion.com/MediaCommon/SVGs/FontAwesome/clone.blue.svg" style="box-sizing:border-box;position:relative;overflow:hidden;width:auto;max-width:16px;height:16px;" /><span class="Text">Copy</span></a></div><div class="TableTitleButton"><a href="#" onclick="bfs.util.codeEditorSelectAll('code019e51b38ec375febfdba01063d17dbeJs'); return false;"><img src="https://www.displayfusion.com/MediaCommon/SVGs/FontAwesome/square-check.blue.svg" style="box-sizing:border-box;position:relative;overflow:hidden;width:auto;max-width:16px;height:16px;" /><span class="Text">Select All</span></a></div></div></h2><div class="TableTitleContent table-responsive"><div class="AceEditorWrapper" style="border-top:solid 1px var(--color-default-border);padding:0"><pre id="code019e51b38ec375febfdba01063d17dbeJs" contenteditable="true" spellcheck="true" class="skiptranslate" style="width:100%; min-height:75px;">using System;
using System.Drawing;

// The 'windowHandle' parameter will contain the window handle for the:
//   - Active window when run by hotkey
//   - Trigger target when run by a Trigger 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
{
    private static readonly string TransparencySettingName = "DimMonitor_TransparentForm_TransparencyValue";
    public static void Run(IntPtr windowHandle)
    {
        int transparency = BFS.ScriptSettings.ReadValueInt(TransparencySettingName) - 5;
        if(transparency &lt; 0)
            transparency = 0;
            
        BFS.ScriptSettings.WriteValueInt(TransparencySettingName, transparency);
    }
}</pre><textarea id="code019e51b38ec375febfdba01063d17dbe" name="code019e51b38ec375febfdba01063d17dbe" style="position:absolute; top:0; left:-999999px; width:1px; height:1px;"></textarea></div>
</div></div></div>

<p>I hope this works for you!</p>
</div>
]]></content:encoded>
</item>
<item>
<title>RE: Screen fading on a schedule</title>
<link>https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#7</link>
<pubDate>Thu, 11 Oct 2018 19:48:06 GMT</pubDate>
<dc:creator>Binary Fortress Software</dc:creator>
<guid isPermaLink="false">https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#7</guid>
<category>DisplayFusion</category>
<description><![CDATA[I'll pass this over to Thomas to answer, as he was the original author of this script]]></description>
<content:encoded><![CDATA[<div class="CTDiscussions">
I'll pass this over to Thomas to answer, as he was the original author of this script <img src="https://www.displayfusion.com/MediaCommon/SVGs/FontAwesome/face-smile.light.svg" alt=":)" style="box-sizing:border-box;position:relative;overflow:hidden;vertical-align:middle !important;width:16px;height:16px;" HelpButtonData=":)" HelpButtonDataAlign="BelowMiddle" />
</div>
]]></content:encoded>
</item>
<item>
<title>RE: Screen fading on a schedule</title>
<link>https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#6</link>
<pubDate>Wed, 10 Oct 2018 00:24:38 GMT</pubDate>
<dc:creator>Binary Fortress Software</dc:creator>
<guid isPermaLink="false">https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#6</guid>
<category>DisplayFusion</category>
<description><![CDATA[Just a thought...
Would it be easy to get the script to read the previous transparency value and increase or decrease it by a set increment?
That way, I could have just two scripts to tun the brightness up & down
One that has a hotkey of something like
CTRL SHIFT  -
and another that has a ho...]]></description>
<content:encoded><![CDATA[<div class="CTDiscussions">
Just a thought... <br/>
<br/>
Would it be easy to get the script to read the previous transparency value and increase or decrease it by a set increment?<br/>
<br/>
That way, I could have just two scripts to tun the brightness up & down<br/>
<br/>
One that has a hotkey of something like<br/>
CTRL SHIFT  -<br/>
<br/>
and another that has a hotkey of<br/>
CTRL SHIFT +<br/>
<br/>
Any guidance appreciated<br/>
Al
</div>
]]></content:encoded>
</item>
<item>
<title>RE: Screen fading on a schedule</title>
<link>https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#5</link>
<pubDate>Wed, 10 Oct 2018 00:16:14 GMT</pubDate>
<dc:creator>Binary Fortress Software</dc:creator>
<guid isPermaLink="false">https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#5</guid>
<category>DisplayFusion</category>
<description><![CDATA[Hi Keith,
Please could you point out exactly where i need to change the transparency value and how to remove the screen chooser (as i always want all the monitors to fade.
Code
Copy
Select All
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
using S...]]></description>
<content:encoded><![CDATA[<div class="CTDiscussions">
Hi Keith,<br/>
<br/>
Please could you point out exactly where i need to change the transparency value and how to remove the screen chooser (as i always want all the monitors to fade.<br/>
<br/>
<div class="col-md-12 BoxWrap"><div class="Box table-responsive"><a name="code" style="width:0; height:0;"></a><h2 class="TableTitle" style="border:0"><div class="TableTitleText">Code</div><div class="TitleButtons"><div class="TableTitleButton"><a href="#" onclick="return false;" data-clipboard-target="#code019e51b38ed774aaa931056af01d24db" class="ClipboardCopyControl"><img src="https://www.displayfusion.com/MediaCommon/SVGs/FontAwesome/clone.blue.svg" style="box-sizing:border-box;position:relative;overflow:hidden;width:auto;max-width:16px;height:16px;" /><span class="Text">Copy</span></a></div><div class="TableTitleButton"><a href="#" onclick="bfs.util.codeEditorSelectAll('code019e51b38ed774aaa931056af01d24dbJs'); return false;"><img src="https://www.displayfusion.com/MediaCommon/SVGs/FontAwesome/square-check.blue.svg" style="box-sizing:border-box;position:relative;overflow:hidden;width:auto;max-width:16px;height:16px;" /><span class="Text">Select All</span></a></div></div></h2><div class="TableTitleContent table-responsive"><div class="AceEditorWrapper" style="border-top:solid 1px var(--color-default-border);padding:0"><pre id="code019e51b38ed774aaa931056af01d24dbJs" contenteditable="true" spellcheck="true" class="skiptranslate" style="width:100%; min-height:75px;">using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
using System.Collections.Generic;

// Based entirely on NetMage's "Fade All Monitors Except the Primary Monitor to Black" which was based on Thomas' "Dim All Monitors Except Primary"

public static class DisplayFusionFunction {
    private static readonly string SettingName = "BlackenMonitors_Run";
    public static void Run(IntPtr windowHandle) {
        //toggle the setting from running to not running, and vice versa
        ToggleSetting();

        if (RunFadeMonitors()) {
            //add the selected monitor to the form
            var forms = new List&lt;Form&gt;();
            forms.Add(new TransparentForm(BFS.Monitor.ShowMonitorSelector()));
        
            //this will open the forms we added to the list by using our custom application context
            Application.Run(new MultipleFormApplicationContext(forms));
        }
    }
    
    //this function allows us to see the currect state of the script
    private static bool RunFadeMonitors() {
        return BFS.ScriptSettings.ReadValue(SettingName) == "run";
    }

    //this function toggles the script settings from running to not running
    private static void ToggleSetting() {
        BFS.ScriptSettings.WriteValue(SettingName, RunFadeMonitors() ? "not" : "run");
    }

    //extend the ApplicationContext class to support opening multiple forms
    private class MultipleFormApplicationContext : ApplicationContext {
        internal MultipleFormApplicationContext(List&lt;Form&gt; forms) {
            //open each of the forms, and add our closing event to them
            foreach(Form form in forms) {
                form.FormClosed += OnFormClosed;
                form.Show();
            }
        }

        //when all the forms close, make sure to exit the application
        private void OnFormClosed(object sender, EventArgs e) {
            if(Application.OpenForms.Count == 0)
                ExitThread();
        }
    }
    
    //extend the Form class to get the behavior we want
    private class TransparentForm : Form {
        //this will tell us what monitor to open on
        private uint MonitorId;
        private uint FadeWait;
        private decimal TransparentIncrement;
        
        //this will tell us our current transparency
        private decimal Transparency;
        
        //the contructor for our class
        internal TransparentForm(uint monitorId) {        
            MonitorId = monitorId;
            Transparency = 0m;
            const decimal FadeTime = 2.0m; // seconds
            TransparentIncrement = 1m; // percent
            FadeWait = (uint)(TransparentIncrement * 10m * FadeTime);
            
            SuspendLayout();
            
            //setup the layout of this form
            BackColor = Color.Black;
            FormBorderStyle = FormBorderStyle.None;
            ShowInTaskbar = false;
            //move the window to the desired monitor
            Rectangle bounds = BFS.Monitor.GetMonitorBoundsByID(MonitorId);
            Location = new Point(bounds.X, bounds.Y);
            Size = new Size(bounds.Width, bounds.Height);
            StartPosition = FormStartPosition.Manual;
            
            BFS.Window.SetAlwaysOnTop(Handle, true);
            BFS.Window.SetTransparency(Handle, Transparency);

            //setup the form load event
            Load += Form_Load;            
            
            ResumeLayout(false);
        }
        
        private void Form_Load(object sender, EventArgs e) {
            //add a windows style to the current style that will
            //tell this window to ignore user input
            uint style = (uint)BFS.Window.GetWindowStyleEx(Handle) | (uint)BFS.WindowEnum.WindowStyleEx.WS_EX_TRANSPARENT | (uint)BFS.WindowEnum.WindowStyleEx.WS_EX_LAYERED;
            BFS.Window.SetWindowStyleEx((BFS.WindowEnum.WindowStyleEx)style, Handle);
            
            //start up a thread to listen for an exit event
            new Thread(new ThreadStart(ExitListener)).Start();
        }

        private void ExitListener() {
            while(true) {
                //if we should close, tell the main thread to close the form
                if(RunFadeMonitors()) {
                    // Fade to Black
                    if (Transparency &lt; 100m) {
                        Transparency += TransparentIncrement;
                        BFS.Window.SetTransparency(Handle, Transparency);
                    }

                    //sleep
                    BFS.General.ThreadWait((Transparency &lt; 100m) ? FadeWait : 250u);                
                }
                else {
                    if (this.Transparency &gt; 0m) {
                        // Fade back in
                        Transparency -= TransparentIncrement;
                        BFS.Window.SetTransparency(Handle, Transparency);

                        //sleep
                        BFS.General.ThreadWait((Transparency &lt; 100m) ? FadeWait : 250u);
                    }
                    else {
                        try {
                            this.Invoke((MethodInvoker) delegate {
                                Close();
                            });
                        }
                        catch { //something went wrong, ignore
                        }
                        
                        break;
                    }
                }
            }
        }
    }
}</pre><textarea id="code019e51b38ed774aaa931056af01d24db" name="code019e51b38ed774aaa931056af01d24db" style="position:absolute; top:0; left:-999999px; width:1px; height:1px;"></textarea></div>
</div></div></div><br/>
<br/>
Many thanks in advance<br/>
<br/>
Al
</div>
]]></content:encoded>
</item>
<item>
<title>RE: Screen fading on a schedule</title>
<link>https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#4</link>
<pubDate>Sat, 28 Oct 2017 00:33:23 GMT</pubDate>
<dc:creator>Binary Fortress Software</dc:creator>
<guid isPermaLink="false">https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#4</guid>
<category>DisplayFusion</category>
<description><![CDATA[Thanks for the feedback, guys! Scheduling will be coming hopefully in the next major version. In the meantime, you could duplicate my script, change the fading level in it, and then call whichever one you need via DisplayFusionCommand.exe like so:
"C:\Program Files (x86)\DisplayFusion\DisplayFus...]]></description>
<content:encoded><![CDATA[<div class="CTDiscussions">
Thanks for the feedback, guys! Scheduling will be coming hopefully in the next major version. In the meantime, you could duplicate my script, change the fading level in it, and then call whichever one you need via DisplayFusionCommand.exe like so:<br/>
<br/>
"C:\Program Files (x86)\DisplayFusion\DisplayFusionCommand" -functionrun "ScriptedFunctionName"<br/>
<br/>
Hope that helps!
</div>
]]></content:encoded>
</item>
<item>
<title>RE: Screen fading on a schedule</title>
<link>https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#3</link>
<pubDate>Thu, 26 Oct 2017 19:09:27 GMT</pubDate>
<dc:creator>Binary Fortress Software</dc:creator>
<guid isPermaLink="false">https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#3</guid>
<category>DisplayFusion</category>
<description><![CDATA[It sounds like similar functionality to F.lux (scheduled fade times / duration), though not as advanced as what you have set up (kudos on that, btw!)  What you are requesting would be a great feature, then I could stop using F.lux and Palingo.
I would also like to add upon this request - It woul...]]></description>
<content:encoded><![CDATA[<div class="CTDiscussions">
It sounds like similar functionality to F.lux (scheduled fade times / duration), though not as advanced as what you have set up (kudos on that, btw!)  What you are requesting would be a great feature, then I could stop using F.lux and Palingo.<br/>
<br/>
I would also like to add upon this request - It would be nice to have a quick control for changing the dimming percentage, like Palingo does, in the taskbar (fader or a list of values would be nice), since at times, during the faded period, it is necessary to disable / adjust the fade quickly.<br/>
<br/>
Finally, a quick fade from brightness levels (from 100% to 50%, for example) in increments of 10% over 5 seconds would be much nicer on the eyes, rather than a quick 'bam' from 100% to 50%.  This is most noticeable when fading the non-active window and switching between them.
</div>
]]></content:encoded>
</item>
<item>
<title>RE: Screen fading on a schedule</title>
<link>https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#2</link>
<pubDate>Thu, 26 Oct 2017 18:46:55 GMT</pubDate>
<dc:creator>Binary Fortress Software</dc:creator>
<guid isPermaLink="false">https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6#2</guid>
<category>DisplayFusion</category>
<description><![CDATA[PS: It would be great to see some scheduling options in the Fading GUI (and perhaps even some ability to link it to the sunset / sunrise data from weather.com based on your nearest city)
I wish I was clever enough to write a function for this, alas I'm not; so it's a suggestion for a future release]]></description>
<content:encoded><![CDATA[<div class="CTDiscussions">
PS: It would be great to see some scheduling options in the Fading GUI (and perhaps even some ability to link it to the sunset / sunrise data from weather.com based on your nearest city) <br/>
<br/>
I wish I was clever enough to write a function for this, alas I'm not; so it's a suggestion for a future release <img src="https://www.displayfusion.com/MediaCommon/SVGs/FontAwesome/face-smile.light.svg" alt=":)" style="box-sizing:border-box;position:relative;overflow:hidden;vertical-align:middle !important;width:16px;height:16px;" HelpButtonData=":)" HelpButtonDataAlign="BelowMiddle" />
</div>
]]></content:encoded>
</item>
<item>
<title>Screen fading on a schedule</title>
<link>https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6</link>
<pubDate>Thu, 26 Oct 2017 18:38:32 GMT</pubDate>
<dc:creator>Binary Fortress Software</dc:creator>
<guid isPermaLink="false">https://www.displayfusion.com/Discussions/View/screen-fading-on-a-schedule/?ID=d36bc03f-48bd-40a0-8bda-eb4fabc25be6</guid>
<category>DisplayFusion</category>
<description><![CDATA[Hi,
I'm delighted to see the inclusion of screen fading GUI in the latest release of DF.
(which is great, the only bug so far is the dimming flickers when Windows system notifications appear).
I work in a conservatory, so my monitors need to be full brightness during the day, gradually fading ...]]></description>
<content:encoded><![CDATA[<div class="CTDiscussions">
Hi,<br/>
<br/>
I'm delighted to see the inclusion of screen fading GUI in the latest release of DF.<br/>
(which is great, the only bug so far is the dimming flickers when Windows system notifications appear).<br/>
<br/>
I work in a conservatory, so my monitors need to be full brightness during the day, gradually fading as it turns to dusk.<br/>
<br/>
I've been using a piece of software called "Pangolin Screen Brightness" to control this for years.  Its a very simple app, so I had to string together batch scripts which altered the registry entry for the dimming value.  This was a belts & braces approach but it worked.<br/>
<br/>
Now I'm looking to replicate this in DF. I have seen there are a few functions already scripted (such as "<i>Fade Selected Monitor to Black</i>" by BF's very own Keith Lammers) which presumably could be altered to dim all screens.  Its the scheduling I need some advice on please:<br/>
<br/>
SIMPLE APPROACH:<br/>
Is it possible to schedule the dimming level to change at set times of the day using functions?<br/>
<br/>
ADVANCED APPROACH:<br/>
I use a Z-Wave multi sensor to detect the light level in my conservatory (this alters sporadically due to the cloud cover, rain etc).  I use Event Ghost to perform actions when the light levels rise / fall above certain thresholds*.  Can I somehow make a procedure call (or command line call etc) to trigger a function to change the dimming level?<br/>
<br/>
Thanks in advance for any advice.<br/>
<br/>
Regards<br/>
Al<br/>
<br/>
* For anybody who's interested; I use a SmartApp within the Samsung SmartThings IDE to automatically make a HTTP call to Event Ghost on my PC when the light sensor reaches certain levels.  EvenGhost can then run a batch / call or whatever's needed to interface with Display Fusion.
</div>
]]></content:encoded>
</item>
</channel>
</rss>