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?

User Image
Chris G1
86 discussion posts
Is there a way to have DisplayFusion restart a Windows service when the screen resolution changes or a monitor is connected?
Mar 11, 2023  • #1
User Image
Chris G1
86 discussion posts
I tried using something like this but it doesn't seem to work even if I add the .NET reference to System.ServiceProcess.dll

Code

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Management;
using System.ServiceProcess;

//Code brought to you by: solaris765
//Because numbers after my screen name are fun.
//Automatically changes Monitor Profile based on resolution changes.
//
// 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)
    {
        int maxHRes = getMaxResolution();
        BFS.Dialog.ShowMessageInfo(maxHRes.ToString());

        // default Resolution
        if (maxHRes == 1920)
        {
        RestartService("Start11");
        }

        // nVidia Surround / AMD Eyefinity
        else if (maxHRes > 1920)
        {
        RestartService("Start11");
        }
    }

    public static int getMaxResolution()
    {
        //Must include: using System.Management;

        ManagementScope scope = new ManagementScope();

        ObjectQuery query = new ObjectQuery("SELECT * FROM CIM_VideoControllerResolution");
        int hRes = 0;
        using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
        {
            ManagementObjectCollection results = searcher.Get();

            int temp;
            foreach (ManagementBaseObject result in results)
            {
                temp = Convert.ToInt32(result["HorizontalResolution"]);
                if (temp > hRes)
                hRes = temp;
            }
        }
        return hRes;
    }

    public static void RestartService(string serviceName)
    {
        ServiceController service = new ServiceController(serviceName);

        if (service.Status == ServiceControllerStatus.Running)
        {
            service.Stop();
            service.WaitForStatus(ServiceControllerStatus.Stopped, TimeSpan.FromSeconds(10));
        }

        service.Start();
        service.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromSeconds(10));
    }
}
Mar 11, 2023  • #2
Owen Muhlethaler (BFS)'s profile on WallpaperFusion.com
Is DisplayFusion running as administrator? To do this, you would need to create a .exe that can elevate, and then call it, as we can't elevate scripts.
Mar 14, 2023  • #3
Subscribe to this discussion topic using RSS
Was this helpful?  Login to Vote(-)  Login to Vote(-)