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