Compare commits

...

12 Commits
v0.32 ... v0.33

Author SHA1 Message Date
seerge
64e390a61f UI tweaks 2023-03-20 17:10:18 +01:00
seerge
1cd808de07 Auto theme change 2023-03-20 16:42:51 +01:00
seerge
d82f1c8d70 Fix crash for gputemp reader 2023-03-20 15:43:51 +01:00
seerge
9189cf0a46 Dark Theme 2023-03-20 14:38:56 +01:00
seerge
3a7c4278a0 Merge branch 'main' of https://github.com/seerge/g-helper 2023-03-20 14:32:47 +01:00
seerge
7065ba8661 Dark Theme 2023-03-20 14:32:45 +01:00
Serge
1bce4a4b51 Update README.md 2023-03-20 11:45:16 +01:00
Serge
468f9c4034 Update bug_report.md 2023-03-19 23:45:02 +01:00
seerge
4d347df45c Attempt to fix auto gpu switch 2023-03-19 21:59:22 +01:00
seerge
d7f1d1d5fd Merge branch 'main' of https://github.com/seerge/g-helper 2023-03-19 17:39:32 +01:00
seerge
6800ae38dd Custom fan-axis for 401 model 2023-03-19 17:39:30 +01:00
Serge
9b2b96fbf0 Update README.md 2023-03-19 13:57:02 +01:00
17 changed files with 755 additions and 324 deletions

View File

@@ -25,14 +25,7 @@ If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):** **Desktop (please complete the following information):**
- OS: [e.g. iOS] - OS: [e.g. iOS]
- Browser [e.g. chrome, safari] - Laptop model
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context** **Additional context**
Add any other context about the problem here. Add any other context about the problem here.

View File

@@ -20,6 +20,7 @@ public class ASUSWmi
public const uint BatteryLimit = 0x00120057; public const uint BatteryLimit = 0x00120057;
public const uint ScreenOverdrive = 0x00050019; public const uint ScreenOverdrive = 0x00050019;
public const uint ScreenMiniled = 0x0005001E;
public const uint DevsCPUFanCurve = 0x00110024; public const uint DevsCPUFanCurve = 0x00110024;
public const uint DevsGPUFanCurve = 0x00110025; public const uint DevsGPUFanCurve = 0x00110025;

View File

@@ -1,4 +1,5 @@
using System.Text.Json; using System.Management;
using System.Text.Json;
public class AppConfig public class AppConfig
{ {
@@ -6,6 +7,8 @@ public class AppConfig
public string appPath; public string appPath;
string configFile; string configFile;
string _model;
public Dictionary<string, object> config = new Dictionary<string, object>(); public Dictionary<string, object> config = new Dictionary<string, object>();
public AppConfig() public AppConfig()
@@ -36,6 +39,26 @@ public class AppConfig
} }
public bool ContainsModel(string contains)
{
if (_model is null)
{
_model = "";
using (var searcher = new ManagementObjectSearcher(@"Select * from Win32_ComputerSystem"))
{
foreach (var process in searcher.Get())
{
_model = process["Model"].ToString();
break;
}
}
}
return (_model is not null && _model.Contains(contains));
}
private void initConfig() private void initConfig()
{ {
config = new Dictionary<string, object>(); config = new Dictionary<string, object>();

150
app/ControlHelper.cs Normal file
View File

@@ -0,0 +1,150 @@
using CustomControls;
using System.Drawing.Drawing2D;
using System.Windows.Forms.DataVisualization.Charting;
public static class ControlHelper
{
static bool _invert = false;
static float _scale = 1;
static Color formBack;
static Color backMain;
static Color foreMain;
static Color borderMain;
static Color buttonMain;
public static void Adjust(RForm container, float baseScale = 2, bool invert = false)
{
_scale = GetDpiScale(container).Value / baseScale;
if (container.darkTheme)
{
formBack = Color.FromArgb(255, 35, 35, 35);
backMain = Color.FromArgb(255, 50, 50, 50);
foreMain = Color.White;
borderMain = Color.FromArgb(255, 50, 50, 50);
buttonMain = Color.FromArgb(255, 100, 100, 100);
}
else
{
formBack = SystemColors.Control;
backMain = SystemColors.ControlLightLight;
foreMain = SystemColors.ControlText;
borderMain = Color.LightGray;
buttonMain = SystemColors.ControlLight;
}
container.BackColor = formBack;
container.ForeColor = foreMain;
_invert = invert;
AdjustControls(container.Controls);
_invert = false;
}
private static void AdjustControls(Control.ControlCollection controls)
{
foreach (Control control in controls)
{
var button = control as Button;
if (button != null)
{
button.BackColor = backMain;
button.ForeColor = foreMain;
button.FlatStyle = FlatStyle.Flat;
button.FlatAppearance.BorderColor = borderMain;
if (button.Image is not null)
button.Image = AdjustImage(button.Image);
}
var pictureBox = control as PictureBox;
if (pictureBox != null)
{
if (pictureBox.BackgroundImage is not null)
pictureBox.BackgroundImage = AdjustImage(pictureBox.BackgroundImage);
}
var combo = control as RComboBox;
if (combo != null)
{
combo.BackColor = backMain;
combo.ForeColor = foreMain;
combo.BorderColor = backMain;
combo.ButtonColor = buttonMain;
}
var gb = control as GroupBox;
if (gb != null)
{
gb.ForeColor = foreMain;
}
var chart = control as Chart;
if (chart != null)
{
chart.BackColor = backMain;
chart.ChartAreas[0].BackColor = backMain;
chart.ChartAreas[0].AxisX.MajorGrid.LineColor = foreMain;
chart.ChartAreas[0].AxisY.MajorGrid.LineColor = foreMain;
chart.ChartAreas[0].AxisX.TitleForeColor = foreMain;
chart.ChartAreas[0].AxisY.TitleForeColor = foreMain;
chart.ChartAreas[0].AxisX.LabelStyle.ForeColor = foreMain;
chart.ChartAreas[0].AxisY.LabelStyle.ForeColor = foreMain;
chart.ChartAreas[0].AxisX.MajorTickMark.LineColor = foreMain;
chart.ChartAreas[0].AxisY.MajorTickMark.LineColor = foreMain;
chart.ChartAreas[0].AxisX.LineColor = foreMain;
chart.ChartAreas[0].AxisY.LineColor = foreMain;
chart.Titles[0].ForeColor = foreMain;
}
AdjustControls(control.Controls);
}
}
public static Lazy<float> GetDpiScale(Control control)
{
return new Lazy<float>(() =>
{
using (var graphics = control.CreateGraphics())
return graphics.DpiX / 96.0f;
});
}
private static Image AdjustImage(Image image)
{
var newSize = new Size((int)(image.Width * _scale), (int)(image.Height * _scale));
var pic = new Bitmap(newSize.Width, newSize.Height);
using (var g = Graphics.FromImage(pic))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(image, new Rectangle(new Point(), newSize));
}
if (_invert)
{
for (int y = 0; (y <= (pic.Height - 1)); y++)
{
for (int x = 0; (x <= (pic.Width - 1)); x++)
{
Color col = pic.GetPixel(x, y);
pic.SetPixel(x, y, Color.FromArgb(col.A, (255 - col.R), (255 - col.G), (255 - col.B)));
}
}
}
return pic;
}
}

313
app/CustomControls.cs Normal file
View File

@@ -0,0 +1,313 @@
using System.ComponentModel;
using System.Drawing.Drawing2D;
using System.Runtime.InteropServices;
namespace CustomControls
{
public class RForm : Form
{
protected static Color colorEco = Color.FromArgb(255, 6, 180, 138);
protected static Color colorStandard = Color.FromArgb(255, 58, 174, 239);
protected static Color colorTurbo = Color.FromArgb(255, 255, 32, 32);
[DllImport("UXTheme.dll", SetLastError = true, EntryPoint = "#138")]
public static extern bool CheckSystemDarkModeStatus();
[DllImport("DwmApi")] //System.Runtime.InteropServices
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);
public bool darkTheme;
public bool invert = false;
public void InitTheme()
{
bool newDarkTheme = CheckSystemDarkModeStatus();
invert = (darkTheme != newDarkTheme);
darkTheme = newDarkTheme;
ControlHelper.Adjust(this, 2, invert);
try
{
DwmSetWindowAttribute(this.Handle, 20, new[] { darkTheme ? 1 : 0 }, 4);
} catch { }
}
}
public class RComboBox : ComboBox
{
private Color borderColor = Color.Gray;
[DefaultValue(typeof(Color), "Gray")]
public Color BorderColor
{
get { return borderColor; }
set
{
if (borderColor != value)
{
borderColor = value;
Invalidate();
}
}
}
private Color buttonColor = Color.LightGray;
[DefaultValue(typeof(Color), "LightGray")]
public Color ButtonColor
{
get { return buttonColor; }
set
{
if (buttonColor != value)
{
buttonColor = value;
Invalidate();
}
}
}
private Color arrowColor = Color.Black;
[DefaultValue(typeof(Color), "Black")]
public Color ArrowColor
{
get { return arrowColor; }
set
{
if (arrowColor != value)
{
arrowColor = value;
Invalidate();
}
}
}
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_PAINT && DropDownStyle != ComboBoxStyle.Simple)
{
var clientRect = ClientRectangle;
var dropDownButtonWidth = SystemInformation.HorizontalScrollBarArrowWidth;
var outerBorder = new Rectangle(clientRect.Location,
new Size(clientRect.Width - 1, clientRect.Height - 1));
var innerBorder = new Rectangle(outerBorder.X + 1, outerBorder.Y + 1,
outerBorder.Width - dropDownButtonWidth - 2, outerBorder.Height - 2);
var innerInnerBorder = new Rectangle(innerBorder.X + 1, innerBorder.Y + 1,
innerBorder.Width - 2, innerBorder.Height - 2);
var dropDownRect = new Rectangle(innerBorder.Right + 1, innerBorder.Y,
dropDownButtonWidth, innerBorder.Height + 1);
if (RightToLeft == RightToLeft.Yes)
{
innerBorder.X = clientRect.Width - innerBorder.Right;
innerInnerBorder.X = clientRect.Width - innerInnerBorder.Right;
dropDownRect.X = clientRect.Width - dropDownRect.Right;
dropDownRect.Width += 1;
}
var innerBorderColor = Enabled ? BackColor : SystemColors.Control;
var outerBorderColor = Enabled ? BorderColor : SystemColors.ControlDark;
var buttonColor = Enabled ? ButtonColor : SystemColors.Control;
var middle = new Point(dropDownRect.Left + dropDownRect.Width / 2,
dropDownRect.Top + dropDownRect.Height / 2);
var arrow = new Point[]
{
new Point(middle.X - 3, middle.Y - 2),
new Point(middle.X + 4, middle.Y - 2),
new Point(middle.X, middle.Y + 2)
};
var ps = new PAINTSTRUCT();
bool shoulEndPaint = false;
IntPtr dc;
if (m.WParam == IntPtr.Zero)
{
dc = BeginPaint(Handle, ref ps);
m.WParam = dc;
shoulEndPaint = true;
}
else
{
dc = m.WParam;
}
var rgn = CreateRectRgn(innerInnerBorder.Left, innerInnerBorder.Top,
innerInnerBorder.Right, innerInnerBorder.Bottom);
SelectClipRgn(dc, rgn);
DefWndProc(ref m);
DeleteObject(rgn);
rgn = CreateRectRgn(clientRect.Left, clientRect.Top,
clientRect.Right, clientRect.Bottom);
SelectClipRgn(dc, rgn);
using (var g = Graphics.FromHdc(dc))
{
using (var b = new SolidBrush(buttonColor))
{
g.FillRectangle(b, dropDownRect);
}
using (var b = new SolidBrush(arrowColor))
{
g.FillPolygon(b, arrow);
}
using (var p = new Pen(innerBorderColor))
{
g.DrawRectangle(p, innerBorder);
g.DrawRectangle(p, innerInnerBorder);
}
using (var p = new Pen(outerBorderColor))
{
g.DrawRectangle(p, outerBorder);
}
}
if (shoulEndPaint)
EndPaint(Handle, ref ps);
DeleteObject(rgn);
}
else
base.WndProc(ref m);
}
private const int WM_PAINT = 0xF;
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int L, T, R, B;
}
[StructLayout(LayoutKind.Sequential)]
public struct PAINTSTRUCT
{
public IntPtr hdc;
public bool fErase;
public int rcPaint_left;
public int rcPaint_top;
public int rcPaint_right;
public int rcPaint_bottom;
public bool fRestore;
public bool fIncUpdate;
public int reserved1;
public int reserved2;
public int reserved3;
public int reserved4;
public int reserved5;
public int reserved6;
public int reserved7;
public int reserved8;
}
[DllImport("user32.dll")]
private static extern IntPtr BeginPaint(IntPtr hWnd,
[In, Out] ref PAINTSTRUCT lpPaint);
[DllImport("user32.dll")]
private static extern bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT lpPaint);
[DllImport("gdi32.dll")]
public static extern int SelectClipRgn(IntPtr hDC, IntPtr hRgn);
[DllImport("user32.dll")]
public static extern int GetUpdateRgn(IntPtr hwnd, IntPtr hrgn, bool fErase);
public enum RegionFlags
{
ERROR = 0,
NULLREGION = 1,
SIMPLEREGION = 2,
COMPLEXREGION = 3,
}
[DllImport("gdi32.dll")]
internal static extern bool DeleteObject(IntPtr hObject);
[DllImport("gdi32.dll")]
private static extern IntPtr CreateRectRgn(int x1, int y1, int x2, int y2);
}
public class RButton : Button
{
//Fields
private int borderSize = 5;
private int borderRadius = 3;
private bool activated = false;
private Color borderColor = Color.Transparent;
public Color BorderColor
{
get { return borderColor; }
set
{
borderColor = value;
}
}
public bool Activated
{
get { return activated; }
set
{
if (activated != value)
this.Invalidate();
activated = value;
}
}
public RButton()
{
this.FlatStyle = FlatStyle.Flat;
this.FlatAppearance.BorderSize = 0;
}
private GraphicsPath GetFigurePath(Rectangle rect, int radius)
{
GraphicsPath path = new GraphicsPath();
float curveSize = radius * 2F;
path.StartFigure();
path.AddArc(rect.X, rect.Y, curveSize, curveSize, 180, 90);
path.AddArc(rect.Right - curveSize, rect.Y, curveSize, curveSize, 270, 90);
path.AddArc(rect.Right - curveSize, rect.Bottom - curveSize, curveSize, curveSize, 0, 90);
path.AddArc(rect.X, rect.Bottom - curveSize, curveSize, curveSize, 90, 90);
path.CloseFigure();
return path;
}
protected override void OnPaint(PaintEventArgs pevent)
{
base.OnPaint(pevent);
float ratio = pevent.Graphics.DpiX / 192.0f;
int border = (int)(ratio * borderSize);
Rectangle rectSurface = this.ClientRectangle;
Rectangle rectBorder = Rectangle.Inflate(rectSurface, -border, -border);
Color borderDrawColor = activated ? borderColor : Color.Transparent;
using (GraphicsPath pathSurface = GetFigurePath(rectSurface, borderRadius + border))
using (GraphicsPath pathBorder = GetFigurePath(rectBorder, borderRadius))
using (Pen penSurface = new Pen(this.Parent.BackColor, border))
using (Pen penBorder = new Pen(borderDrawColor, border))
{
penBorder.Alignment = PenAlignment.Outset;
pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
this.Region = new Region(pathSurface);
pevent.Graphics.DrawPath(penSurface, pathSurface);
pevent.Graphics.DrawPath(penBorder, pathBorder);
}
if (!Enabled && ForeColor != SystemColors.ControlText)
{
var rect = pevent.ClipRectangle;
if (Image is not null)
{
rect.Y += Image.Height;
rect.Height -= Image.Height;
}
TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;
TextRenderer.DrawText(pevent.Graphics, this.Text, this.Font, rect, Color.Gray, flags);
}
}
}
}

62
app/Fans.Designer.cs generated
View File

@@ -1,4 +1,7 @@
namespace GHelper using CustomControls;
using System.Windows.Forms.DataVisualization.Charting;
namespace GHelper
{ {
partial class Fans partial class Fans
{ {
@@ -28,25 +31,27 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); ChartArea chartArea3 = new ChartArea();
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); Title title3 = new Title();
ChartArea chartArea4 = new ChartArea();
Title title4 = new Title();
panelFans = new Panel(); panelFans = new Panel();
labelTip = new Label(); labelTip = new Label();
labelBoost = new Label(); labelBoost = new Label();
comboBoost = new ComboBox(); comboBoost = new RComboBox();
picturePerf = new PictureBox(); picturePerf = new PictureBox();
tableFanCharts = new TableLayoutPanel(); tableFanCharts = new TableLayoutPanel();
chartGPU = new System.Windows.Forms.DataVisualization.Charting.Chart(); chartGPU = new Chart();
chartCPU = new System.Windows.Forms.DataVisualization.Charting.Chart(); chartCPU = new Chart();
labelFans = new Label(); labelFans = new Label();
checkAuto = new CheckBox(); checkAuto = new CheckBox();
buttonReset = new Button(); buttonReset = new RButton();
buttonApply = new Button(); buttonApply = new RButton();
panelPower = new Panel(); panelPower = new Panel();
pictureBox1 = new PictureBox(); pictureBox1 = new PictureBox();
labelPowerLimits = new Label(); labelPowerLimits = new Label();
checkApplyPower = new CheckBox(); checkApplyPower = new CheckBox();
buttonApplyPower = new Button(); buttonApplyPower = new RButton();
panelCPU = new Panel(); panelCPU = new Panel();
labelCPU = new Label(); labelCPU = new Label();
label2 = new Label(); label2 = new Label();
@@ -114,6 +119,7 @@
// comboBoost // comboBoost
// //
comboBoost.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; comboBoost.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
comboBoost.BorderColor = Color.White;
comboBoost.DropDownStyle = ComboBoxStyle.DropDownList; comboBoost.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoost.FormattingEnabled = true; comboBoost.FormattingEnabled = true;
comboBoost.Items.AddRange(new object[] { "Disabled", "Enabled", "Aggressive", "Efficient Enabled", "Efficient Aggressive" }); comboBoost.Items.AddRange(new object[] { "Disabled", "Enabled", "Aggressive", "Efficient Enabled", "Efficient Aggressive" });
@@ -154,8 +160,8 @@
// //
// chartGPU // chartGPU
// //
chartArea1.Name = "ChartArea1"; chartArea3.Name = "ChartArea1";
chartGPU.ChartAreas.Add(chartArea1); chartGPU.ChartAreas.Add(chartArea3);
chartGPU.Dock = DockStyle.Fill; chartGPU.Dock = DockStyle.Fill;
chartGPU.Location = new Point(2, 506); chartGPU.Location = new Point(2, 506);
chartGPU.Margin = new Padding(2, 10, 2, 10); chartGPU.Margin = new Padding(2, 10, 2, 10);
@@ -163,11 +169,13 @@
chartGPU.Size = new Size(760, 476); chartGPU.Size = new Size(760, 476);
chartGPU.TabIndex = 17; chartGPU.TabIndex = 17;
chartGPU.Text = "chart1"; chartGPU.Text = "chart1";
title3.Name = "Title1";
chartGPU.Titles.Add(title3);
// //
// chartCPU // chartCPU
// //
chartArea2.Name = "ChartArea1"; chartArea4.Name = "ChartArea1";
chartCPU.ChartAreas.Add(chartArea2); chartCPU.ChartAreas.Add(chartArea4);
chartCPU.Dock = DockStyle.Fill; chartCPU.Dock = DockStyle.Fill;
chartCPU.Location = new Point(2, 10); chartCPU.Location = new Point(2, 10);
chartCPU.Margin = new Padding(2, 10, 2, 10); chartCPU.Margin = new Padding(2, 10, 2, 10);
@@ -175,6 +183,8 @@
chartCPU.Size = new Size(760, 476); chartCPU.Size = new Size(760, 476);
chartCPU.TabIndex = 14; chartCPU.TabIndex = 14;
chartCPU.Text = "chartCPU"; chartCPU.Text = "chartCPU";
title4.Name = "Title1";
chartCPU.Titles.Add(title4);
// //
// labelFans // labelFans
// //
@@ -201,25 +211,33 @@
// //
// buttonReset // buttonReset
// //
buttonReset.Activated = false;
buttonReset.Anchor = AnchorStyles.Bottom | AnchorStyles.Left; buttonReset.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonReset.BackColor = SystemColors.ControlLight;
buttonReset.BorderColor = Color.Transparent;
buttonReset.FlatStyle = FlatStyle.Flat;
buttonReset.Location = new Point(30, 1081); buttonReset.Location = new Point(30, 1081);
buttonReset.Margin = new Padding(4, 2, 4, 2); buttonReset.Margin = new Padding(4, 2, 4, 2);
buttonReset.Name = "buttonReset"; buttonReset.Name = "buttonReset";
buttonReset.Size = new Size(232, 44); buttonReset.Size = new Size(232, 44);
buttonReset.TabIndex = 15; buttonReset.TabIndex = 15;
buttonReset.Text = "Factory Defaults"; buttonReset.Text = "Factory Defaults";
buttonReset.UseVisualStyleBackColor = true; buttonReset.UseVisualStyleBackColor = false;
// //
// buttonApply // buttonApply
// //
buttonApply.Activated = false;
buttonApply.Anchor = AnchorStyles.Bottom | AnchorStyles.Right; buttonApply.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
buttonApply.BackColor = SystemColors.ControlLight;
buttonApply.BorderColor = Color.Transparent;
buttonApply.FlatStyle = FlatStyle.Flat;
buttonApply.Location = new Point(542, 1081); buttonApply.Location = new Point(542, 1081);
buttonApply.Margin = new Padding(4, 2, 4, 2); buttonApply.Margin = new Padding(4, 2, 4, 2);
buttonApply.Name = "buttonApply"; buttonApply.Name = "buttonApply";
buttonApply.Size = new Size(248, 44); buttonApply.Size = new Size(248, 44);
buttonApply.TabIndex = 14; buttonApply.TabIndex = 14;
buttonApply.Text = "Apply Fan Curve"; buttonApply.Text = "Apply Fan Curve";
buttonApply.UseVisualStyleBackColor = true; buttonApply.UseVisualStyleBackColor = false;
// //
// panelPower // panelPower
// //
@@ -277,14 +295,18 @@
// //
// buttonApplyPower // buttonApplyPower
// //
buttonApplyPower.Activated = false;
buttonApplyPower.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; buttonApplyPower.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
buttonApplyPower.BackColor = SystemColors.ControlLight;
buttonApplyPower.BorderColor = Color.Transparent;
buttonApplyPower.FlatStyle = FlatStyle.Flat;
buttonApplyPower.Location = new Point(20, 1081); buttonApplyPower.Location = new Point(20, 1081);
buttonApplyPower.Margin = new Padding(4, 2, 4, 2); buttonApplyPower.Margin = new Padding(4, 2, 4, 2);
buttonApplyPower.Name = "buttonApplyPower"; buttonApplyPower.Name = "buttonApplyPower";
buttonApplyPower.Size = new Size(324, 44); buttonApplyPower.Size = new Size(324, 44);
buttonApplyPower.TabIndex = 24; buttonApplyPower.TabIndex = 24;
buttonApplyPower.Text = "Apply Power Limits"; buttonApplyPower.Text = "Apply Power Limits";
buttonApplyPower.UseVisualStyleBackColor = true; buttonApplyPower.UseVisualStyleBackColor = false;
// //
// panelCPU // panelCPU
// //
@@ -456,11 +478,11 @@
#endregion #endregion
private Panel panelFans; private Panel panelFans;
private CheckBox checkAuto; private CheckBox checkAuto;
private Button buttonReset; private RButton buttonReset;
private Button buttonApply; private RButton buttonApply;
private Panel panelPower; private Panel panelPower;
private CheckBox checkApplyPower; private CheckBox checkApplyPower;
private Button buttonApplyPower; private RButton buttonApplyPower;
private Panel panelCPU; private Panel panelCPU;
private Label labelCPU; private Label labelCPU;
private Label label2; private Label label2;
@@ -479,7 +501,7 @@
private Label labelFans; private Label labelFans;
private PictureBox picturePerf; private PictureBox picturePerf;
private PictureBox pictureBox1; private PictureBox pictureBox1;
private ComboBox comboBoost; private RComboBox comboBoost;
private Label labelBoost; private Label labelBoost;
private Label labelTip; private Label labelTip;
} }

View File

@@ -1,24 +1,23 @@
using System; using System.Diagnostics;
using System.Diagnostics;
using System.Diagnostics.Metrics;
using System.Drawing.Imaging;
using System.Drawing.Text;
using System.IO;
using System.Windows.Forms.DataVisualization.Charting; using System.Windows.Forms.DataVisualization.Charting;
using CustomControls;
namespace GHelper namespace GHelper
{ {
public partial class Fans : Form public partial class Fans : RForm
{ {
DataPoint curPoint = null; DataPoint curPoint = null;
Series seriesCPU; Series seriesCPU;
Series seriesGPU; Series seriesGPU;
static int MinRPM, MaxRPM;
static string ChartPercToRPM(int percentage, string unit = "") static string ChartPercToRPM(int percentage, string unit = "")
{ {
if (percentage == 0) return "OFF"; if (percentage == 0) return "OFF";
return (1800 + 200 * Math.Floor(percentage * 0.2)).ToString() + unit;
return (200 * Math.Round((float)(MinRPM + (MaxRPM - MinRPM) * percentage * 0.01) / 200)).ToString() + unit;
} }
void SetChart(Chart chart, int device) void SetChart(Chart chart, int device)
@@ -34,10 +33,7 @@ namespace GHelper
if (Program.settingsForm.perfName.Length > 0) if (Program.settingsForm.perfName.Length > 0)
labelFans.Text = "Fan Profiles: " + Program.settingsForm.perfName; labelFans.Text = "Fan Profiles: " + Program.settingsForm.perfName;
if (chart.Titles.Count > 0) chart.Titles[0].Text = title;
chart.Titles[0].Text = title;
else
chart.Titles.Add(title);
chart.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.LightGray; chart.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.LightGray;
chart.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.LightGray; chart.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.LightGray;
@@ -84,6 +80,18 @@ namespace GHelper
{ {
InitializeComponent(); InitializeComponent();
InitTheme();
MinRPM = 1800;
if (Program.config.ContainsModel("401"))
MaxRPM = 7200;
else if (Program.config.ContainsModel("503"))
MaxRPM = 6800;
else
MaxRPM = 5800;
labelTip.Visible = false; labelTip.Visible = false;
labelTip.BackColor = Color.Transparent; labelTip.BackColor = Color.Transparent;
@@ -93,8 +101,8 @@ namespace GHelper
seriesCPU = chartCPU.Series.Add("CPU"); seriesCPU = chartCPU.Series.Add("CPU");
seriesGPU = chartGPU.Series.Add("GPU"); seriesGPU = chartGPU.Series.Add("GPU");
seriesCPU.Color = Color.Blue; seriesCPU.Color = colorStandard;
seriesGPU.Color = Color.Red; seriesGPU.Color = colorTurbo;
chartCPU.MouseMove += ChartCPU_MouseMove; chartCPU.MouseMove += ChartCPU_MouseMove;
chartCPU.MouseUp += ChartCPU_MouseUp; chartCPU.MouseUp += ChartCPU_MouseUp;
@@ -245,12 +253,12 @@ namespace GHelper
{ {
if (applied) if (applied)
{ {
labelApplied.ForeColor = Color.Blue; labelApplied.ForeColor = colorStandard;
labelApplied.Text = "Applied"; labelApplied.Text = "Applied";
} }
else else
{ {
labelApplied.ForeColor = Color.Red; labelApplied.ForeColor = colorTurbo;
labelApplied.Text = "Not Applied"; labelApplied.Text = "Not Applied";
} }

View File

@@ -16,7 +16,7 @@
<PlatformTarget>x64</PlatformTarget> <PlatformTarget>x64</PlatformTarget>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly> <ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks> <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<AssemblyVersion>0.31</AssemblyVersion> <AssemblyVersion>0.34</AssemblyVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@@ -51,15 +51,6 @@
<PackageReference Include="WinForms.DataVisualization" Version="1.7.0" /> <PackageReference Include="WinForms.DataVisualization" Version="1.7.0" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.Management.Infrastructure">
<HintPath>..\..\.nuget\packages\microsoft.management.infrastructure\2.0.0\ref\net451\Microsoft.Management.Infrastructure.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Management.Infrastructure.Native">
<HintPath>..\..\.nuget\packages\microsoft.management.infrastructure.runtime.win\2.0.0\runtimes\win10-x64\lib\netstandard1.6\Microsoft.Management.Infrastructure.Native.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="Resources\eco.ico"> <Content Include="Resources\eco.ico">
<CopyToOutputDirectory>Never</CopyToOutputDirectory> <CopyToOutputDirectory>Never</CopyToOutputDirectory>

View File

@@ -58,28 +58,36 @@ public static class HardwareMonitor
} }
public static void RecreateGpuTemperatureProvider() { public static void RecreateGpuTemperatureProvider() {
try { try
{
GpuTemperatureProvider?.Dispose(); GpuTemperatureProvider?.Dispose();
// Detect valid GPU temperature provider. // Detect valid GPU temperature provider.
// We start with NVIDIA because there's always at least an integrated AMD GPU // We start with NVIDIA because there's always at least an integrated AMD GPU
IGpuTemperatureProvider gpuTemperatureProvider = new NvidiaGpuTemperatureProvider(); IGpuTemperatureProvider gpuTemperatureProvider = new NvidiaGpuTemperatureProvider();
if (gpuTemperatureProvider.IsValid) { if (gpuTemperatureProvider.IsValid)
{
GpuTemperatureProvider = gpuTemperatureProvider; GpuTemperatureProvider = gpuTemperatureProvider;
return; return;
} }
gpuTemperatureProvider.Dispose(); gpuTemperatureProvider.Dispose();
gpuTemperatureProvider = new AmdGpuTemperatureProvider(); gpuTemperatureProvider = new AmdGpuTemperatureProvider();
if (gpuTemperatureProvider.IsValid) { if (gpuTemperatureProvider.IsValid)
{
GpuTemperatureProvider = gpuTemperatureProvider; GpuTemperatureProvider = gpuTemperatureProvider;
return; return;
} }
gpuTemperatureProvider.Dispose(); gpuTemperatureProvider.Dispose();
GpuTemperatureProvider = null; GpuTemperatureProvider = null;
} finally { }
catch (Exception ex)
{
}
finally
{
Logger.WriteLine($"GpuTemperatureProvider: {GpuTemperatureProvider?.GetType().Name}"); Logger.WriteLine($"GpuTemperatureProvider: {GpuTemperatureProvider?.GetType().Name}");
} }
} }

View File

@@ -1,67 +0,0 @@
using System.Drawing.Drawing2D;
public static class HighDpiHelper
{
public static void AdjustControlImagesDpiScale(Control container, float baseScale = 2)
{
var dpiScale = GetDpiScale(container).Value;
AdjustControlImagesDpiScale(container.Controls, dpiScale / baseScale);
}
public static void AdjustButtonDpiScale(ButtonBase button, float dpiScale)
{
var image = button.Image;
if (image == null)
return;
button.Image = ScaleImage(image, dpiScale);
}
private static void AdjustControlImagesDpiScale(Control.ControlCollection controls, float dpiScale)
{
foreach (Control control in controls)
{
var button = control as ButtonBase;
if (button != null)
AdjustButtonDpiScale(button, dpiScale);
AdjustControlImagesDpiScale(control.Controls, dpiScale);
}
}
public static Lazy<float> GetDpiScale(Control control)
{
return new Lazy<float>(() =>
{
using (var graphics = control.CreateGraphics())
return graphics.DpiX / 96.0f;
});
}
private static Image ScaleImage(Image image, float dpiScale)
{
var newSize = ScaleSize(image.Size, dpiScale);
var newBitmap = new Bitmap(newSize.Width, newSize.Height);
using (var g = Graphics.FromImage(newBitmap))
{
// According to this blog post http://blogs.msdn.com/b/visualstudio/archive/2014/03/19/improving-high-dpi-support-for-visual-studio-2013.aspx
// NearestNeighbor is more adapted for 200% and 200%+ DPI
var interpolationMode = InterpolationMode.HighQualityBicubic;
if (dpiScale >= 2.0f)
interpolationMode = InterpolationMode.NearestNeighbor;
g.InterpolationMode = interpolationMode;
g.DrawImage(image, new Rectangle(new Point(), newSize));
}
return newBitmap;
}
private static Size ScaleSize(Size size, float scale)
{
return new Size((int)(size.Width * scale), (int)(size.Height * scale));
}
}

View File

@@ -1,4 +1,6 @@
namespace GHelper using CustomControls;
namespace GHelper
{ {
partial class Keyboard partial class Keyboard
{ {
@@ -31,12 +33,12 @@
groupBox1 = new GroupBox(); groupBox1 = new GroupBox();
textM4 = new TextBox(); textM4 = new TextBox();
textM3 = new TextBox(); textM3 = new TextBox();
comboM4 = new ComboBox(); comboM4 = new RComboBox();
labelM4 = new Label(); labelM4 = new Label();
comboM3 = new ComboBox(); comboM3 = new RComboBox();
labelM3 = new Label(); labelM3 = new Label();
textFNF4 = new TextBox(); textFNF4 = new TextBox();
comboFNF4 = new ComboBox(); comboFNF4 = new RComboBox();
labelFNF4 = new Label(); labelFNF4 = new Label();
groupBox1.SuspendLayout(); groupBox1.SuspendLayout();
SuspendLayout(); SuspendLayout();
@@ -161,13 +163,13 @@
private GroupBox groupBox1; private GroupBox groupBox1;
private Label labelM3; private Label labelM3;
private ComboBox comboM3; private RComboBox comboM3;
private ComboBox comboM4; private RComboBox comboM4;
private Label labelM4; private Label labelM4;
private TextBox textM4; private TextBox textM4;
private TextBox textM3; private TextBox textM3;
private TextBox textFNF4; private TextBox textFNF4;
private ComboBox comboFNF4; private RComboBox comboFNF4;
private Label labelFNF4; private Label labelFNF4;
} }
} }

View File

@@ -1,6 +1,8 @@
namespace GHelper using CustomControls;
namespace GHelper
{ {
public partial class Keyboard : Form public partial class Keyboard : RForm
{ {
Dictionary<string, string> customActions = new Dictionary<string, string> Dictionary<string, string> customActions = new Dictionary<string, string>
@@ -51,6 +53,7 @@
public Keyboard() public Keyboard()
{ {
InitializeComponent(); InitializeComponent();
InitTheme();
SetKeyCombo(comboM3, textM3, "m3"); SetKeyCombo(comboM3, textM3, "m3");
SetKeyCombo(comboM4, textM4, "m4"); SetKeyCombo(comboM4, textM4, "m4");

View File

@@ -27,6 +27,7 @@ namespace GHelper
private static IntPtr ds; private static IntPtr ds;
private static long lastAuto; private static long lastAuto;
private static long lastTheme;
// The main entry point for the application // The main entry point for the application
public static void Main() public static void Main()
@@ -48,6 +49,8 @@ namespace GHelper
} }
SystemEvents.UserPreferenceChanged += OnUserPreferenceChanged;
Application.EnableVisualStyles(); Application.EnableVisualStyles();
ds = settingsForm.Handle; ds = settingsForm.Handle;
@@ -77,6 +80,30 @@ namespace GHelper
} }
static void OnUserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e)
{
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastTheme) < 2000) return;
lastTheme = DateTimeOffset.Now.ToUnixTimeMilliseconds();
switch (e.Category)
{
case UserPreferenceCategory.General:
Debug.WriteLine("Theme Changed");
settingsForm.InitTheme();
if (settingsForm.fans is not null && settingsForm.fans.Text != "")
settingsForm.fans.InitTheme();
if (settingsForm.keyb is not null && settingsForm.keyb.Text != "")
settingsForm.keyb.InitTheme();
break;
}
}
static async void CheckForUpdates() static async void CheckForUpdates()
{ {
@@ -112,7 +139,7 @@ namespace GHelper
} }
public static void SetAutoModes() public static void SetAutoModes(bool wait = false)
{ {
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastAuto) < 1000) return; if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastAuto) < 1000) return;
@@ -126,6 +153,9 @@ namespace GHelper
settingsForm.AutoPerformance(isPlugged); settingsForm.AutoPerformance(isPlugged);
// waiting a bit before turning off dGPU
// if (wait && isPlugged != PowerLineStatus.Online) Thread.Sleep(3000);
bool switched = settingsForm.AutoGPUMode(isPlugged); bool switched = settingsForm.AutoGPUMode(isPlugged);
if (!switched) settingsForm.AutoScreen(isPlugged); if (!switched) settingsForm.AutoScreen(isPlugged);
@@ -135,7 +165,7 @@ namespace GHelper
private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e) private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{ {
Logger.WriteLine("Windows - Power Mode Changed"); Logger.WriteLine("Windows - Power Mode Changed");
SetAutoModes(); SetAutoModes(true);
} }

View File

@@ -1,85 +0,0 @@
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace CustomControls
{
public class RoundedButton : Button
{
//Fields
private int borderSize = 5;
private int borderRadius = 5;
private bool activated = false;
private Color borderColor = Color.Transparent;
public Color BorderColor
{
get { return borderColor; }
set
{
borderColor = value;
}
}
public bool Activated
{
get { return activated; }
set
{
if (activated != value)
this.Invalidate();
activated = value;
}
}
public RoundedButton()
{
this.FlatStyle = FlatStyle.Flat;
this.FlatAppearance.BorderSize = 0;
}
private GraphicsPath GetFigurePath(Rectangle rect, int radius)
{
GraphicsPath path = new GraphicsPath();
float curveSize = radius * 2F;
path.StartFigure();
path.AddArc(rect.X, rect.Y, curveSize, curveSize, 180, 90);
path.AddArc(rect.Right - curveSize, rect.Y, curveSize, curveSize, 270, 90);
path.AddArc(rect.Right - curveSize, rect.Bottom - curveSize, curveSize, curveSize, 0, 90);
path.AddArc(rect.X, rect.Bottom - curveSize, curveSize, curveSize, 90, 90);
path.CloseFigure();
return path;
}
protected override void OnPaint(PaintEventArgs pevent)
{
base.OnPaint(pevent);
float ratio = pevent.Graphics.DpiX / 192.0f;
int border = (int)(ratio * borderSize);
Rectangle rectSurface = this.ClientRectangle;
Rectangle rectBorder = Rectangle.Inflate(rectSurface, -border, -border);
Color borderDrawColor = activated ? borderColor : Color.Transparent;
using (GraphicsPath pathSurface = GetFigurePath(rectSurface, borderRadius+ border))
using (GraphicsPath pathBorder = GetFigurePath(rectBorder, borderRadius))
using (Pen penSurface = new Pen(this.Parent.BackColor, border))
using (Pen penBorder = new Pen(borderDrawColor, border))
{
penBorder.Alignment = PenAlignment.Outset;
pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
this.Region = new Region(pathSurface);
pevent.Graphics.DrawPath(penSurface, pathSurface);
pevent.Graphics.DrawPath(penBorder, pathBorder);
}
}
}
}

124
app/Settings.Designer.cs generated
View File

@@ -34,9 +34,9 @@ namespace GHelper
panelMatrix = new Panel(); panelMatrix = new Panel();
checkMatrix = new CheckBox(); checkMatrix = new CheckBox();
tableLayoutMatrix = new TableLayoutPanel(); tableLayoutMatrix = new TableLayoutPanel();
comboMatrix = new ComboBox(); comboMatrix = new RComboBox();
buttonMatrix = new Button(); buttonMatrix = new RButton();
comboMatrixRunning = new ComboBox(); comboMatrixRunning = new RComboBox();
pictureMatrix = new PictureBox(); pictureMatrix = new PictureBox();
labelMatrix = new Label(); labelMatrix = new Label();
panelBattery = new Panel(); panelBattery = new Panel();
@@ -46,45 +46,46 @@ namespace GHelper
labelBatteryTitle = new Label(); labelBatteryTitle = new Label();
trackBattery = new TrackBar(); trackBattery = new TrackBar();
panelFooter = new Panel(); panelFooter = new Panel();
buttonQuit = new Button(); buttonQuit = new RButton();
checkStartup = new CheckBox(); checkStartup = new CheckBox();
panelPerformance = new Panel(); panelPerformance = new Panel();
picturePerf = new PictureBox(); picturePerf = new PictureBox();
labelPerf = new Label(); labelPerf = new Label();
labelCPUFan = new Label(); labelCPUFan = new Label();
tablePerf = new TableLayoutPanel(); tablePerf = new TableLayoutPanel();
buttonSilent = new RoundedButton(); buttonSilent = new RButton();
buttonBalanced = new RoundedButton(); buttonBalanced = new RButton();
buttonTurbo = new RoundedButton(); buttonTurbo = new RButton();
buttonFans = new Button(); buttonFans = new RButton();
panelGPU = new Panel(); panelGPU = new Panel();
labelTipGPU = new Label(); labelTipGPU = new Label();
pictureGPU = new PictureBox(); pictureGPU = new PictureBox();
labelGPU = new Label(); labelGPU = new Label();
labelGPUFan = new Label(); labelGPUFan = new Label();
tableGPU = new TableLayoutPanel(); tableGPU = new TableLayoutPanel();
buttonEco = new RoundedButton(); buttonEco = new RButton();
buttonStandard = new RoundedButton(); buttonStandard = new RButton();
buttonOptimized = new RoundedButton(); buttonOptimized = new RButton();
buttonUltimate = new RoundedButton(); buttonUltimate = new RButton();
panelScreen = new Panel(); panelScreen = new Panel();
labelTipScreen = new Label(); labelTipScreen = new Label();
tableScreen = new TableLayoutPanel(); tableScreen = new TableLayoutPanel();
buttonScreenAuto = new RoundedButton(); buttonScreenAuto = new RButton();
button60Hz = new RoundedButton(); button60Hz = new RButton();
button120Hz = new RoundedButton(); button120Hz = new RButton();
pictureScreen = new PictureBox(); pictureScreen = new PictureBox();
labelSreen = new Label(); labelSreen = new Label();
panelKeyboard = new Panel(); panelKeyboard = new Panel();
tableLayoutKeyboard = new TableLayoutPanel(); tableLayoutKeyboard = new TableLayoutPanel();
buttonKeyboard = new Button(); buttonKeyboard = new RButton();
comboKeyboard = new ComboBox(); comboKeyboard = new RComboBox();
panelColor = new Panel(); panelColor = new Panel();
pictureColor2 = new PictureBox(); pictureColor2 = new PictureBox();
pictureColor = new PictureBox(); pictureColor = new PictureBox();
buttonKeyboardColor = new Button(); buttonKeyboardColor = new RButton();
pictureKeyboard = new PictureBox(); pictureKeyboard = new PictureBox();
labelKeyboard = new Label(); labelKeyboard = new Label();
buttonMiniled = new RButton();
panelMatrix.SuspendLayout(); panelMatrix.SuspendLayout();
tableLayoutMatrix.SuspendLayout(); tableLayoutMatrix.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureMatrix).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureMatrix).BeginInit();
@@ -160,6 +161,8 @@ namespace GHelper
// //
// comboMatrix // comboMatrix
// //
comboMatrix.BorderColor = Color.White;
comboMatrix.ButtonColor = SystemColors.ControlLight;
comboMatrix.Dock = DockStyle.Top; comboMatrix.Dock = DockStyle.Top;
comboMatrix.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); comboMatrix.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
comboMatrix.FormattingEnabled = true; comboMatrix.FormattingEnabled = true;
@@ -174,9 +177,12 @@ namespace GHelper
// //
// buttonMatrix // buttonMatrix
// //
buttonMatrix.BackColor = SystemColors.ButtonFace; buttonMatrix.Activated = false;
buttonMatrix.BackColor = SystemColors.ControlLight;
buttonMatrix.BorderColor = Color.Transparent;
buttonMatrix.Dock = DockStyle.Top; buttonMatrix.Dock = DockStyle.Top;
buttonMatrix.FlatAppearance.BorderSize = 0; buttonMatrix.FlatAppearance.BorderSize = 0;
buttonMatrix.FlatStyle = FlatStyle.Flat;
buttonMatrix.Location = new Point(390, 8); buttonMatrix.Location = new Point(390, 8);
buttonMatrix.Margin = new Padding(4, 8, 4, 8); buttonMatrix.Margin = new Padding(4, 8, 4, 8);
buttonMatrix.Name = "buttonMatrix"; buttonMatrix.Name = "buttonMatrix";
@@ -187,6 +193,8 @@ namespace GHelper
// //
// comboMatrixRunning // comboMatrixRunning
// //
comboMatrixRunning.BorderColor = Color.White;
comboMatrixRunning.ButtonColor = SystemColors.ControlLight;
comboMatrixRunning.Dock = DockStyle.Top; comboMatrixRunning.Dock = DockStyle.Top;
comboMatrixRunning.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); comboMatrixRunning.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
comboMatrixRunning.FormattingEnabled = true; comboMatrixRunning.FormattingEnabled = true;
@@ -314,8 +322,11 @@ namespace GHelper
// //
// buttonQuit // buttonQuit
// //
buttonQuit.Activated = false;
buttonQuit.Anchor = AnchorStyles.Top | AnchorStyles.Right; buttonQuit.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonQuit.BackColor = SystemColors.ButtonFace; buttonQuit.BackColor = SystemColors.ControlLight;
buttonQuit.BorderColor = Color.Transparent;
buttonQuit.FlatStyle = FlatStyle.Flat;
buttonQuit.Location = new Point(578, 16); buttonQuit.Location = new Point(578, 16);
buttonQuit.Margin = new Padding(8, 4, 8, 4); buttonQuit.Margin = new Padding(8, 4, 8, 4);
buttonQuit.Name = "buttonQuit"; buttonQuit.Name = "buttonQuit";
@@ -471,9 +482,12 @@ namespace GHelper
// //
// buttonFans // buttonFans
// //
buttonFans.BackColor = SystemColors.ButtonFace; buttonFans.Activated = false;
buttonFans.BackColor = SystemColors.ControlLight;
buttonFans.BorderColor = Color.Transparent;
buttonFans.Dock = DockStyle.Fill; buttonFans.Dock = DockStyle.Fill;
buttonFans.FlatAppearance.BorderSize = 0; buttonFans.FlatAppearance.BorderSize = 0;
buttonFans.FlatStyle = FlatStyle.Flat;
buttonFans.Image = Properties.Resources.icons8_fan_48; buttonFans.Image = Properties.Resources.icons8_fan_48;
buttonFans.ImageAlign = ContentAlignment.BottomCenter; buttonFans.ImageAlign = ContentAlignment.BottomCenter;
buttonFans.Location = new Point(583, 4); buttonFans.Location = new Point(583, 4);
@@ -806,9 +820,12 @@ namespace GHelper
// //
// buttonKeyboard // buttonKeyboard
// //
buttonKeyboard.BackColor = SystemColors.ButtonFace; buttonKeyboard.Activated = false;
buttonKeyboard.BackColor = SystemColors.ControlLight;
buttonKeyboard.BorderColor = Color.Transparent;
buttonKeyboard.Dock = DockStyle.Top; buttonKeyboard.Dock = DockStyle.Top;
buttonKeyboard.FlatAppearance.BorderSize = 0; buttonKeyboard.FlatAppearance.BorderSize = 0;
buttonKeyboard.FlatStyle = FlatStyle.Flat;
buttonKeyboard.Location = new Point(390, 8); buttonKeyboard.Location = new Point(390, 8);
buttonKeyboard.Margin = new Padding(4, 8, 4, 8); buttonKeyboard.Margin = new Padding(4, 8, 4, 8);
buttonKeyboard.Name = "buttonKeyboard"; buttonKeyboard.Name = "buttonKeyboard";
@@ -819,7 +836,10 @@ namespace GHelper
// //
// comboKeyboard // comboKeyboard
// //
comboKeyboard.BorderColor = Color.White;
comboKeyboard.ButtonColor = SystemColors.ControlLight;
comboKeyboard.Dock = DockStyle.Top; comboKeyboard.Dock = DockStyle.Top;
comboKeyboard.FlatStyle = FlatStyle.Flat;
comboKeyboard.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); comboKeyboard.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
comboKeyboard.FormattingEnabled = true; comboKeyboard.FormattingEnabled = true;
comboKeyboard.ItemHeight = 32; comboKeyboard.ItemHeight = 32;
@@ -866,10 +886,11 @@ namespace GHelper
// //
// buttonKeyboardColor // buttonKeyboardColor
// //
buttonKeyboardColor.Activated = false;
buttonKeyboardColor.BackColor = SystemColors.ButtonHighlight; buttonKeyboardColor.BackColor = SystemColors.ButtonHighlight;
buttonKeyboardColor.BorderColor = Color.Transparent;
buttonKeyboardColor.Dock = DockStyle.Top; buttonKeyboardColor.Dock = DockStyle.Top;
buttonKeyboardColor.FlatAppearance.BorderColor = Color.Red; buttonKeyboardColor.FlatStyle = FlatStyle.Flat;
buttonKeyboardColor.FlatAppearance.BorderSize = 2;
buttonKeyboardColor.ForeColor = SystemColors.ControlText; buttonKeyboardColor.ForeColor = SystemColors.ControlText;
buttonKeyboardColor.Location = new Point(0, 0); buttonKeyboardColor.Location = new Point(0, 0);
buttonKeyboardColor.Margin = new Padding(4, 8, 4, 8); buttonKeyboardColor.Margin = new Padding(4, 8, 4, 8);
@@ -901,6 +922,24 @@ namespace GHelper
labelKeyboard.TabIndex = 32; labelKeyboard.TabIndex = 32;
labelKeyboard.Text = "Laptop Keyboard"; labelKeyboard.Text = "Laptop Keyboard";
// //
// buttonMiniled
//
buttonMiniled.Activated = false;
buttonMiniled.BackColor = SystemColors.ControlLightLight;
buttonMiniled.BorderColor = Color.Transparent;
buttonMiniled.CausesValidation = false;
buttonMiniled.Dock = DockStyle.Fill;
buttonMiniled.FlatAppearance.BorderSize = 0;
buttonMiniled.FlatStyle = FlatStyle.Flat;
buttonMiniled.ForeColor = SystemColors.ControlText;
buttonMiniled.Location = new Point(197, 4);
buttonMiniled.Margin = new Padding(4);
buttonMiniled.Name = "buttonMiniled";
buttonMiniled.Size = new Size(185, 72);
buttonMiniled.TabIndex = 3;
buttonMiniled.Text = "Miniled";
buttonMiniled.UseVisualStyleBackColor = false;
//
// SettingsForm // SettingsForm
// //
AutoScaleDimensions = new SizeF(192F, 192F); AutoScaleDimensions = new SizeF(192F, 192F);
@@ -971,49 +1010,50 @@ namespace GHelper
private Label labelBatteryTitle; private Label labelBatteryTitle;
private TrackBar trackBattery; private TrackBar trackBattery;
private Panel panelFooter; private Panel panelFooter;
private Button buttonQuit; private RButton buttonQuit;
private CheckBox checkStartup; private CheckBox checkStartup;
private Panel panelPerformance; private Panel panelPerformance;
private PictureBox picturePerf; private PictureBox picturePerf;
private Label labelPerf; private Label labelPerf;
private Label labelCPUFan; private Label labelCPUFan;
private TableLayoutPanel tablePerf; private TableLayoutPanel tablePerf;
private RoundedButton buttonTurbo; private RButton buttonTurbo;
private RoundedButton buttonBalanced; private RButton buttonBalanced;
private RoundedButton buttonSilent; private RButton buttonSilent;
private Panel panelGPU; private Panel panelGPU;
private PictureBox pictureGPU; private PictureBox pictureGPU;
private Label labelGPU; private Label labelGPU;
private Label labelGPUFan; private Label labelGPUFan;
private TableLayoutPanel tableGPU; private TableLayoutPanel tableGPU;
private RoundedButton buttonUltimate; private RButton buttonUltimate;
private RoundedButton buttonStandard; private RButton buttonStandard;
private RoundedButton buttonEco; private RButton buttonEco;
private Panel panelScreen; private Panel panelScreen;
private TableLayoutPanel tableScreen; private TableLayoutPanel tableScreen;
private RoundedButton buttonScreenAuto; private RButton buttonScreenAuto;
private RoundedButton button60Hz; private RButton button60Hz;
private PictureBox pictureScreen; private PictureBox pictureScreen;
private Label labelSreen; private Label labelSreen;
private Panel panelKeyboard; private Panel panelKeyboard;
private PictureBox pictureKeyboard; private PictureBox pictureKeyboard;
private Label labelKeyboard; private Label labelKeyboard;
private TableLayoutPanel tableLayoutMatrix; private TableLayoutPanel tableLayoutMatrix;
private Button buttonMatrix; private RComboBox comboMatrixRunning;
private ComboBox comboMatrixRunning; private RComboBox comboMatrix;
private ComboBox comboMatrix;
private TableLayoutPanel tableLayoutKeyboard; private TableLayoutPanel tableLayoutKeyboard;
private Button buttonKeyboard; private RComboBox comboKeyboard;
private ComboBox comboKeyboard;
private Panel panelColor; private Panel panelColor;
private PictureBox pictureColor2; private PictureBox pictureColor2;
private PictureBox pictureColor; private PictureBox pictureColor;
private Button buttonKeyboardColor;
private CheckBox checkMatrix; private CheckBox checkMatrix;
private RoundedButton button120Hz; private RButton button120Hz;
private Button buttonFans; private RButton buttonOptimized;
private RoundedButton buttonOptimized;
private Label labelTipGPU; private Label labelTipGPU;
private Label labelTipScreen; private Label labelTipScreen;
private RButton buttonMiniled;
private RButton buttonMatrix;
private RButton buttonKeyboard;
private RButton buttonKeyboardColor;
private RButton buttonFans;
} }
} }

View File

@@ -1,4 +1,5 @@
using Starlight.AnimeMatrix; using CustomControls;
using Starlight.AnimeMatrix;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.Timers; using System.Timers;
@@ -6,13 +7,9 @@ using System.Timers;
namespace GHelper namespace GHelper
{ {
public partial class SettingsForm : Form public partial class SettingsForm : RForm
{ {
static Color colorEco = Color.FromArgb(255, 6, 180, 138);
static Color colorStandard = Color.FromArgb(255, 58, 174, 239);
static Color colorTurbo = Color.FromArgb(255, 255, 32, 32);
static System.Timers.Timer aTimer = default!; static System.Timers.Timer aTimer = default!;
static System.Timers.Timer matrixTimer = default!; static System.Timers.Timer matrixTimer = default!;
@@ -20,16 +17,15 @@ namespace GHelper
public string perfName = "Balanced"; public string perfName = "Balanced";
Fans fans; public Fans fans;
Keyboard keyb; public Keyboard keyb;
static AnimeMatrixDevice mat; static AnimeMatrixDevice mat;
public SettingsForm() public SettingsForm()
{ {
InitializeComponent(); InitializeComponent();
InitTheme();
HighDpiHelper.AdjustControlImagesDpiScale(this, 2);
FormClosing += SettingsForm_FormClosing; FormClosing += SettingsForm_FormClosing;
@@ -45,6 +41,7 @@ namespace GHelper
button60Hz.BorderColor = SystemColors.ActiveBorder; button60Hz.BorderColor = SystemColors.ActiveBorder;
button120Hz.BorderColor = SystemColors.ActiveBorder; button120Hz.BorderColor = SystemColors.ActiveBorder;
buttonScreenAuto.BorderColor = SystemColors.ActiveBorder; buttonScreenAuto.BorderColor = SystemColors.ActiveBorder;
buttonMiniled.BorderColor = colorTurbo;
buttonOptimized.Click += ButtonOptimized_Click; buttonOptimized.Click += ButtonOptimized_Click;
buttonSilent.Click += ButtonSilent_Click; buttonSilent.Click += ButtonSilent_Click;
@@ -62,6 +59,7 @@ namespace GHelper
button60Hz.Click += Button60Hz_Click; button60Hz.Click += Button60Hz_Click;
button120Hz.Click += Button120Hz_Click; button120Hz.Click += Button120Hz_Click;
buttonScreenAuto.Click += ButtonScreenAuto_Click; buttonScreenAuto.Click += ButtonScreenAuto_Click;
buttonMiniled.Click += ButtonMiniled_Click;
buttonQuit.Click += ButtonQuit_Click; buttonQuit.Click += ButtonQuit_Click;
@@ -93,6 +91,7 @@ namespace GHelper
checkStartup.CheckedChanged += CheckStartup_CheckedChanged; checkStartup.CheckedChanged += CheckStartup_CheckedChanged;
labelVersion.Click += LabelVersion_Click; labelVersion.Click += LabelVersion_Click;
labelVersion.ForeColor = Color.FromArgb(128, Color.Gray);
buttonOptimized.MouseMove += ButtonOptimized_MouseHover; buttonOptimized.MouseMove += ButtonOptimized_MouseHover;
buttonOptimized.MouseLeave += ButtonGPU_MouseLeave; buttonOptimized.MouseLeave += ButtonGPU_MouseLeave;
@@ -121,6 +120,7 @@ namespace GHelper
} }
private void Button120Hz_MouseHover(object? sender, EventArgs e) private void Button120Hz_MouseHover(object? sender, EventArgs e)
{ {
labelTipScreen.Text = "Max refresh rate + screen overdrive for lower latency"; labelTipScreen.Text = "Max refresh rate + screen overdrive for lower latency";
@@ -614,13 +614,17 @@ namespace GHelper
SetScreen(60, 0); SetScreen(60, 0);
} }
private void ButtonMiniled_Click(object? sender, EventArgs e)
{
int miniled = (Program.config.getConfig("miniled") == 1) ? 0 : 1;
Program.config.setConfig("miniled", miniled);
SetScreen(-1, -1, miniled);
}
public void SetScreen(int frequency = -1, int overdrive = -1) public void SetScreen(int frequency = -1, int overdrive = -1, int miniled = -1)
{ {
int currentFrequency = NativeMethods.GetRefreshRate(); if (NativeMethods.GetRefreshRate() < 0) // Laptop screen not detected or has unknown refresh rate
if (currentFrequency < 0) // Laptop screen not detected or has unknown refresh rate
{ {
InitScreen(); InitScreen();
return; return;
@@ -629,19 +633,25 @@ namespace GHelper
if (frequency >= 1000) if (frequency >= 1000)
{ {
frequency = Program.config.getConfig("max_frequency"); frequency = Program.config.getConfig("max_frequency");
if (frequency <= 60) if (frequency <= 60) frequency = 120;
frequency = 120;
} }
if (frequency <= 0) return; if (frequency > 0)
{
NativeMethods.SetRefreshRate(frequency);
Logger.WriteLine("Screen " + frequency.ToString() + "Hz");
}
NativeMethods.SetRefreshRate(frequency);
if (overdrive >= 0) if (overdrive >= 0)
Program.wmi.DeviceSet(ASUSWmi.ScreenOverdrive, overdrive); Program.wmi.DeviceSet(ASUSWmi.ScreenOverdrive, overdrive);
InitScreen(); if (miniled >= 0)
{
Program.wmi.DeviceSet(ASUSWmi.ScreenMiniled, miniled);
Debug.WriteLine("Miniled " + miniled);
}
Logger.WriteLine("Screen " + frequency.ToString() + "Hz"); InitScreen();
} }
@@ -653,37 +663,19 @@ namespace GHelper
bool screenAuto = (Program.config.getConfig("screen_auto") == 1); bool screenAuto = (Program.config.getConfig("screen_auto") == 1);
int overdrive = 0; int overdrive = Program.wmi.DeviceGet(ASUSWmi.ScreenOverdrive);
try int miniled = Program.wmi.DeviceGet(ASUSWmi.ScreenMiniled);
{
overdrive = Program.wmi.DeviceGet(ASUSWmi.ScreenOverdrive);
}
catch
{
Logger.WriteLine("Screen Overdrive not supported");
}
if (frequency < 0) bool screenEnabled = (frequency >= 0);
{
button60Hz.Enabled = false;
button120Hz.Enabled = false;
buttonScreenAuto.Enabled = false;
labelSreen.Text = "Laptop Screen: Turned off";
button60Hz.BackColor = SystemColors.ControlLight;
button120Hz.BackColor = SystemColors.ControlLight;
buttonScreenAuto.BackColor = SystemColors.ControlLight;
}
else
{
button60Hz.Enabled = true;
button120Hz.Enabled = true;
buttonScreenAuto.Enabled = true;
button60Hz.BackColor = SystemColors.ControlLightLight;
button120Hz.BackColor = SystemColors.ControlLightLight;
buttonScreenAuto.BackColor = SystemColors.ControlLightLight;
labelSreen.Text = "Laptop Screen: " + frequency + "Hz" + ((overdrive == 1) ? " + Overdrive" : "");
}
ButtonEnabled(button60Hz, screenEnabled);
ButtonEnabled(button120Hz, screenEnabled);
ButtonEnabled(buttonScreenAuto, screenEnabled);
ButtonEnabled(buttonMiniled, screenEnabled);
labelSreen.Text = screenEnabled
? "Laptop Screen: " + frequency + "Hz" + ((overdrive == 1) ? " + Overdrive" : "")
: "Laptop Screen: Turned off";
button60Hz.Activated = false; button60Hz.Activated = false;
button120Hz.Activated = false; button120Hz.Activated = false;
@@ -711,6 +703,13 @@ namespace GHelper
button120Hz.Text = maxFrequency.ToString() + "Hz + OD"; button120Hz.Text = maxFrequency.ToString() + "Hz + OD";
} }
if (miniled >= 0)
{
tableScreen.Controls.Add(buttonMiniled, 3, 0);
buttonMiniled.Activated = (miniled == 1);
Program.config.setConfig("miniled", miniled);
}
Program.config.setConfig("frequency", frequency); Program.config.setConfig("frequency", frequency);
Program.config.setConfig("overdrive", overdrive); Program.config.setConfig("overdrive", overdrive);
} }
@@ -1031,12 +1030,13 @@ namespace GHelper
} }
Program.config.setConfig("gpu_mode", GpuMode);
ButtonEnabled(buttonOptimized, true); ButtonEnabled(buttonOptimized, true);
ButtonEnabled(buttonEco, true); ButtonEnabled(buttonEco, true);
ButtonEnabled(buttonStandard, true); ButtonEnabled(buttonStandard, true);
ButtonEnabled(buttonUltimate, true); ButtonEnabled(buttonUltimate, true);
Program.config.setConfig("gpu_mode", GpuMode);
VisualiseGPUMode(GpuMode); VisualiseGPUMode(GpuMode);
return GpuMode; return GpuMode;
@@ -1204,10 +1204,10 @@ namespace GHelper
} }
public void ButtonEnabled(Button but, bool enabled) public void ButtonEnabled(RButton but, bool enabled)
{ {
but.Enabled = enabled; but.Enabled = enabled;
but.BackColor = enabled ? SystemColors.ControlLightLight : SystemColors.ControlLight; but.BackColor = but.Enabled ? Color.FromArgb(255, but.BackColor) : Color.FromArgb(100, but.BackColor);
} }
public void SetStartupCheck(bool status) public void SetStartupCheck(bool status)

View File

@@ -1,11 +1,10 @@
# [G-Helper (GHelper)](https://github.com/seerge/g-helper) # [G-Helper (GHelper)](https://github.com/seerge/g-helper)
[![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total.svg)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub release](https://img.shields.io/github/release/seerge/g-helper.svg)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub license](https://badgen.net/github/license/seerge/g-helper)](https://github.com/seerge/g-helper/blob/master/LICENSE) [![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total.svg)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub release](https://img.shields.io/github/release/seerge/g-helper.svg)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social&label=Star&maxAge=2592000)](https://GitHub.com/seerge/g-helper/stargazers/)
[![GitHub stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social&label=Star&maxAge=2592000)](https://GitHub.com/seerge/g-helper/stargazers/)
## Open source Armory Crate alternative for Asus ROG Zephyrus G14, G15, Flow X13, Flow X16, and other models ## Open source Armoury Crate alternative for Asus ROG Zephyrus G14, G15, Flow X13, Flow X16, and other models
A small utility that allows you to do almost everything you could do with Armory Crate but without extra bloat and unnecessary services. A small utility that allows you to do almost everything you could do with Armoury Crate but without extra bloat and unnecessary services.
### :gift: Main advantages ### :gift: Main advantages