diff --git a/ASUSWmi.cs b/ASUSWmi.cs index 3e3395f4..08c61c51 100644 --- a/ASUSWmi.cs +++ b/ASUSWmi.cs @@ -1,5 +1,6 @@ using System.Management; using System.Runtime.InteropServices; +using System.Diagnostics; public class ASUSWmi { @@ -115,7 +116,7 @@ public class ASUSWmi BitConverter.GetBytes((uint)args.Length).CopyTo(acpiBuf, 4); Array.Copy(args, 0, acpiBuf, 8, args.Length); - Console.WriteLine(BitConverter.ToString(acpiBuf, 0, acpiBuf.Length)); + //Debug.WriteLine(BitConverter.ToString(acpiBuf, 0, acpiBuf.Length)); Control(CONTROL_CODE, acpiBuf, outBuffer); @@ -149,7 +150,7 @@ public class ASUSWmi return BitConverter.ToInt32(status, 0) - 65536; } - public byte[] DeviceGetBuffer(uint DeviceID, int Status = 0) + public byte[] DeviceGetBuffer(uint DeviceID, uint Status = 0) { byte[] args = new byte[8]; BitConverter.GetBytes((uint)DeviceID).CopyTo(args, 0); @@ -158,17 +159,31 @@ public class ASUSWmi } - public void SetFanCurve(byte[] curve) + public void SetFanCurve(int device, byte[] curve) { - DeviceSet(DevsCPUFanCurve, curve); + if (device == 1) + DeviceSet(DevsGPUFanCurve, curve); + else + DeviceSet(DevsCPUFanCurve, curve); } - public byte[] GetFanCurve(int mode = 0) + public byte[] GetFanCurve(int device, int mode = 0) { - if (mode == 1) mode = 2; - if (mode == 2) mode = 1; // because it's asus, and modes are swapped here + uint fan_mode; + + // because it's asus, and modes are swapped here + switch (mode) + { + case 1:fan_mode = 2; break; + case 2: fan_mode = 1; break; + default: fan_mode = 0; break; + } + + if (device == 1) + return DeviceGetBuffer(DevsGPUFanCurve, fan_mode); + else + return DeviceGetBuffer(DevsCPUFanCurve, fan_mode); - return DeviceGetBuffer(DevsCPUFanCurve, mode); } diff --git a/Aura.cs b/Aura.cs new file mode 100644 index 00000000..7ad3dcb7 --- /dev/null +++ b/Aura.cs @@ -0,0 +1,68 @@ +using HidLibrary; + +public class Aura +{ + + static byte[] MESSAGE_SET = { 0x5d, 0xb5 }; + static byte[] MESSAGE_APPLY = { 0x5d, 0xb4 }; + + public const int Static = 0; + public const int Breathe = 1; + public const int Strobe = 2; + public const int Rainbow = 3; + public const int Dingding = 10; + + public const int SpeedSlow = 0; + public const int SpeedMedium = 1; + public const int SpeedHigh = 2; + + public static int Mode = Static; + public static Color Color1 = Color.White; + public static Color Color2 = Color.Black; + public static int Speed = SpeedSlow; + + public static byte[] AuraMessage(int mode, Color color, Color color2, int speed) + { + byte[] msg = new byte[17]; + msg[0] = 0x5d; + msg[1] = 0xb3; + msg[2] = 0x00; // Zone + msg[3] = (byte)mode; // Aura Mode + msg[4] = (byte)(color.R); // R + msg[5] = (byte)(color.G); // G + msg[6] = (byte)(color.B); // B + msg[7] = (byte)speed; // aura.speed as u8; + msg[8] = 0; // aura.direction as u8; + msg[10] = (byte)(color2.R); // R + msg[11] = (byte)(color2.G); // G + msg[12] = (byte)(color2.B); // B + return msg; + } + + public static void ApplyAura() + { + + HidDevice[] HidDeviceList; + int[] deviceIds = { 0x1854, 0x1869, 0x1866, 0x19b6 }; + + HidDeviceList = HidDevices.Enumerate(0x0b05, deviceIds).ToArray(); + + foreach (HidDevice device in HidDeviceList) + { + if (device.IsConnected) + { + if (device.Description.IndexOf("HID") >= 0) + { + device.OpenDevice(); + byte[] msg = AuraMessage(Mode, Color1, Color2, Speed); + device.Write(msg); + device.Write(MESSAGE_SET); + device.Write(MESSAGE_APPLY); + device.CloseDevice(); + } + + } + } + + } +} diff --git a/Fans.Designer.cs b/Fans.Designer.cs new file mode 100644 index 00000000..de4656b7 --- /dev/null +++ b/Fans.Designer.cs @@ -0,0 +1,125 @@ +namespace GHelper +{ + partial class Fans + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend(); + System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend(); + System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series(); + chartCPU = new System.Windows.Forms.DataVisualization.Charting.Chart(); + buttonApply = new Button(); + buttonReset = new Button(); + chartGPU = new System.Windows.Forms.DataVisualization.Charting.Chart(); + ((System.ComponentModel.ISupportInitialize)chartCPU).BeginInit(); + ((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit(); + SuspendLayout(); + // + // chartCPU + // + chartArea1.Name = "ChartArea1"; + chartCPU.ChartAreas.Add(chartArea1); + legend1.Name = "Legend1"; + chartCPU.Legends.Add(legend1); + chartCPU.Location = new Point(16, 13); + chartCPU.Name = "chartCPU"; + series1.ChartArea = "ChartArea1"; + series1.Legend = "Legend1"; + series1.Name = "Series1"; + chartCPU.Series.Add(series1); + chartCPU.Size = new Size(900, 446); + chartCPU.TabIndex = 0; + chartCPU.Text = "chartCPU"; + // + // buttonApply + // + buttonApply.Location = new Point(662, 944); + buttonApply.Name = "buttonApply"; + buttonApply.Size = new Size(254, 46); + buttonApply.TabIndex = 1; + buttonApply.Text = "Apply Fan Curve"; + buttonApply.UseVisualStyleBackColor = true; + // + // buttonReset + // + buttonReset.Location = new Point(402, 944); + buttonReset.Name = "buttonReset"; + buttonReset.Size = new Size(254, 46); + buttonReset.TabIndex = 2; + buttonReset.Text = "Load Default"; + buttonReset.UseVisualStyleBackColor = true; + // + // chartGPU + // + chartArea2.Name = "ChartArea1"; + chartGPU.ChartAreas.Add(chartArea2); + legend2.Name = "Legend1"; + chartGPU.Legends.Add(legend2); + chartGPU.Location = new Point(16, 477); + chartGPU.Name = "chartGPU"; + series2.ChartArea = "ChartArea1"; + series2.Legend = "Legend1"; + series2.Name = "Series1"; + chartGPU.Series.Add(series2); + chartGPU.Size = new Size(900, 448); + chartGPU.TabIndex = 3; + chartGPU.Text = "chart1"; + // + // Fans + // + AutoScaleDimensions = new SizeF(13F, 32F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(940, 1020); + Controls.Add(chartGPU); + Controls.Add(buttonReset); + Controls.Add(buttonApply); + Controls.Add(chartCPU); + FormBorderStyle = FormBorderStyle.FixedSingle; + MaximizeBox = false; + MdiChildrenMinimizedAnchorBottom = false; + MinimizeBox = false; + Name = "Fans"; + ShowIcon = false; + ShowInTaskbar = false; + StartPosition = FormStartPosition.CenterScreen; + Text = "Fans"; + ((System.ComponentModel.ISupportInitialize)chartCPU).EndInit(); + ((System.ComponentModel.ISupportInitialize)chartGPU).EndInit(); + ResumeLayout(false); + } + + #endregion + + private System.Windows.Forms.DataVisualization.Charting.Chart chartCPU; + private Button buttonApply; + private Button buttonReset; + private System.Windows.Forms.DataVisualization.Charting.Chart chartGPU; + } +} \ No newline at end of file diff --git a/Fans.cs b/Fans.cs new file mode 100644 index 00000000..e7552880 --- /dev/null +++ b/Fans.cs @@ -0,0 +1,185 @@ +using System; +using System.Diagnostics; +using System.Windows.Forms.DataVisualization.Charting; + +namespace GHelper +{ + public partial class Fans : Form + { + + DataPoint curPoint = null; + Series seriesCPU; + Series seriesGPU; + + void SetChart(Chart chart, string title) + { + chart.Titles.Add(title); + chart.ChartAreas[0].AxisX.Minimum = 10; + chart.ChartAreas[0].AxisX.Maximum = 100; + chart.ChartAreas[0].AxisX.Interval = 10; + chart.ChartAreas[0].AxisY.Minimum = 0; + chart.ChartAreas[0].AxisY.Maximum = 100; + chart.Legends[0].Enabled = false; + + } + + public Fans() + { + InitializeComponent(); + + SetChart(chartCPU, "CPU Fan Profile"); + SetChart(chartGPU, "GPU Fan Profile"); + + seriesCPU = chartCPU.Series.Add("CPU"); + seriesGPU = chartGPU.Series.Add("GPU"); + + seriesCPU.Color = Color.Blue; + seriesGPU.Color = Color.Red; + + LoadFans(); + + chartCPU.MouseMove += ChartCPU_MouseMove; + chartCPU.MouseUp += ChartCPU_MouseUp; + + chartGPU.MouseMove += ChartCPU_MouseMove; + chartGPU.MouseUp += ChartCPU_MouseUp; + + buttonReset.Click += ButtonReset_Click; + buttonApply.Click += ButtonApply_Click; + + } + + public void LoadFans() + { + LoadProfile(seriesCPU, 0); + LoadProfile(seriesGPU, 1); + } + + byte[] StringToBytes(string str) + { + String[] arr = str.Split('-'); + byte[] array = new byte[arr.Length]; + for (int i = 0; i < arr.Length; i++) array[i] = Convert.ToByte(arr[i], 16); + return array; + } + + string GetFanName(int device) + { + int mode = Program.config.getConfig("performance_mode"); + string name; + + if (device == 1) + name = "gpu"; + else + name = "cpu"; + + return "fan_profile_" + name + "_" + mode; + } + + void LoadProfile(Series series, int device, int def = 0) + { + + series.ChartType = SeriesChartType.Line; + series.MarkerSize = 10; + series.MarkerStyle = MarkerStyle.Circle; + + series.Points.Clear(); + + int mode = Program.config.getConfig("performance_mode"); + string curveString = Program.config.getConfigString(GetFanName(device)); + byte[] curve = {}; + + if (curveString is not null) + curve = StringToBytes(curveString); + + if (def == 1 || curve.Length < 16) + curve = Program.wmi.GetFanCurve(device, mode); + + + Debug.WriteLine(BitConverter.ToString(curve)); + + byte old = 0; + for (int i = 0; i < 8; i++) + { + if (curve[i] == old) curve[i]++; // preventing 2 points in same spot from default asus profiles + series.Points.AddXY(curve[i], curve[i + 8]); + old = curve[i]; + } + + } + + void ApplyProfile(Series series, int device) + { + byte[] curve = new byte[16]; + int i = 0; + foreach (DataPoint point in series.Points) + { + curve[i] = (byte)point.XValue; + curve[i + 8] = (byte)point.YValues.First(); + i++; + } + + string bitCurve = BitConverter.ToString(curve); + Debug.WriteLine(bitCurve); + Program.config.setConfig(GetFanName(device), bitCurve); + + Program.wmi.SetFanCurve(device, curve); + + } + + + private void ButtonApply_Click(object? sender, EventArgs e) + { + ApplyProfile(seriesCPU, 0); + ApplyProfile(seriesGPU, 1); + } + + private void ButtonReset_Click(object? sender, EventArgs e) + { + LoadProfile(seriesCPU, 0, 1); + LoadProfile(seriesGPU, 1, 1); + } + + private void ChartCPU_MouseUp(object? sender, MouseEventArgs e) + { + curPoint = null; + } + + private void ChartCPU_MouseMove(object? sender, MouseEventArgs e) + { + + if (sender is null) return; + + Chart chart = (Chart)sender; + + if (e.Button.HasFlag(MouseButtons.Left)) + { + ChartArea ca = chart.ChartAreas[0]; + Axis ax = ca.AxisX; + Axis ay = ca.AxisY; + + HitTestResult hit = chart.HitTest(e.X, e.Y); + if (hit.Series is not null && hit.PointIndex >= 0) + curPoint = hit.Series.Points[hit.PointIndex]; + + + if (curPoint != null) + { + Series s = hit.Series; + double dx = ax.PixelPositionToValue(e.X); + double dy = ay.PixelPositionToValue(e.Y); + + if (dx < 0) dx = 0; + if (dx > 100) dx = 100; + + if (dy < 0) dy = 0; + if (dy > 100) dy = 100; + + curPoint.XValue = dx; + curPoint.YValues[0] = dy; + } + } + } + } + +} diff --git a/Fans.resx b/Fans.resx new file mode 100644 index 00000000..f298a7be --- /dev/null +++ b/Fans.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/GHelper.csproj b/GHelper.csproj index 86be3f04..89db6249 100644 --- a/GHelper.csproj +++ b/GHelper.csproj @@ -12,6 +12,7 @@ favicon.ico AnyCPU;x64 8.0 + GHelper @@ -35,6 +36,7 @@ + @@ -48,22 +50,22 @@ - Always + Never - Always + Never - Always + Never - Always + Never - Always + Never - Always + Never diff --git a/NativeMethods.cs b/NativeMethods.cs new file mode 100644 index 00000000..839251dd --- /dev/null +++ b/NativeMethods.cs @@ -0,0 +1,227 @@ +using System.Runtime.InteropServices; + +public class NativeMethods +{ + + [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] + static extern UInt32 PowerWriteDCValueIndex(IntPtr RootPowerKey, + [MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid, + [MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid, + [MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid, + int AcValueIndex); + + [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] + static extern UInt32 PowerWriteACValueIndex(IntPtr RootPowerKey, + [MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid, + [MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid, + [MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid, + int AcValueIndex); + + [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] + static extern UInt32 PowerReadACValueIndex(IntPtr RootPowerKey, + [MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid, + [MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid, + [MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid, + out IntPtr AcValueIndex + ); + + [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] + static extern UInt32 PowerReadDCValueIndex(IntPtr RootPowerKey, + [MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid, + [MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid, + [MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid, + out IntPtr AcValueIndex + ); + + + + [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] + static extern UInt32 PowerSetActiveScheme(IntPtr RootPowerKey, + [MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid); + + [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] + static extern UInt32 PowerGetActiveScheme(IntPtr UserPowerKey, out IntPtr ActivePolicyGuid); + + static readonly Guid GUID_CPU = new Guid("54533251-82be-4824-96c1-47b60b740d00"); + static readonly Guid GUID_BOOST = new Guid("be337238-0d82-4146-a960-4f3749d470c7"); + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct DEVMODE + { + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] + public string dmDeviceName; + + public short dmSpecVersion; + public short dmDriverVersion; + public short dmSize; + public short dmDriverExtra; + public int dmFields; + public int dmPositionX; + public int dmPositionY; + public int dmDisplayOrientation; + public int dmDisplayFixedOutput; + public short dmColor; + public short dmDuplex; + public short dmYResolution; + public short dmTTOption; + public short dmCollate; + + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] + public string dmFormName; + + public short dmLogPixels; + public short dmBitsPerPel; + public int dmPelsWidth; + public int dmPelsHeight; + public int dmDisplayFlags; + public int dmDisplayFrequency; + public int dmICMMethod; + public int dmICMIntent; + public int dmMediaType; + public int dmDitherType; + public int dmReserved1; + public int dmReserved2; + public int dmPanningWidth; + public int dmPanningHeight; + }; + + [Flags()] + public enum DisplaySettingsFlags : int + { + CDS_UPDATEREGISTRY = 1, + CDS_TEST = 2, + CDS_FULLSCREEN = 4, + CDS_GLOBAL = 8, + CDS_SET_PRIMARY = 0x10, + CDS_RESET = 0x40000000, + CDS_NORESET = 0x10000000 + } + + // PInvoke declaration for EnumDisplaySettings Win32 API + [DllImport("user32.dll")] + public static extern int EnumDisplaySettingsEx( + string lpszDeviceName, + int iModeNum, + ref DEVMODE lpDevMode); + + // PInvoke declaration for ChangeDisplaySettings Win32 API + [DllImport("user32.dll")] + public static extern int ChangeDisplaySettingsEx( + string lpszDeviceName, ref DEVMODE lpDevMode, IntPtr hwnd, + DisplaySettingsFlags dwflags, IntPtr lParam); + + + public const int ENUM_CURRENT_SETTINGS = -1; + + public const string laptopScreenName = "\\\\.\\DISPLAY1"; + + public static DEVMODE CreateDevmode() + { + DEVMODE dm = new DEVMODE(); + dm.dmDeviceName = new String(new char[32]); + dm.dmFormName = new String(new char[32]); + dm.dmSize = (short)Marshal.SizeOf(dm); + return dm; + } + + public static Screen FindLaptopScreen() + { + var screens = Screen.AllScreens; + Screen laptopScreen = null; + + foreach (var screen in screens) + { + if (screen.DeviceName == laptopScreenName) + { + laptopScreen = screen; + } + } + + if (laptopScreen is null) return null; + else return laptopScreen; + } + + public static int GetRefreshRate() + { + DEVMODE dm = CreateDevmode(); + + Screen laptopScreen = FindLaptopScreen(); + int frequency = -1; + + if (laptopScreen is null) + return -1; + + if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen.DeviceName, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm)) + { + frequency = dm.dmDisplayFrequency; + } + + return frequency; + } + + public static int SetRefreshRate(int frequency = 120) + { + DEVMODE dm = CreateDevmode(); + Screen laptopScreen = FindLaptopScreen(); + + if (laptopScreen is null) + return -1; + + if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen.DeviceName, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm)) + { + dm.dmDisplayFrequency = frequency; + int iRet = NativeMethods.ChangeDisplaySettingsEx(laptopScreen.DeviceName, ref dm, IntPtr.Zero, DisplaySettingsFlags.CDS_UPDATEREGISTRY, IntPtr.Zero); + return iRet; + } + + return 0; + + } + + static Guid GetActiveScheme() + { + IntPtr pActiveSchemeGuid; + var hr = PowerGetActiveScheme(IntPtr.Zero, out pActiveSchemeGuid); + Guid activeSchemeGuid = (Guid)Marshal.PtrToStructure(pActiveSchemeGuid, typeof(Guid)); + return activeSchemeGuid; + } + + public static int GetCPUBoost() + { + IntPtr AcValueIndex; + Guid activeSchemeGuid = GetActiveScheme(); + + UInt32 value = PowerReadACValueIndex(IntPtr.Zero, + activeSchemeGuid, + GUID_CPU, + GUID_BOOST, out AcValueIndex); + + return AcValueIndex.ToInt32(); + + } + + public static void SetCPUBoost(int boost = 0) + { + Guid activeSchemeGuid = GetActiveScheme(); + + var hrAC = PowerWriteACValueIndex( + IntPtr.Zero, + activeSchemeGuid, + GUID_CPU, + GUID_BOOST, + boost); + + PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid); + + var hrDC = PowerWriteDCValueIndex( + IntPtr.Zero, + activeSchemeGuid, + GUID_CPU, + GUID_BOOST, + boost); + + PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid); + + + } +} diff --git a/Program.cs b/Program.cs index 8df180ee..76f7b9be 100644 --- a/Program.cs +++ b/Program.cs @@ -1,57 +1,8 @@ -using HidLibrary; using LibreHardwareMonitor.Hardware; -using Microsoft.Win32.TaskScheduler; using System.Diagnostics; using System.Management; -using System.Runtime.InteropServices; -using System.Security.Principal; using System.Text.Json; -public class Startup -{ - - static string taskName = "GHelper"; - - public Startup() - { - - } - - public bool IsScheduled() - { - TaskService taskService = new TaskService(); - return (taskService.RootFolder.AllTasks.Any(t => t.Name == taskName)); - } - - public void Schedule() - { - TaskService taskService = new TaskService(); - - string strExeFilePath = Application.ExecutablePath; - - if (strExeFilePath is null) return; - - var userId = WindowsIdentity.GetCurrent().Name; - - Debug.WriteLine(strExeFilePath); - TaskDefinition td = TaskService.Instance.NewTask(); - td.RegistrationInfo.Description = "GHelper Auto Start"; - td.Triggers.Add(new LogonTrigger { UserId = userId, }); - td.Actions.Add(strExeFilePath); - - td.Settings.StopIfGoingOnBatteries = false; - td.Settings.DisallowStartIfOnBatteries = false; - - TaskService.Instance.RootFolder.RegisterTaskDefinition(taskName, td); - } - - public void UnSchedule() - { - TaskService taskService = new TaskService(); - taskService.RootFolder.DeleteTask(taskName); - } -} - public class AppConfig { @@ -104,310 +55,28 @@ public class AppConfig else return -1; } + public string getConfigString(string name) + { + if (config.ContainsKey(name)) + return config[name].ToString(); + else return null; + } + public void setConfig(string name, int value) { config[name] = value; - string jsonString = JsonSerializer.Serialize(config); + string jsonString = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true }); + File.WriteAllText(configFile, jsonString); + } + + public void setConfig(string name, string value) + { + config[name] = value; + string jsonString = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true }); File.WriteAllText(configFile, jsonString); } - -} - - -public class NativeMethods -{ - - [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] - static extern UInt32 PowerWriteDCValueIndex(IntPtr RootPowerKey, - [MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid, - [MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid, - [MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid, - int AcValueIndex); - - [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] - static extern UInt32 PowerWriteACValueIndex(IntPtr RootPowerKey, - [MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid, - [MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid, - [MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid, - int AcValueIndex); - - [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] - static extern UInt32 PowerReadACValueIndex(IntPtr RootPowerKey, - [MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid, - [MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid, - [MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid, - out IntPtr AcValueIndex - ); - - [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] - static extern UInt32 PowerReadDCValueIndex(IntPtr RootPowerKey, - [MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid, - [MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid, - [MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid, - out IntPtr AcValueIndex - ); - - - - [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] - static extern UInt32 PowerSetActiveScheme(IntPtr RootPowerKey, - [MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid); - - [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)] - static extern UInt32 PowerGetActiveScheme(IntPtr UserPowerKey, out IntPtr ActivePolicyGuid); - - static readonly Guid GUID_CPU = new Guid("54533251-82be-4824-96c1-47b60b740d00"); - static readonly Guid GUID_BOOST = new Guid("be337238-0d82-4146-a960-4f3749d470c7"); - - [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public struct DEVMODE - { - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] - public string dmDeviceName; - - public short dmSpecVersion; - public short dmDriverVersion; - public short dmSize; - public short dmDriverExtra; - public int dmFields; - public int dmPositionX; - public int dmPositionY; - public int dmDisplayOrientation; - public int dmDisplayFixedOutput; - public short dmColor; - public short dmDuplex; - public short dmYResolution; - public short dmTTOption; - public short dmCollate; - - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] - public string dmFormName; - - public short dmLogPixels; - public short dmBitsPerPel; - public int dmPelsWidth; - public int dmPelsHeight; - public int dmDisplayFlags; - public int dmDisplayFrequency; - public int dmICMMethod; - public int dmICMIntent; - public int dmMediaType; - public int dmDitherType; - public int dmReserved1; - public int dmReserved2; - public int dmPanningWidth; - public int dmPanningHeight; - }; - - [Flags()] - public enum DisplaySettingsFlags : int - { - CDS_UPDATEREGISTRY = 1, - CDS_TEST = 2, - CDS_FULLSCREEN = 4, - CDS_GLOBAL = 8, - CDS_SET_PRIMARY = 0x10, - CDS_RESET = 0x40000000, - CDS_NORESET = 0x10000000 - } - - // PInvoke declaration for EnumDisplaySettings Win32 API - [DllImport("user32.dll")] - public static extern int EnumDisplaySettingsEx( - string lpszDeviceName, - int iModeNum, - ref DEVMODE lpDevMode); - - // PInvoke declaration for ChangeDisplaySettings Win32 API - [DllImport("user32.dll")] - public static extern int ChangeDisplaySettingsEx( - string lpszDeviceName, ref DEVMODE lpDevMode, IntPtr hwnd, - DisplaySettingsFlags dwflags, IntPtr lParam); - - - public const int ENUM_CURRENT_SETTINGS = -1; - - public const string laptopScreenName = "\\\\.\\DISPLAY1"; - - public static DEVMODE CreateDevmode() - { - DEVMODE dm = new DEVMODE(); - dm.dmDeviceName = new String(new char[32]); - dm.dmFormName = new String(new char[32]); - dm.dmSize = (short)Marshal.SizeOf(dm); - return dm; - } - - public static Screen FindLaptopScreen() - { - var screens = Screen.AllScreens; - Screen laptopScreen = null; - - foreach (var screen in screens) - { - if (screen.DeviceName == laptopScreenName) - { - laptopScreen = screen; - } - } - - if (laptopScreen is null) return null; - else return laptopScreen; - } - - public static int GetRefreshRate() - { - DEVMODE dm = CreateDevmode(); - - Screen laptopScreen = FindLaptopScreen(); - int frequency = -1; - - if (laptopScreen is null) - return -1; - - if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen.DeviceName, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm)) - { - frequency = dm.dmDisplayFrequency; - } - - return frequency; - } - - public static int SetRefreshRate(int frequency = 120) - { - DEVMODE dm = CreateDevmode(); - Screen laptopScreen = FindLaptopScreen(); - - if (laptopScreen is null) - return -1; - - if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen.DeviceName, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm)) - { - dm.dmDisplayFrequency = frequency; - int iRet = NativeMethods.ChangeDisplaySettingsEx(laptopScreen.DeviceName, ref dm, IntPtr.Zero, DisplaySettingsFlags.CDS_UPDATEREGISTRY, IntPtr.Zero); - return iRet; - } - - return 0; - - } - - static Guid GetActiveScheme() - { - IntPtr pActiveSchemeGuid; - var hr = PowerGetActiveScheme(IntPtr.Zero, out pActiveSchemeGuid); - Guid activeSchemeGuid = (Guid)Marshal.PtrToStructure(pActiveSchemeGuid, typeof(Guid)); - return activeSchemeGuid; - } - - public static int GetCPUBoost() - { - IntPtr AcValueIndex; - Guid activeSchemeGuid = GetActiveScheme(); - - UInt32 value = PowerReadACValueIndex(IntPtr.Zero, - activeSchemeGuid, - GUID_CPU, - GUID_BOOST, out AcValueIndex); - - return AcValueIndex.ToInt32(); - - } - - public static void SetCPUBoost(int boost = 0) - { - Guid activeSchemeGuid = GetActiveScheme(); - - var hrAC = PowerWriteACValueIndex( - IntPtr.Zero, - activeSchemeGuid, - GUID_CPU, - GUID_BOOST, - boost); - - PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid); - - var hrDC = PowerWriteDCValueIndex( - IntPtr.Zero, - activeSchemeGuid, - GUID_CPU, - GUID_BOOST, - boost); - - PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid); - - - } -} - - -public class Aura -{ - - static byte[] MESSAGE_SET = { 0x5d, 0xb5 }; - static byte[] MESSAGE_APPLY = { 0x5d, 0xb4 }; - - public const int Static = 0; - public const int Breathe = 1; - public const int Strobe = 2; - public const int Rainbow = 3; - public const int Dingding = 10; - - public const int SpeedSlow = 0; - public const int SpeedMedium = 1; - public const int SpeedHigh = 2; - - public static int Mode = Static; - public static Color Color1 = Color.White; - public static Color Color2 = Color.Black; - public static int Speed = SpeedSlow; - - public static byte[] AuraMessage(int mode, Color color, Color color2, int speed) - { - byte[] msg = new byte[17]; - msg[0] = 0x5d; - msg[1] = 0xb3; - msg[2] = 0x00; // Zone - msg[3] = (byte)mode; // Aura Mode - msg[4] = (byte)(color.R); // R - msg[5] = (byte)(color.G); // G - msg[6] = (byte)(color.B); // B - msg[7] = (byte)speed; // aura.speed as u8; - msg[8] = 0; // aura.direction as u8; - msg[10] = (byte)(color2.R); // R - msg[11] = (byte)(color2.G); // G - msg[12] = (byte)(color2.B); // B - return msg; - } - - public static void ApplyAura() - { - - HidDevice[] HidDeviceList; - int[] deviceIds = { 0x1854, 0x1869, 0x1866, 0x19b6 }; - - HidDeviceList = HidDevices.Enumerate(0x0b05, deviceIds).ToArray(); - - foreach (HidDevice device in HidDeviceList) - { - if (device.IsConnected) - { - if (device.Description.IndexOf("HID") >= 0) - { - device.OpenDevice(); - byte[] msg = AuraMessage(Mode, Color1, Color2, Speed); - device.Write(msg); - device.Write(MESSAGE_SET); - device.Write(MESSAGE_APPLY); - device.CloseDevice(); - } - - } - } - - } } @@ -515,37 +184,27 @@ namespace GHelper { static class Program { - public static NotifyIcon trayIcon; + public static NotifyIcon trayIcon = new NotifyIcon + { + Text = "G-Helper", + Icon = Properties.Resources.standard, + Visible = true + }; - public static ASUSWmi wmi; - public static AppConfig config; + public static ASUSWmi wmi = new ASUSWmi(); + public static AppConfig config = new AppConfig(); - public static SettingsForm settingsForm; - - public static Startup scheduler; - public static HardwareMonitor hwmonitor; + public static SettingsForm settingsForm = new SettingsForm(); + public static HardwareMonitor hwmonitor = new HardwareMonitor(); // The main entry point for the application public static void Main() { - trayIcon = new NotifyIcon - { - Text = "G-Helper", - Icon = GHelper.Properties.Resources.standard, - Visible = true - }; trayIcon.MouseClick += TrayIcon_MouseClick; ; - config = new AppConfig(); - - wmi = new ASUSWmi(); wmi.SubscribeToEvents(WatcherEventArrived); - scheduler = new Startup(); - - settingsForm = new SettingsForm(); - settingsForm.InitGPUMode(); settingsForm.InitBoost(); settingsForm.InitAura(); @@ -556,13 +215,13 @@ namespace GHelper settingsForm.VisualiseGPUAuto(config.getConfig("gpu_auto")); settingsForm.VisualiseScreenAuto(config.getConfig("screen_auto")); - settingsForm.SetStartupCheck(scheduler.IsScheduled()); + settingsForm.SetStartupCheck(Startup.IsScheduled()); bool isPlugged = (System.Windows.Forms.SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online); settingsForm.AutoGPUMode(isPlugged ? 1 : 0); settingsForm.AutoScreen(isPlugged ? 1 : 0); - hwmonitor = new HardwareMonitor(); + IntPtr dummy = settingsForm.Handle; Application.Run(); diff --git a/Settings.Designer.cs b/Settings.Designer.cs index dd5332fb..65bb0f59 100644 --- a/Settings.Designer.cs +++ b/Settings.Designer.cs @@ -29,546 +29,539 @@ private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsForm)); - this.checkStartup = new System.Windows.Forms.CheckBox(); - this.trackBattery = new System.Windows.Forms.TrackBar(); - this.labelBatteryTitle = new System.Windows.Forms.Label(); - this.pictureBattery = new System.Windows.Forms.PictureBox(); - this.labelGPUFan = new System.Windows.Forms.Label(); - this.tableGPU = new System.Windows.Forms.TableLayoutPanel(); - this.buttonUltimate = new System.Windows.Forms.Button(); - this.buttonStandard = new System.Windows.Forms.Button(); - this.buttonEco = new System.Windows.Forms.Button(); - this.labelGPU = new System.Windows.Forms.Label(); - this.pictureGPU = new System.Windows.Forms.PictureBox(); - this.labelCPUFan = new System.Windows.Forms.Label(); - this.tablePerf = new System.Windows.Forms.TableLayoutPanel(); - this.buttonTurbo = new System.Windows.Forms.Button(); - this.buttonBalanced = new System.Windows.Forms.Button(); - this.buttonSilent = new System.Windows.Forms.Button(); - this.picturePerf = new System.Windows.Forms.PictureBox(); - this.labelPerf = new System.Windows.Forms.Label(); - this.checkGPU = new System.Windows.Forms.CheckBox(); - this.buttonQuit = new System.Windows.Forms.Button(); - this.pictureScreen = new System.Windows.Forms.PictureBox(); - this.labelSreen = new System.Windows.Forms.Label(); - this.tableScreen = new System.Windows.Forms.TableLayoutPanel(); - this.button120Hz = new System.Windows.Forms.Button(); - this.button60Hz = new System.Windows.Forms.Button(); - this.checkScreen = new System.Windows.Forms.CheckBox(); - this.checkBoost = new System.Windows.Forms.CheckBox(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.label1 = new System.Windows.Forms.Label(); - this.comboKeyboard = new System.Windows.Forms.ComboBox(); - this.buttonKeyboardColor = new System.Windows.Forms.Button(); - this.pictureBox2 = new System.Windows.Forms.PictureBox(); - this.labelBattery = new System.Windows.Forms.Label(); - ((System.ComponentModel.ISupportInitialize)(this.trackBattery)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBattery)).BeginInit(); - this.tableGPU.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureGPU)).BeginInit(); - this.tablePerf.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.picturePerf)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureScreen)).BeginInit(); - this.tableScreen.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); - this.SuspendLayout(); + checkStartup = new CheckBox(); + trackBattery = new TrackBar(); + labelBatteryTitle = new Label(); + pictureBattery = new PictureBox(); + labelGPUFan = new Label(); + tableGPU = new TableLayoutPanel(); + buttonUltimate = new Button(); + buttonStandard = new Button(); + buttonEco = new Button(); + labelGPU = new Label(); + pictureGPU = new PictureBox(); + labelCPUFan = new Label(); + tablePerf = new TableLayoutPanel(); + buttonTurbo = new Button(); + buttonBalanced = new Button(); + buttonSilent = new Button(); + picturePerf = new PictureBox(); + labelPerf = new Label(); + checkGPU = new CheckBox(); + buttonQuit = new Button(); + pictureScreen = new PictureBox(); + labelSreen = new Label(); + tableScreen = new TableLayoutPanel(); + button120Hz = new Button(); + button60Hz = new Button(); + checkScreen = new CheckBox(); + checkBoost = new CheckBox(); + pictureBox1 = new PictureBox(); + label1 = new Label(); + comboKeyboard = new ComboBox(); + buttonKeyboardColor = new Button(); + labelBattery = new Label(); + buttonFans = new Button(); + ((System.ComponentModel.ISupportInitialize)trackBattery).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureBattery).BeginInit(); + tableGPU.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureGPU).BeginInit(); + tablePerf.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)picturePerf).BeginInit(); + ((System.ComponentModel.ISupportInitialize)pictureScreen).BeginInit(); + tableScreen.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + SuspendLayout(); // // checkStartup // - this.checkStartup.AutoSize = true; - this.checkStartup.Location = new System.Drawing.Point(40, 1007); - this.checkStartup.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.checkStartup.Name = "checkStartup"; - this.checkStartup.Size = new System.Drawing.Size(206, 36); - this.checkStartup.TabIndex = 2; - this.checkStartup.Text = "Run on Startup"; - this.checkStartup.UseVisualStyleBackColor = true; - this.checkStartup.CheckedChanged += new System.EventHandler(this.checkStartup_CheckedChanged); + checkStartup.AutoSize = true; + checkStartup.Location = new Point(41, 1007); + checkStartup.Margin = new Padding(4, 2, 4, 2); + checkStartup.Name = "checkStartup"; + checkStartup.Size = new Size(206, 36); + checkStartup.TabIndex = 2; + checkStartup.Text = "Run on Startup"; + checkStartup.UseVisualStyleBackColor = true; + checkStartup.CheckedChanged += checkStartup_CheckedChanged; // // trackBattery // - this.trackBattery.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.trackBattery.LargeChange = 20; - this.trackBattery.Location = new System.Drawing.Point(20, 908); - this.trackBattery.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.trackBattery.Maximum = 100; - this.trackBattery.Minimum = 50; - this.trackBattery.Name = "trackBattery"; - this.trackBattery.Size = new System.Drawing.Size(690, 90); - this.trackBattery.SmallChange = 10; - this.trackBattery.TabIndex = 3; - this.trackBattery.TickFrequency = 10; - this.trackBattery.TickStyle = System.Windows.Forms.TickStyle.TopLeft; - this.trackBattery.Value = 100; + trackBattery.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + trackBattery.LargeChange = 20; + trackBattery.Location = new Point(20, 909); + trackBattery.Margin = new Padding(4, 2, 4, 2); + trackBattery.Maximum = 100; + trackBattery.Minimum = 50; + trackBattery.Name = "trackBattery"; + trackBattery.Size = new Size(674, 90); + trackBattery.SmallChange = 10; + trackBattery.TabIndex = 3; + trackBattery.TickFrequency = 10; + trackBattery.TickStyle = TickStyle.TopLeft; + trackBattery.Value = 100; // // labelBatteryTitle // - this.labelBatteryTitle.AutoSize = true; - this.labelBatteryTitle.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.labelBatteryTitle.Location = new System.Drawing.Point(77, 871); - this.labelBatteryTitle.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.labelBatteryTitle.Name = "labelBatteryTitle"; - this.labelBatteryTitle.Size = new System.Drawing.Size(248, 32); - this.labelBatteryTitle.TabIndex = 4; - this.labelBatteryTitle.Text = "Battery Charge Limit"; + labelBatteryTitle.AutoSize = true; + labelBatteryTitle.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + labelBatteryTitle.Location = new Point(76, 870); + labelBatteryTitle.Margin = new Padding(4, 0, 4, 0); + labelBatteryTitle.Name = "labelBatteryTitle"; + labelBatteryTitle.Size = new Size(248, 32); + labelBatteryTitle.TabIndex = 4; + labelBatteryTitle.Text = "Battery Charge Limit"; // // pictureBattery // - this.pictureBattery.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBattery.BackgroundImage"))); - this.pictureBattery.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.pictureBattery.Location = new System.Drawing.Point(33, 868); - this.pictureBattery.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.pictureBattery.Name = "pictureBattery"; - this.pictureBattery.Size = new System.Drawing.Size(38, 38); - this.pictureBattery.TabIndex = 6; - this.pictureBattery.TabStop = false; + pictureBattery.BackgroundImage = (Image)resources.GetObject("pictureBattery.BackgroundImage"); + pictureBattery.BackgroundImageLayout = ImageLayout.Zoom; + pictureBattery.Location = new Point(33, 868); + pictureBattery.Margin = new Padding(4, 2, 4, 2); + pictureBattery.Name = "pictureBattery"; + pictureBattery.Size = new Size(37, 38); + pictureBattery.TabIndex = 6; + pictureBattery.TabStop = false; // // labelGPUFan // - this.labelGPUFan.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.labelGPUFan.Location = new System.Drawing.Point(425, 262); - this.labelGPUFan.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.labelGPUFan.Name = "labelGPUFan"; - this.labelGPUFan.Size = new System.Drawing.Size(277, 32); - this.labelGPUFan.TabIndex = 8; - this.labelGPUFan.Text = "GPU Fan : 0%"; - this.labelGPUFan.TextAlign = System.Drawing.ContentAlignment.TopRight; + labelGPUFan.Anchor = AnchorStyles.Top | AnchorStyles.Right; + labelGPUFan.Location = new Point(409, 262); + labelGPUFan.Margin = new Padding(4, 0, 4, 0); + labelGPUFan.Name = "labelGPUFan"; + labelGPUFan.Size = new Size(277, 32); + labelGPUFan.TabIndex = 8; + labelGPUFan.Text = "GPU Fan : 0%"; + labelGPUFan.TextAlign = ContentAlignment.TopRight; // // tableGPU // - this.tableGPU.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tableGPU.ColumnCount = 3; - this.tableGPU.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tableGPU.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tableGPU.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tableGPU.Controls.Add(this.buttonUltimate, 2, 0); - this.tableGPU.Controls.Add(this.buttonStandard, 1, 0); - this.tableGPU.Controls.Add(this.buttonEco, 0, 0); - this.tableGPU.Location = new System.Drawing.Point(22, 303); - this.tableGPU.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.tableGPU.Name = "tableGPU"; - this.tableGPU.RowCount = 1; - this.tableGPU.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 107F)); - this.tableGPU.Size = new System.Drawing.Size(690, 107); - this.tableGPU.TabIndex = 7; + tableGPU.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + tableGPU.ColumnCount = 3; + tableGPU.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F)); + tableGPU.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F)); + tableGPU.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F)); + tableGPU.Controls.Add(buttonUltimate, 2, 0); + tableGPU.Controls.Add(buttonStandard, 1, 0); + tableGPU.Controls.Add(buttonEco, 0, 0); + tableGPU.Location = new Point(22, 303); + tableGPU.Margin = new Padding(4, 2, 4, 2); + tableGPU.Name = "tableGPU"; + tableGPU.RowCount = 1; + tableGPU.RowStyles.Add(new RowStyle(SizeType.Absolute, 107F)); + tableGPU.Size = new Size(674, 107); + tableGPU.TabIndex = 7; // // buttonUltimate // - this.buttonUltimate.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.buttonUltimate.Dock = System.Windows.Forms.DockStyle.Fill; - this.buttonUltimate.FlatAppearance.BorderSize = 0; - this.buttonUltimate.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonUltimate.Location = new System.Drawing.Point(469, 11); - this.buttonUltimate.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); - this.buttonUltimate.Name = "buttonUltimate"; - this.buttonUltimate.Size = new System.Drawing.Size(212, 85); - this.buttonUltimate.TabIndex = 2; - this.buttonUltimate.Text = "Ultimate"; - this.buttonUltimate.UseVisualStyleBackColor = false; + buttonUltimate.BackColor = SystemColors.ControlLightLight; + buttonUltimate.Dock = DockStyle.Fill; + buttonUltimate.FlatAppearance.BorderSize = 0; + buttonUltimate.FlatStyle = FlatStyle.Flat; + buttonUltimate.Location = new Point(457, 11); + buttonUltimate.Margin = new Padding(9, 11, 9, 11); + buttonUltimate.Name = "buttonUltimate"; + buttonUltimate.Size = new Size(208, 85); + buttonUltimate.TabIndex = 2; + buttonUltimate.Text = "Ultimate"; + buttonUltimate.UseVisualStyleBackColor = false; // // buttonStandard // - this.buttonStandard.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.buttonStandard.Dock = System.Windows.Forms.DockStyle.Fill; - this.buttonStandard.FlatAppearance.BorderSize = 0; - this.buttonStandard.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonStandard.Location = new System.Drawing.Point(239, 11); - this.buttonStandard.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); - this.buttonStandard.Name = "buttonStandard"; - this.buttonStandard.Size = new System.Drawing.Size(212, 85); - this.buttonStandard.TabIndex = 1; - this.buttonStandard.Text = "Standard"; - this.buttonStandard.UseVisualStyleBackColor = false; + buttonStandard.BackColor = SystemColors.ControlLightLight; + buttonStandard.Dock = DockStyle.Fill; + buttonStandard.FlatAppearance.BorderSize = 0; + buttonStandard.FlatStyle = FlatStyle.Flat; + buttonStandard.Location = new Point(233, 11); + buttonStandard.Margin = new Padding(9, 11, 9, 11); + buttonStandard.Name = "buttonStandard"; + buttonStandard.Size = new Size(206, 85); + buttonStandard.TabIndex = 1; + buttonStandard.Text = "Standard"; + buttonStandard.UseVisualStyleBackColor = false; // // buttonEco // - this.buttonEco.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.buttonEco.CausesValidation = false; - this.buttonEco.Dock = System.Windows.Forms.DockStyle.Fill; - this.buttonEco.FlatAppearance.BorderSize = 0; - this.buttonEco.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonEco.Location = new System.Drawing.Point(9, 11); - this.buttonEco.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); - this.buttonEco.Name = "buttonEco"; - this.buttonEco.Size = new System.Drawing.Size(212, 85); - this.buttonEco.TabIndex = 0; - this.buttonEco.Text = "Eco"; - this.buttonEco.UseVisualStyleBackColor = false; + buttonEco.BackColor = SystemColors.ControlLightLight; + buttonEco.CausesValidation = false; + buttonEco.Dock = DockStyle.Fill; + buttonEco.FlatAppearance.BorderSize = 0; + buttonEco.FlatStyle = FlatStyle.Flat; + buttonEco.Location = new Point(9, 11); + buttonEco.Margin = new Padding(9, 11, 9, 11); + buttonEco.Name = "buttonEco"; + buttonEco.Size = new Size(206, 85); + buttonEco.TabIndex = 0; + buttonEco.Text = "Eco"; + buttonEco.UseVisualStyleBackColor = false; // // labelGPU // - this.labelGPU.AutoSize = true; - this.labelGPU.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.labelGPU.Location = new System.Drawing.Point(77, 265); - this.labelGPU.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.labelGPU.Name = "labelGPU"; - this.labelGPU.Size = new System.Drawing.Size(136, 32); - this.labelGPU.TabIndex = 9; - this.labelGPU.Text = "GPU Mode"; + labelGPU.AutoSize = true; + labelGPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + labelGPU.Location = new Point(76, 265); + labelGPU.Margin = new Padding(4, 0, 4, 0); + labelGPU.Name = "labelGPU"; + labelGPU.Size = new Size(136, 32); + labelGPU.TabIndex = 9; + labelGPU.Text = "GPU Mode"; // // pictureGPU // - this.pictureGPU.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureGPU.BackgroundImage"))); - this.pictureGPU.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.pictureGPU.Location = new System.Drawing.Point(33, 263); - this.pictureGPU.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.pictureGPU.Name = "pictureGPU"; - this.pictureGPU.Size = new System.Drawing.Size(38, 38); - this.pictureGPU.TabIndex = 10; - this.pictureGPU.TabStop = false; + pictureGPU.BackgroundImage = (Image)resources.GetObject("pictureGPU.BackgroundImage"); + pictureGPU.BackgroundImageLayout = ImageLayout.Zoom; + pictureGPU.Location = new Point(33, 262); + pictureGPU.Margin = new Padding(4, 2, 4, 2); + pictureGPU.Name = "pictureGPU"; + pictureGPU.Size = new Size(37, 38); + pictureGPU.TabIndex = 10; + pictureGPU.TabStop = false; // // labelCPUFan // - this.labelCPUFan.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.labelCPUFan.Location = new System.Drawing.Point(425, 38); - this.labelCPUFan.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.labelCPUFan.Name = "labelCPUFan"; - this.labelCPUFan.Size = new System.Drawing.Size(277, 32); - this.labelCPUFan.TabIndex = 12; - this.labelCPUFan.Text = "CPU Fan : 0%"; - this.labelCPUFan.TextAlign = System.Drawing.ContentAlignment.TopRight; + labelCPUFan.Anchor = AnchorStyles.Top | AnchorStyles.Right; + labelCPUFan.Location = new Point(409, 38); + labelCPUFan.Margin = new Padding(4, 0, 4, 0); + labelCPUFan.Name = "labelCPUFan"; + labelCPUFan.Size = new Size(277, 32); + labelCPUFan.TabIndex = 12; + labelCPUFan.Text = "CPU Fan : 0%"; + labelCPUFan.TextAlign = ContentAlignment.TopRight; // // tablePerf // - this.tablePerf.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tablePerf.ColumnCount = 3; - this.tablePerf.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tablePerf.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tablePerf.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tablePerf.Controls.Add(this.buttonTurbo, 2, 0); - this.tablePerf.Controls.Add(this.buttonBalanced, 1, 0); - this.tablePerf.Controls.Add(this.buttonSilent, 0, 0); - this.tablePerf.Location = new System.Drawing.Point(22, 76); - this.tablePerf.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.tablePerf.Name = "tablePerf"; - this.tablePerf.RowCount = 1; - this.tablePerf.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 107F)); - this.tablePerf.Size = new System.Drawing.Size(690, 107); - this.tablePerf.TabIndex = 11; + tablePerf.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + tablePerf.ColumnCount = 3; + tablePerf.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F)); + tablePerf.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F)); + tablePerf.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F)); + tablePerf.Controls.Add(buttonTurbo, 2, 0); + tablePerf.Controls.Add(buttonBalanced, 1, 0); + tablePerf.Controls.Add(buttonSilent, 0, 0); + tablePerf.Location = new Point(22, 77); + tablePerf.Margin = new Padding(4, 2, 4, 2); + tablePerf.Name = "tablePerf"; + tablePerf.RowCount = 1; + tablePerf.RowStyles.Add(new RowStyle(SizeType.Absolute, 107F)); + tablePerf.Size = new Size(674, 107); + tablePerf.TabIndex = 11; // // buttonTurbo // - this.buttonTurbo.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.buttonTurbo.Dock = System.Windows.Forms.DockStyle.Fill; - this.buttonTurbo.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); - this.buttonTurbo.FlatAppearance.BorderSize = 0; - this.buttonTurbo.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonTurbo.Location = new System.Drawing.Point(469, 11); - this.buttonTurbo.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); - this.buttonTurbo.Name = "buttonTurbo"; - this.buttonTurbo.Size = new System.Drawing.Size(212, 85); - this.buttonTurbo.TabIndex = 2; - this.buttonTurbo.Text = "Turbo"; - this.buttonTurbo.UseVisualStyleBackColor = false; + buttonTurbo.BackColor = SystemColors.ControlLightLight; + buttonTurbo.Dock = DockStyle.Fill; + buttonTurbo.FlatAppearance.BorderColor = Color.FromArgb(192, 0, 0); + buttonTurbo.FlatAppearance.BorderSize = 0; + buttonTurbo.FlatStyle = FlatStyle.Flat; + buttonTurbo.Location = new Point(457, 11); + buttonTurbo.Margin = new Padding(9, 11, 9, 11); + buttonTurbo.Name = "buttonTurbo"; + buttonTurbo.Size = new Size(208, 85); + buttonTurbo.TabIndex = 2; + buttonTurbo.Text = "Turbo"; + buttonTurbo.UseVisualStyleBackColor = false; // // buttonBalanced // - this.buttonBalanced.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.buttonBalanced.Dock = System.Windows.Forms.DockStyle.Fill; - this.buttonBalanced.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); - this.buttonBalanced.FlatAppearance.BorderSize = 0; - this.buttonBalanced.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonBalanced.Location = new System.Drawing.Point(239, 11); - this.buttonBalanced.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); - this.buttonBalanced.Name = "buttonBalanced"; - this.buttonBalanced.Size = new System.Drawing.Size(212, 85); - this.buttonBalanced.TabIndex = 1; - this.buttonBalanced.Text = "Balanced"; - this.buttonBalanced.UseVisualStyleBackColor = false; + buttonBalanced.BackColor = SystemColors.ControlLightLight; + buttonBalanced.Dock = DockStyle.Fill; + buttonBalanced.FlatAppearance.BorderColor = Color.FromArgb(0, 0, 192); + buttonBalanced.FlatAppearance.BorderSize = 0; + buttonBalanced.FlatStyle = FlatStyle.Flat; + buttonBalanced.Location = new Point(233, 11); + buttonBalanced.Margin = new Padding(9, 11, 9, 11); + buttonBalanced.Name = "buttonBalanced"; + buttonBalanced.Size = new Size(206, 85); + buttonBalanced.TabIndex = 1; + buttonBalanced.Text = "Balanced"; + buttonBalanced.UseVisualStyleBackColor = false; // // buttonSilent // - this.buttonSilent.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.buttonSilent.CausesValidation = false; - this.buttonSilent.Dock = System.Windows.Forms.DockStyle.Fill; - this.buttonSilent.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(192))))); - this.buttonSilent.FlatAppearance.BorderSize = 0; - this.buttonSilent.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonSilent.Location = new System.Drawing.Point(9, 11); - this.buttonSilent.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); - this.buttonSilent.Name = "buttonSilent"; - this.buttonSilent.Size = new System.Drawing.Size(212, 85); - this.buttonSilent.TabIndex = 0; - this.buttonSilent.Text = "Silent"; - this.buttonSilent.UseVisualStyleBackColor = false; + buttonSilent.BackColor = SystemColors.ControlLightLight; + buttonSilent.CausesValidation = false; + buttonSilent.Dock = DockStyle.Fill; + buttonSilent.FlatAppearance.BorderColor = Color.FromArgb(0, 192, 192); + buttonSilent.FlatAppearance.BorderSize = 0; + buttonSilent.FlatStyle = FlatStyle.Flat; + buttonSilent.Location = new Point(9, 11); + buttonSilent.Margin = new Padding(9, 11, 9, 11); + buttonSilent.Name = "buttonSilent"; + buttonSilent.Size = new Size(206, 85); + buttonSilent.TabIndex = 0; + buttonSilent.Text = "Silent"; + buttonSilent.UseVisualStyleBackColor = false; // // picturePerf // - this.picturePerf.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("picturePerf.BackgroundImage"))); - this.picturePerf.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.picturePerf.InitialImage = null; - this.picturePerf.Location = new System.Drawing.Point(33, 36); - this.picturePerf.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.picturePerf.Name = "picturePerf"; - this.picturePerf.Size = new System.Drawing.Size(38, 38); - this.picturePerf.TabIndex = 14; - this.picturePerf.TabStop = false; + picturePerf.BackgroundImage = (Image)resources.GetObject("picturePerf.BackgroundImage"); + picturePerf.BackgroundImageLayout = ImageLayout.Zoom; + picturePerf.InitialImage = null; + picturePerf.Location = new Point(33, 36); + picturePerf.Margin = new Padding(4, 2, 4, 2); + picturePerf.Name = "picturePerf"; + picturePerf.Size = new Size(37, 38); + picturePerf.TabIndex = 14; + picturePerf.TabStop = false; // // labelPerf // - this.labelPerf.AutoSize = true; - this.labelPerf.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.labelPerf.Location = new System.Drawing.Point(77, 38); - this.labelPerf.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.labelPerf.Name = "labelPerf"; - this.labelPerf.Size = new System.Drawing.Size(234, 32); - this.labelPerf.TabIndex = 13; - this.labelPerf.Text = "Performance Mode"; + labelPerf.AutoSize = true; + labelPerf.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + labelPerf.Location = new Point(76, 38); + labelPerf.Margin = new Padding(4, 0, 4, 0); + labelPerf.Name = "labelPerf"; + labelPerf.Size = new Size(234, 32); + labelPerf.TabIndex = 13; + labelPerf.Text = "Performance Mode"; // // checkGPU // - this.checkGPU.AutoSize = true; - this.checkGPU.ForeColor = System.Drawing.SystemColors.GrayText; - this.checkGPU.Location = new System.Drawing.Point(33, 411); - this.checkGPU.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.checkGPU.Name = "checkGPU"; - this.checkGPU.Size = new System.Drawing.Size(550, 36); - this.checkGPU.TabIndex = 15; - this.checkGPU.Text = "Set Eco on battery and Standard when plugged"; - this.checkGPU.UseVisualStyleBackColor = true; - this.checkGPU.CheckedChanged += new System.EventHandler(this.checkGPU_CheckedChanged); + checkGPU.AutoSize = true; + checkGPU.ForeColor = SystemColors.GrayText; + checkGPU.Location = new Point(33, 412); + checkGPU.Margin = new Padding(4, 2, 4, 2); + checkGPU.Name = "checkGPU"; + checkGPU.Size = new Size(550, 36); + checkGPU.TabIndex = 15; + checkGPU.Text = "Set Eco on battery and Standard when plugged"; + checkGPU.UseVisualStyleBackColor = true; + checkGPU.CheckedChanged += checkGPU_CheckedChanged; // // buttonQuit // - this.buttonQuit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.buttonQuit.BackColor = System.Drawing.SystemColors.ButtonFace; - this.buttonQuit.Location = new System.Drawing.Point(591, 1011); - this.buttonQuit.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.buttonQuit.Name = "buttonQuit"; - this.buttonQuit.Size = new System.Drawing.Size(121, 47); - this.buttonQuit.TabIndex = 16; - this.buttonQuit.Text = "Quit"; - this.buttonQuit.UseVisualStyleBackColor = false; + buttonQuit.Anchor = AnchorStyles.Top | AnchorStyles.Right; + buttonQuit.BackColor = SystemColors.ButtonFace; + buttonQuit.Location = new Point(574, 1011); + buttonQuit.Margin = new Padding(4, 2, 4, 2); + buttonQuit.Name = "buttonQuit"; + buttonQuit.Size = new Size(121, 47); + buttonQuit.TabIndex = 16; + buttonQuit.Text = "Quit"; + buttonQuit.UseVisualStyleBackColor = false; // // pictureScreen // - this.pictureScreen.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureScreen.BackgroundImage"))); - this.pictureScreen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.pictureScreen.Location = new System.Drawing.Point(33, 496); - this.pictureScreen.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.pictureScreen.Name = "pictureScreen"; - this.pictureScreen.Size = new System.Drawing.Size(38, 38); - this.pictureScreen.TabIndex = 18; - this.pictureScreen.TabStop = false; + pictureScreen.BackgroundImage = (Image)resources.GetObject("pictureScreen.BackgroundImage"); + pictureScreen.BackgroundImageLayout = ImageLayout.Zoom; + pictureScreen.Location = new Point(33, 495); + pictureScreen.Margin = new Padding(4, 2, 4, 2); + pictureScreen.Name = "pictureScreen"; + pictureScreen.Size = new Size(37, 38); + pictureScreen.TabIndex = 18; + pictureScreen.TabStop = false; // // labelSreen // - this.labelSreen.AutoSize = true; - this.labelSreen.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.labelSreen.Location = new System.Drawing.Point(77, 496); - this.labelSreen.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.labelSreen.Name = "labelSreen"; - this.labelSreen.Size = new System.Drawing.Size(176, 32); - this.labelSreen.TabIndex = 17; - this.labelSreen.Text = "Laptop Screen"; + labelSreen.AutoSize = true; + labelSreen.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + labelSreen.Location = new Point(76, 495); + labelSreen.Margin = new Padding(4, 0, 4, 0); + labelSreen.Name = "labelSreen"; + labelSreen.Size = new Size(176, 32); + labelSreen.TabIndex = 17; + labelSreen.Text = "Laptop Screen"; // // tableScreen // - this.tableScreen.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tableScreen.ColumnCount = 3; - this.tableScreen.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tableScreen.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tableScreen.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); - this.tableScreen.Controls.Add(this.button120Hz, 1, 0); - this.tableScreen.Controls.Add(this.button60Hz, 0, 0); - this.tableScreen.Location = new System.Drawing.Point(22, 536); - this.tableScreen.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.tableScreen.Name = "tableScreen"; - this.tableScreen.RowCount = 1; - this.tableScreen.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 107F)); - this.tableScreen.Size = new System.Drawing.Size(690, 102); - this.tableScreen.TabIndex = 19; + tableScreen.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; + tableScreen.ColumnCount = 3; + tableScreen.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F)); + tableScreen.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F)); + tableScreen.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F)); + tableScreen.Controls.Add(button120Hz, 1, 0); + tableScreen.Controls.Add(button60Hz, 0, 0); + tableScreen.Location = new Point(22, 535); + tableScreen.Margin = new Padding(4, 2, 4, 2); + tableScreen.Name = "tableScreen"; + tableScreen.RowCount = 1; + tableScreen.RowStyles.Add(new RowStyle(SizeType.Absolute, 107F)); + tableScreen.Size = new Size(674, 107); + tableScreen.TabIndex = 19; // // button120Hz // - this.button120Hz.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.button120Hz.Dock = System.Windows.Forms.DockStyle.Fill; - this.button120Hz.FlatAppearance.BorderColor = System.Drawing.SystemColors.ActiveBorder; - this.button120Hz.FlatAppearance.BorderSize = 0; - this.button120Hz.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button120Hz.Location = new System.Drawing.Point(239, 11); - this.button120Hz.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); - this.button120Hz.Name = "button120Hz"; - this.button120Hz.Size = new System.Drawing.Size(212, 85); - this.button120Hz.TabIndex = 1; - this.button120Hz.Text = "120Hz + OD"; - this.button120Hz.UseVisualStyleBackColor = false; + button120Hz.BackColor = SystemColors.ControlLightLight; + button120Hz.Dock = DockStyle.Fill; + button120Hz.FlatAppearance.BorderColor = SystemColors.ActiveBorder; + button120Hz.FlatAppearance.BorderSize = 0; + button120Hz.FlatStyle = FlatStyle.Flat; + button120Hz.Location = new Point(233, 11); + button120Hz.Margin = new Padding(9, 11, 9, 11); + button120Hz.Name = "button120Hz"; + button120Hz.Size = new Size(206, 85); + button120Hz.TabIndex = 1; + button120Hz.Text = "120Hz + OD"; + button120Hz.UseVisualStyleBackColor = false; // // button60Hz // - this.button60Hz.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.button60Hz.CausesValidation = false; - this.button60Hz.Dock = System.Windows.Forms.DockStyle.Fill; - this.button60Hz.FlatAppearance.BorderColor = System.Drawing.SystemColors.ActiveBorder; - this.button60Hz.FlatAppearance.BorderSize = 0; - this.button60Hz.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.button60Hz.ForeColor = System.Drawing.SystemColors.ControlText; - this.button60Hz.Location = new System.Drawing.Point(9, 11); - this.button60Hz.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); - this.button60Hz.Name = "button60Hz"; - this.button60Hz.Size = new System.Drawing.Size(212, 85); - this.button60Hz.TabIndex = 0; - this.button60Hz.Text = "60Hz"; - this.button60Hz.UseVisualStyleBackColor = false; + button60Hz.BackColor = SystemColors.ControlLightLight; + button60Hz.CausesValidation = false; + button60Hz.Dock = DockStyle.Fill; + button60Hz.FlatAppearance.BorderColor = SystemColors.ActiveBorder; + button60Hz.FlatAppearance.BorderSize = 0; + button60Hz.FlatStyle = FlatStyle.Flat; + button60Hz.ForeColor = SystemColors.ControlText; + button60Hz.Location = new Point(9, 11); + button60Hz.Margin = new Padding(9, 11, 9, 11); + button60Hz.Name = "button60Hz"; + button60Hz.Size = new Size(206, 85); + button60Hz.TabIndex = 0; + button60Hz.Text = "60Hz"; + button60Hz.UseVisualStyleBackColor = false; // // checkScreen // - this.checkScreen.AutoSize = true; - this.checkScreen.ForeColor = System.Drawing.SystemColors.GrayText; - this.checkScreen.Location = new System.Drawing.Point(33, 639); - this.checkScreen.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.checkScreen.Name = "checkScreen"; - this.checkScreen.Size = new System.Drawing.Size(527, 36); - this.checkScreen.TabIndex = 20; - this.checkScreen.Text = "Set 60Hz on battery, and back when plugged"; - this.checkScreen.UseVisualStyleBackColor = true; + checkScreen.AutoSize = true; + checkScreen.ForeColor = SystemColors.GrayText; + checkScreen.Location = new Point(33, 644); + checkScreen.Margin = new Padding(4, 2, 4, 2); + checkScreen.Name = "checkScreen"; + checkScreen.Size = new Size(527, 36); + checkScreen.TabIndex = 20; + checkScreen.Text = "Set 60Hz on battery, and back when plugged"; + checkScreen.UseVisualStyleBackColor = true; // // checkBoost // - this.checkBoost.AutoSize = true; - this.checkBoost.ForeColor = System.Drawing.SystemColors.GrayText; - this.checkBoost.Location = new System.Drawing.Point(33, 184); - this.checkBoost.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.checkBoost.Name = "checkBoost"; - this.checkBoost.Size = new System.Drawing.Size(250, 36); - this.checkBoost.TabIndex = 21; - this.checkBoost.Text = "CPU Boost enabled"; - this.checkBoost.UseVisualStyleBackColor = true; + checkBoost.AutoSize = true; + checkBoost.ForeColor = SystemColors.GrayText; + checkBoost.Location = new Point(33, 184); + checkBoost.Margin = new Padding(4, 2, 4, 2); + checkBoost.Name = "checkBoost"; + checkBoost.Size = new Size(250, 36); + checkBoost.TabIndex = 21; + checkBoost.Text = "CPU Boost enabled"; + checkBoost.UseVisualStyleBackColor = true; // // pictureBox1 // - this.pictureBox1.BackgroundImage = global::GHelper.Properties.Resources.icons8_keyboard_48; - this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.pictureBox1.Location = new System.Drawing.Point(33, 725); - this.pictureBox1.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(36, 36); - this.pictureBox1.TabIndex = 23; - this.pictureBox1.TabStop = false; + pictureBox1.BackgroundImage = Properties.Resources.icons8_keyboard_48; + pictureBox1.BackgroundImageLayout = ImageLayout.Zoom; + pictureBox1.Location = new Point(33, 725); + pictureBox1.Margin = new Padding(4, 2, 4, 2); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new Size(35, 36); + pictureBox1.TabIndex = 23; + pictureBox1.TabStop = false; // // label1 // - this.label1.AutoSize = true; - this.label1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); - this.label1.Location = new System.Drawing.Point(77, 726); - this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(210, 32); - this.label1.TabIndex = 22; - this.label1.Text = "Laptop Keyboard"; + label1.AutoSize = true; + label1.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point); + label1.Location = new Point(76, 725); + label1.Margin = new Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new Size(210, 32); + label1.TabIndex = 22; + label1.Text = "Laptop Keyboard"; // // comboKeyboard // - this.comboKeyboard.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.comboKeyboard.FormattingEnabled = true; - this.comboKeyboard.ItemHeight = 32; - this.comboKeyboard.Items.AddRange(new object[] { - "Static", - "Breathe", - "Strobe", - "Rainbow"}); - this.comboKeyboard.Location = new System.Drawing.Point(38, 778); - this.comboKeyboard.Margin = new System.Windows.Forms.Padding(0); - this.comboKeyboard.Name = "comboKeyboard"; - this.comboKeyboard.Size = new System.Drawing.Size(200, 40); - this.comboKeyboard.TabIndex = 24; - this.comboKeyboard.TabStop = false; + comboKeyboard.FlatStyle = FlatStyle.Flat; + comboKeyboard.Font = new Font("Segoe UI", 10F, FontStyle.Regular, GraphicsUnit.Point); + comboKeyboard.FormattingEnabled = true; + comboKeyboard.ItemHeight = 37; + comboKeyboard.Items.AddRange(new object[] { "Static", "Breathe", "Strobe", "Rainbow" }); + comboKeyboard.Location = new Point(37, 777); + comboKeyboard.Margin = new Padding(0); + comboKeyboard.Name = "comboKeyboard"; + comboKeyboard.Size = new Size(201, 45); + comboKeyboard.TabIndex = 24; + comboKeyboard.TabStop = false; // // buttonKeyboardColor // - this.buttonKeyboardColor.BackColor = System.Drawing.SystemColors.ButtonHighlight; - this.buttonKeyboardColor.FlatAppearance.BorderColor = System.Drawing.Color.Red; - this.buttonKeyboardColor.FlatAppearance.BorderSize = 3; - this.buttonKeyboardColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this.buttonKeyboardColor.ForeColor = System.Drawing.SystemColors.ControlText; - this.buttonKeyboardColor.Location = new System.Drawing.Point(261, 773); - this.buttonKeyboardColor.Margin = new System.Windows.Forms.Padding(0); - this.buttonKeyboardColor.Name = "buttonKeyboardColor"; - this.buttonKeyboardColor.Size = new System.Drawing.Size(212, 50); - this.buttonKeyboardColor.TabIndex = 25; - this.buttonKeyboardColor.Text = "Color"; - this.buttonKeyboardColor.UseVisualStyleBackColor = false; - // - // pictureBox2 - // - this.pictureBox2.BackColor = System.Drawing.SystemColors.ControlLightLight; - this.pictureBox2.Location = new System.Drawing.Point(32, 773); - this.pictureBox2.Name = "pictureBox2"; - this.pictureBox2.Size = new System.Drawing.Size(212, 50); - this.pictureBox2.TabIndex = 26; - this.pictureBox2.TabStop = false; + buttonKeyboardColor.AutoSize = true; + buttonKeyboardColor.BackColor = SystemColors.ButtonHighlight; + buttonKeyboardColor.FlatAppearance.BorderColor = Color.Red; + buttonKeyboardColor.FlatAppearance.BorderSize = 2; + buttonKeyboardColor.FlatStyle = FlatStyle.Flat; + buttonKeyboardColor.ForeColor = SystemColors.ControlText; + buttonKeyboardColor.Location = new Point(256, 775); + buttonKeyboardColor.Margin = new Padding(0); + buttonKeyboardColor.Name = "buttonKeyboardColor"; + buttonKeyboardColor.Size = new Size(212, 50); + buttonKeyboardColor.TabIndex = 25; + buttonKeyboardColor.Text = "Color"; + buttonKeyboardColor.UseVisualStyleBackColor = false; // // labelBattery // - this.labelBattery.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.labelBattery.Location = new System.Drawing.Point(425, 869); - this.labelBattery.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.labelBattery.Name = "labelBattery"; - this.labelBattery.Size = new System.Drawing.Size(277, 32); - this.labelBattery.TabIndex = 27; - this.labelBattery.Text = " "; - this.labelBattery.TextAlign = System.Drawing.ContentAlignment.TopRight; + labelBattery.Anchor = AnchorStyles.Top | AnchorStyles.Right; + labelBattery.Location = new Point(409, 868); + labelBattery.Margin = new Padding(4, 0, 4, 0); + labelBattery.Name = "labelBattery"; + labelBattery.Size = new Size(277, 32); + labelBattery.TabIndex = 27; + labelBattery.Text = " "; + labelBattery.TextAlign = ContentAlignment.TopRight; + // + // buttonFans + // + buttonFans.Anchor = AnchorStyles.Top | AnchorStyles.Right; + buttonFans.BackColor = SystemColors.ButtonFace; + buttonFans.Location = new Point(525, 186); + buttonFans.Margin = new Padding(4, 2, 4, 2); + buttonFans.Name = "buttonFans"; + buttonFans.Size = new Size(165, 47); + buttonFans.TabIndex = 28; + buttonFans.Text = "Fan Profile"; + buttonFans.UseVisualStyleBackColor = false; // // SettingsForm // - this.AutoScaleDimensions = new System.Drawing.SizeF(13F, 32F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(744, 1093); - this.Controls.Add(this.labelBattery); - this.Controls.Add(this.buttonKeyboardColor); - this.Controls.Add(this.comboKeyboard); - this.Controls.Add(this.pictureBox1); - this.Controls.Add(this.label1); - this.Controls.Add(this.checkBoost); - this.Controls.Add(this.checkScreen); - this.Controls.Add(this.tableScreen); - this.Controls.Add(this.pictureScreen); - this.Controls.Add(this.labelSreen); - this.Controls.Add(this.buttonQuit); - this.Controls.Add(this.checkGPU); - this.Controls.Add(this.picturePerf); - this.Controls.Add(this.labelPerf); - this.Controls.Add(this.labelCPUFan); - this.Controls.Add(this.tablePerf); - this.Controls.Add(this.pictureGPU); - this.Controls.Add(this.labelGPU); - this.Controls.Add(this.labelGPUFan); - this.Controls.Add(this.tableGPU); - this.Controls.Add(this.pictureBattery); - this.Controls.Add(this.labelBatteryTitle); - this.Controls.Add(this.trackBattery); - this.Controls.Add(this.checkStartup); - this.Controls.Add(this.pictureBox2); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); - this.MaximizeBox = false; - this.MdiChildrenMinimizedAnchorBottom = false; - this.MinimizeBox = false; - this.Name = "SettingsForm"; - this.Padding = new System.Windows.Forms.Padding(9, 11, 9, 11); - this.ShowIcon = false; - this.ShowInTaskbar = false; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "G-Helper"; - this.Load += new System.EventHandler(this.Settings_Load); - ((System.ComponentModel.ISupportInitialize)(this.trackBattery)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBattery)).EndInit(); - this.tableGPU.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.pictureGPU)).EndInit(); - this.tablePerf.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.picturePerf)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureScreen)).EndInit(); - this.tableScreen.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - + AutoScaleDimensions = new SizeF(13F, 32F); + AutoScaleMode = AutoScaleMode.Font; + ClientSize = new Size(728, 1079); + Controls.Add(buttonFans); + Controls.Add(labelBattery); + Controls.Add(buttonKeyboardColor); + Controls.Add(comboKeyboard); + Controls.Add(pictureBox1); + Controls.Add(label1); + Controls.Add(checkBoost); + Controls.Add(checkScreen); + Controls.Add(tableScreen); + Controls.Add(pictureScreen); + Controls.Add(labelSreen); + Controls.Add(buttonQuit); + Controls.Add(checkGPU); + Controls.Add(picturePerf); + Controls.Add(labelPerf); + Controls.Add(labelCPUFan); + Controls.Add(tablePerf); + Controls.Add(pictureGPU); + Controls.Add(labelGPU); + Controls.Add(labelGPUFan); + Controls.Add(tableGPU); + Controls.Add(pictureBattery); + Controls.Add(labelBatteryTitle); + Controls.Add(trackBattery); + Controls.Add(checkStartup); + FormBorderStyle = FormBorderStyle.FixedSingle; + Margin = new Padding(4, 2, 4, 2); + MaximizeBox = false; + MdiChildrenMinimizedAnchorBottom = false; + MinimizeBox = false; + Name = "SettingsForm"; + Padding = new Padding(9, 11, 9, 11); + ShowIcon = false; + StartPosition = FormStartPosition.CenterScreen; + Text = "G-Helper"; + Load += Settings_Load; + ((System.ComponentModel.ISupportInitialize)trackBattery).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureBattery).EndInit(); + tableGPU.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)pictureGPU).EndInit(); + tablePerf.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)picturePerf).EndInit(); + ((System.ComponentModel.ISupportInitialize)pictureScreen).EndInit(); + tableScreen.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + ResumeLayout(false); + PerformLayout(); } #endregion @@ -603,7 +596,7 @@ private Label label1; private ComboBox comboKeyboard; private Button buttonKeyboardColor; - private PictureBox pictureBox2; private Label labelBattery; + private Button buttonFans; } } \ No newline at end of file diff --git a/Settings.cs b/Settings.cs index 89eddf31..1db7e3d1 100644 --- a/Settings.cs +++ b/Settings.cs @@ -17,6 +17,8 @@ namespace GHelper static System.Timers.Timer aTimer = default!; + Fans fans; + public SettingsForm() { @@ -60,13 +62,33 @@ namespace GHelper buttonKeyboardColor.Click += ButtonKeyboardColor_Click; + buttonFans.Click += ButtonFans_Click; + SetTimer(); + + + } + + private void ButtonFans_Click(object? sender, EventArgs e) + { + if (fans == null || fans.Text == "") + { + fans = new Fans(); + fans.Show(); + } else + { + fans.Close(); + } + } private void ButtonKeyboardColor_Click(object? sender, EventArgs e) { + if (sender is null) + return; + Button but = (Button)sender; ColorDialog colorDlg = new ColorDialog(); @@ -141,6 +163,9 @@ namespace GHelper private void ComboKeyboard_SelectedValueChanged(object? sender, EventArgs e) { + if (sender is null) + return; + ComboBox cmb = (ComboBox)sender; SetAuraMode(cmb.SelectedIndex); } @@ -148,6 +173,9 @@ namespace GHelper private void CheckBoost_Click(object? sender, EventArgs e) { + if (sender is null) + return; + CheckBox chk = (CheckBox)sender; if (chk.Checked) NativeMethods.SetCPUBoost(3); @@ -403,6 +431,9 @@ namespace GHelper labelPerf.Text = "Performance Mode: not supported"; } + if (fans != null && fans.Text != "") + fans.LoadFans(); + } @@ -611,11 +642,11 @@ namespace GHelper CheckBox chk = (CheckBox)sender; if (chk.Checked) { - Program.scheduler.Schedule(); + Startup.Schedule(); } else { - Program.scheduler.UnSchedule(); + Startup.UnSchedule(); } } @@ -638,14 +669,20 @@ namespace GHelper } - private void trackBatteryChange(object sender, EventArgs e) + private void trackBatteryChange(object? sender, EventArgs e) { + if (sender is null) + return; + TrackBar bar = (TrackBar)sender; SetBatteryChargeLimit(bar.Value); } - private void checkGPU_CheckedChanged(object sender, EventArgs e) + private void checkGPU_CheckedChanged(object? sender, EventArgs e) { + if (sender is null) + return; + CheckBox chk = (CheckBox)sender; if (chk.Checked) Program.config.setConfig("gpu_auto", 1); @@ -654,8 +691,12 @@ namespace GHelper } - private void checkScreen_CheckedChanged(object sender, EventArgs e) + private void checkScreen_CheckedChanged(object? sender, EventArgs e) { + + if (sender is null) + return; + CheckBox chk = (CheckBox)sender; if (chk.Checked) Program.config.setConfig("screen_auto", 1); diff --git a/Startup.cs b/Startup.cs new file mode 100644 index 00000000..597ced1d --- /dev/null +++ b/Startup.cs @@ -0,0 +1,42 @@ +using Microsoft.Win32.TaskScheduler; +using System.Diagnostics; +using System.Security.Principal; + +public class Startup +{ + + static string taskName = "GHelper"; + + public static bool IsScheduled() + { + TaskService taskService = new TaskService(); + return (taskService.RootFolder.AllTasks.Any(t => t.Name == taskName)); + } + + public static void Schedule() + { + + string strExeFilePath = Application.ExecutablePath; + + if (strExeFilePath is null) return; + + var userId = WindowsIdentity.GetCurrent().Name; + + Debug.WriteLine(strExeFilePath); + TaskDefinition td = TaskService.Instance.NewTask(); + td.RegistrationInfo.Description = "GHelper Auto Start"; + td.Triggers.Add(new LogonTrigger { UserId = userId, }); + td.Actions.Add(strExeFilePath); + + td.Settings.StopIfGoingOnBatteries = false; + td.Settings.DisallowStartIfOnBatteries = false; + + TaskService.Instance.RootFolder.RegisterTaskDefinition(taskName, td); + } + + public static void UnSchedule() + { + TaskService taskService = new TaskService(); + taskService.RootFolder.DeleteTask(taskName); + } +} diff --git a/app.manifest b/app.manifest index a132f214..e1a3099c 100644 --- a/app.manifest +++ b/app.manifest @@ -53,13 +53,16 @@ Makes the application long-path aware. See https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation --> - - true - true - - + + + PerMonitorV2, PerMonitor, System + true + + - + + +