Compare commits

..

18 Commits
v0.41 ... v0.43

Author SHA1 Message Date
seerge
a7a7170676 Merge branch 'main' of https://github.com/seerge/g-helper 2023-03-30 00:00:22 +02:00
seerge
1d43ca3ce4 Max fan RPM auto calibration 2023-03-30 00:00:20 +02:00
Serge
ff7618f16f Update README.md 2023-03-29 23:33:14 +02:00
seerge
bb947bf8bf Merge branch 'main' of https://github.com/seerge/g-helper 2023-03-29 23:32:14 +02:00
seerge
63092d8415 Removed unsupported aura modes for some models 2023-03-29 23:32:12 +02:00
Serge
6fbce2f495 Update README.md 2023-03-29 21:06:36 +02:00
seerge
8d89a04608 Merge branch 'main' of https://github.com/seerge/g-helper 2023-03-29 17:51:28 +02:00
seerge
0cbc48d526 Added old cpu temp reading as fallback 2023-03-29 17:51:25 +02:00
Serge
81013ca0be Update README.md 2023-03-29 17:32:07 +02:00
seerge
af2509fc17 Merge branch 'main' of https://github.com/seerge/g-helper 2023-03-29 17:04:24 +02:00
seerge
136b5b4f55 Added native temp sensors, brightness controll, etc 2023-03-29 17:04:22 +02:00
Serge
4e2abff942 Update README.md 2023-03-29 13:58:03 +02:00
Serge
2c8a11fc24 Update README.md 2023-03-29 12:26:19 +02:00
seerge
8af8823ee4 Merge branch 'main' of https://github.com/seerge/g-helper 2023-03-29 12:19:02 +02:00
seerge
ec0a1b710e New slider 2023-03-29 12:19:00 +02:00
Serge
2ac2e84161 Update README.md 2023-03-28 22:09:06 +02:00
seerge
14dc1741f7 New battery slider 2023-03-28 20:11:30 +02:00
seerge
fbed195194 - 2023-03-28 16:35:20 +02:00
15 changed files with 336 additions and 107 deletions

View File

@@ -31,6 +31,10 @@ public class ASUSWmi
public const uint DevsGPUFanCurve = 0x00110025;
public const uint DevsMidFanCurve = 0x00110032;
public const int Temp_CPU = 0x00120094;
public const int Temp_GPU = 0x00120097;
public const int PPT_TotalA0 = 0x001200A0; // Total PPT on 2022 and CPU PPT on 2021
public const int PPT_EDCA1 = 0x001200A1; // CPU EDC
public const int PPT_TDCA2 = 0x001200A2; // CPU TDC

View File

@@ -379,7 +379,7 @@ namespace Starlight.AnimeMatrix
using (Font font = new Font("Arial", 9F))
{
SizeF textSize = g.MeasureString(text2, font);
g.DrawString(text2, font, Brushes.White, (MaxColumns * 3 - textSize.Width), 25);
g.DrawString(text2, font, Brushes.White, (MaxColumns * 3 - textSize.Width)+1, 25);
}
}

View File

@@ -108,6 +108,8 @@ public class AppConfig
if (device == 1)
name = "gpu";
else if (device == 2)
name = "mid";
else
name = "cpu";

View File

@@ -71,9 +71,8 @@ namespace GHelper
{ 2, "Fast" }
};
}
public static Dictionary<int, string> GetModes()
{
return new Dictionary<int, string>
static Dictionary<int, string> _modes = new Dictionary<int, string>
{
{ 0, "Static" },
{ 1, "Breathe" },
@@ -81,6 +80,21 @@ namespace GHelper
{ 3, "Rainbow" },
{ 10, "Strobe" },
};
public static Dictionary<int, string> GetModes()
{
if (Program.config.ContainsModel("TUF"))
{
_modes.Remove(3);
}
if (Program.config.ContainsModel("401"))
{
_modes.Remove(2);
_modes.Remove(3);
}
return _modes;
}
@@ -148,7 +162,7 @@ namespace GHelper
{
HidDevice[] HidDeviceList = HidDevices.Enumerate(0x0b05, deviceIds).ToArray();
byte[] msg = { 0x5a, 0xba, 0xc5, 0xc4, (byte)brightness };
byte[] msg = { 0x5d, 0xba, 0xc5, 0xc4, (byte)brightness };
foreach (HidDevice device in HidDeviceList)
if (device.IsConnected && device.Description.Contains("HID"))

View File

@@ -1,4 +1,5 @@
using CustomControls;
using WinFormsSliderBar;
using System.Drawing.Drawing2D;
using System.Windows.Forms.DataVisualization.Charting;
@@ -8,6 +9,7 @@ public static class ControlHelper
static bool _invert = false;
static bool _darkTheme = false;
static float _scale = 1;
static Color formBack;
@@ -38,7 +40,7 @@ public static class ControlHelper
foreMain = SystemColors.ControlText;
foreAccent = Color.LightGray;
borderMain = Color.LightGray;
buttonMain = Color.FromArgb(255, 230, 230, 230);
buttonMain = Color.FromArgb(255, 250, 250, 250);
}
container.BackColor = formBack;
@@ -53,7 +55,7 @@ public static class ControlHelper
public static void Resize(RForm container, float baseScale = 2)
{
_scale = GetDpiScale(container).Value / baseScale;
ResizeControls(container.Controls);
if (Math.Abs(_scale - 1) > 0.2) ResizeControls(container.Controls);
}
@@ -65,9 +67,11 @@ public static class ControlHelper
if (button != null && button.Image is not null)
button.Image = ResizeImage(button.Image);
/*
var pictureBox = control as PictureBox;
if (pictureBox != null && pictureBox.BackgroundImage is not null)
pictureBox.BackgroundImage = ResizeImage(pictureBox.BackgroundImage);
*/
ResizeControls(control.Controls);
}
@@ -95,7 +99,7 @@ public static class ControlHelper
if (pictureBox != null && pictureBox.BackgroundImage is not null)
pictureBox.BackgroundImage = AdjustImage(pictureBox.BackgroundImage);
var combo = control as RComboBox;
if (combo != null)
{
@@ -111,6 +115,11 @@ public static class ControlHelper
gb.ForeColor = foreMain;
}
var sl = control as Slider;
if (sl != null)
{
sl.borderColor = buttonMain;
}
var chart = control as Chart;
if (chart != null)

View File

@@ -1,5 +1,6 @@
using Microsoft.Win32;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing.Drawing2D;
using System.Runtime.InteropServices;
@@ -30,7 +31,7 @@ namespace CustomControls
return (int)registryValueObject <= 0;
}
public bool InitTheme(bool setDPI = true)
public bool InitTheme(bool setDPI = false)
{
bool newDarkTheme = CheckSystemDarkModeStatus();
bool changed = (darkTheme != newDarkTheme);
@@ -52,11 +53,6 @@ namespace CustomControls
}
public class RTrackBar : TrackBar
{
}
public class RComboBox : ComboBox
{
private Color borderColor = Color.Gray;
@@ -73,6 +69,8 @@ namespace CustomControls
}
}
}
private Color buttonColor = Color.FromArgb(255,230, 230, 230);
[DefaultValue(typeof(Color), "230, 230, 230")]
public Color ButtonColor

View File

@@ -18,7 +18,7 @@ namespace GHelper
{
if (percentage == 0) return "OFF";
return (200 * Math.Round((float)(MinRPM + (MaxRPM - MinRPM) * percentage * 0.01) / 200)).ToString() + unit;
return (200 * Math.Round((float)(MinRPM*100 + (MaxRPM - MinRPM) * percentage) / 200)).ToString() + unit;
}
void SetChart(Chart chart, int device)
@@ -89,14 +89,8 @@ namespace GHelper
InitializeComponent();
InitTheme();
MinRPM = 1800;
if (Program.config.ContainsModel("401"))
MaxRPM = 7200;
else if (Program.config.ContainsModel("503"))
MaxRPM = 6800;
else
MaxRPM = 5800;
MinRPM = 18;
MaxRPM = HardwareMonitor.GetFanMax();

View File

@@ -16,7 +16,7 @@
<PlatformTarget>x64</PlatformTarget>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<AssemblyVersion>0.41</AssemblyVersion>
<AssemblyVersion>0.43</AssemblyVersion>
</PropertyGroup>
<ItemGroup>

View File

@@ -1,4 +1,5 @@
using System.Diagnostics;
using GHelper;
using GHelper.Gpu;
public static class HardwareMonitor
@@ -9,12 +10,53 @@ public static class HardwareMonitor
public static float? batteryDischarge = -1;
public static int? gpuTemp = null;
public static string? cpuFan;
public static string? gpuFan;
public static string? midFan;
public static int GetFanMax()
{
int max = 58;
if (Program.config.ContainsModel("401")) max = 72;
else if (Program.config.ContainsModel("503")) max = 68;
return Math.Max(max, Program.config.getConfig("fan_max"));
}
public static void SetFanMax(int fan)
{
Program.config.setConfig("fan_max", fan);
}
private static string FormatFan(int fan)
{
// fix for old models
if (fan < 0)
{
fan += 65536;
if (fan <= 0 || fan > 100) return null; //nothing reasonable
}
int fanMax = GetFanMax();
if (fan > fanMax) SetFanMax(fan);
if (Program.config.getConfig("fan_rpm") == 1)
return " Fan: " + (fan * 100).ToString() + "RPM";
else
return " Fan: " + Math.Min(Math.Round((float)fan/fanMax*100), 100).ToString() + "%"; // relatively to 6000 rpm
}
public static void ReadSensors()
{
cpuTemp = -1;
batteryDischarge = -1;
try
cpuFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.CPU_Fan));
gpuFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.GPU_Fan));
midFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.Mid_Fan));
cpuTemp = Program.wmi.DeviceGet(ASUSWmi.Temp_CPU);
gpuTemp = Program.wmi.DeviceGet(ASUSWmi.Temp_GPU);
if (cpuTemp < 0) try
{
var ct = new PerformanceCounter("Thermal Zone Information", "Temperature", @"\_TZ.THRM", true);
cpuTemp = ct.NextValue() - 273;
@@ -24,26 +66,29 @@ public static class HardwareMonitor
Logger.WriteLine("Failed reading CPU temp");
}
if (gpuTemp < 0) try
{
if (GpuTemperatureProvider is null) RecreateGpuTemperatureProvider();
gpuTemp = GpuTemperatureProvider?.GetCurrentTemperature();
}
catch (Exception ex) {
gpuTemp = null;
Logger.WriteLine("Failed reading GPU temp");
Logger.WriteLine(ex.ToString());
}
try
{
var cb = new PerformanceCounter("Power Meter", "Power", "Power Meter (0)", true);
batteryDischarge = cb.NextValue() / 1000;
cb.Dispose();
} catch
}
catch
{
Logger.WriteLine("Failed reading Battery discharge");
}
try
{
gpuTemp = GpuTemperatureProvider?.GetCurrentTemperature();
} catch (Exception ex) {
gpuTemp = null;
Logger.WriteLine("Failed reading GPU temp");
Logger.WriteLine(ex.ToString());
}
}
public static void RecreateGpuTemperatureProviderWithDelay() {

View File

@@ -674,6 +674,7 @@ public class NativeMethods
PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid);
/*
var hrDC = PowerWriteDCValueIndex(
IntPtr.Zero,
activeSchemeGuid,
@@ -682,6 +683,7 @@ public class NativeMethods
boost);
PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid);
*/
Logger.WriteLine("Boost " + boost);
}

View File

@@ -59,13 +59,10 @@ namespace GHelper
Application.EnableVisualStyles();
SystemEvents.UserPreferenceChanged += new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
var ds = settingsForm.Handle;
trayIcon.MouseClick += TrayIcon_MouseClick;
wmi.SubscribeToEvents(WatcherEventArrived);
settingsForm.InitGPUMode();
@@ -75,10 +72,10 @@ namespace GHelper
settingsForm.SetStartupCheck(Startup.IsScheduled());
SetAutoModes();
HardwareMonitor.RecreateGpuTemperatureProvider();
// Subscribing for system power change events
SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged;
if (Environment.CurrentDirectory.Trim('\\') == Application.StartupPath.Trim('\\'))
@@ -103,13 +100,13 @@ namespace GHelper
case UserPreferenceCategory.General:
Debug.WriteLine("Theme Changed");
Thread.Sleep(1000);
settingsForm.InitTheme(false);
settingsForm.InitTheme();
if (settingsForm.fans is not null && settingsForm.fans.Text != "")
settingsForm.fans.InitTheme(false);
settingsForm.fans.InitTheme();
if (settingsForm.keyb is not null && settingsForm.keyb.Text != "")
settingsForm.keyb.InitTheme(false);
settingsForm.keyb.InitTheme();
break;
}

View File

@@ -40,12 +40,12 @@ namespace GHelper
pictureMatrix = new PictureBox();
labelMatrix = new Label();
panelBattery = new Panel();
sliderBattery = new WinFormsSliderBar.Slider();
labelModel = new Label();
labelVersion = new Label();
labelBattery = new Label();
pictureBattery = new PictureBox();
labelBatteryTitle = new Label();
trackBattery = new TrackBar();
panelFooter = new Panel();
buttonQuit = new RButton();
checkStartup = new CheckBox();
@@ -93,7 +93,6 @@ namespace GHelper
((System.ComponentModel.ISupportInitialize)pictureMatrix).BeginInit();
panelBattery.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBattery).BeginInit();
((System.ComponentModel.ISupportInitialize)trackBattery).BeginInit();
panelFooter.SuspendLayout();
panelPerformance.SuspendLayout();
((System.ComponentModel.ISupportInitialize)picturePerf).BeginInit();
@@ -237,12 +236,12 @@ namespace GHelper
//
panelBattery.AutoSize = true;
panelBattery.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelBattery.Controls.Add(sliderBattery);
panelBattery.Controls.Add(labelModel);
panelBattery.Controls.Add(labelVersion);
panelBattery.Controls.Add(labelBattery);
panelBattery.Controls.Add(pictureBattery);
panelBattery.Controls.Add(labelBatteryTitle);
panelBattery.Controls.Add(trackBattery);
panelBattery.Dock = DockStyle.Top;
panelBattery.Location = new Point(10, 926);
panelBattery.Margin = new Padding(8);
@@ -251,6 +250,17 @@ namespace GHelper
panelBattery.Size = new Size(810, 163);
panelBattery.TabIndex = 34;
//
// sliderBattery
//
sliderBattery.Location = new Point(16, 70);
sliderBattery.Max = 100;
sliderBattery.Min = 50;
sliderBattery.Name = "sliderBattery";
sliderBattery.Size = new Size(772, 40);
sliderBattery.TabIndex = 39;
sliderBattery.Text = "sliderBattery";
sliderBattery.Value = 80;
//
// labelModel
//
labelModel.Anchor = AnchorStyles.Top | AnchorStyles.Right;
@@ -307,22 +317,6 @@ namespace GHelper
labelBatteryTitle.TabIndex = 34;
labelBatteryTitle.Text = "Battery Charge Limit";
//
// trackBattery
//
trackBattery.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
trackBattery.LargeChange = 10;
trackBattery.Location = new Point(20, 52);
trackBattery.Margin = new Padding(8, 4, 8, 4);
trackBattery.Maximum = 100;
trackBattery.Minimum = 50;
trackBattery.Name = "trackBattery";
trackBattery.Size = new Size(766, 90);
trackBattery.SmallChange = 5;
trackBattery.TabIndex = 33;
trackBattery.TickFrequency = 10;
trackBattery.TickStyle = TickStyle.TopLeft;
trackBattery.Value = 100;
//
// panelFooter
//
panelFooter.AutoSize = true;
@@ -1033,7 +1027,6 @@ namespace GHelper
panelBattery.ResumeLayout(false);
panelBattery.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureBattery).EndInit();
((System.ComponentModel.ISupportInitialize)trackBattery).EndInit();
panelFooter.ResumeLayout(false);
panelFooter.PerformLayout();
panelPerformance.ResumeLayout(false);
@@ -1069,7 +1062,6 @@ namespace GHelper
private Label labelBattery;
private PictureBox pictureBattery;
private Label labelBatteryTitle;
private TrackBar trackBattery;
private Panel panelFooter;
private RButton buttonQuit;
private CheckBox checkStartup;
@@ -1118,5 +1110,6 @@ namespace GHelper
private RButton buttonFans;
private Label labelMidFan;
private Label labelModel;
private WinFormsSliderBar.Slider sliderBattery;
}
}

View File

@@ -32,7 +32,7 @@ namespace GHelper
public SettingsForm()
{
InitializeComponent();
InitTheme();
InitTheme(true);
FormClosing += SettingsForm_FormClosing;
@@ -115,12 +115,10 @@ namespace GHelper
button120Hz.MouseMove += Button120Hz_MouseHover;
button120Hz.MouseLeave += ButtonScreen_MouseLeave;
trackBattery.ValueChanged += TrackBattery_ValueChanged;
sliderBattery.ValueChanged += SliderBattery_ValueChanged;
Program.trayIcon.MouseMove += TrayIcon_MouseMove;
//buttonStandard.Image = (Image)(new Bitmap(buttonStandard.Image, new Size(16, 16)));
aTimer = new System.Timers.Timer(500);
aTimer = new System.Timers.Timer(1000);
aTimer.Elapsed += OnTimedEvent;
// Subscribing for monitor power on events
@@ -128,7 +126,7 @@ namespace GHelper
Program.unRegPowerNotify = NativeMethods.RegisterPowerSettingNotification(Handle, settingGuid.ConsoleDisplayState, NativeMethods.DEVICE_NOTIFY_WINDOW_HANDLE);
SetVersionLabel("Version: " + Assembly.GetExecutingAssembly().GetName().Version);
string model = Program.config.GetModel();
int trim = model.LastIndexOf("_");
if (trim > 0) model = model.Substring(0, trim);
@@ -139,17 +137,16 @@ namespace GHelper
Task.Run(async () =>
{
await Task.Delay(TimeSpan.FromSeconds(5));
await Task.Delay(TimeSpan.FromSeconds(1));
CheckForUpdatesAsync();
});
}
private void TrackBattery_ValueChanged(object? sender, EventArgs e)
private void SliderBattery_ValueChanged(object? sender, EventArgs e)
{
SetBatteryChargeLimit(trackBattery.Value);
SetBatteryChargeLimit(sliderBattery.Value);
}
@@ -362,7 +359,8 @@ namespace GHelper
{
format1 = "H:mm";
format2 = "";
} else
}
else
{
format1 = "h:mm";
format2 = "tt";
@@ -372,7 +370,8 @@ namespace GHelper
{
format1 = format1.Replace(":", " ");
matrixTick = 0;
} else
}
else
{
matrixTick++;
}
@@ -747,7 +746,7 @@ namespace GHelper
bool overdriveSetting = (Program.config.getConfig("no_overdrive") != 1);
int overdrive = Program.wmi.DeviceGet(ASUSWmi.ScreenOverdrive);
int miniled = Program.wmi.DeviceGet(ASUSWmi.ScreenMiniled);
bool screenEnabled = (frequency >= 0);
@@ -829,26 +828,12 @@ namespace GHelper
}
private static string FormatFan(int fan)
{
if (fan < 0) return null;
if (Program.config.getConfig("fan_rpm") == 1)
return " Fan: " + (fan * 100).ToString() + "RPM";
else
return " Fan: " + Math.Min(Math.Round(fan / 0.6), 100).ToString() + "%"; // relatively to 6000 rpm
}
private static void RefreshSensors(bool force = false)
{
if (!force && Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastRefresh) < 2000) return;
lastRefresh = DateTimeOffset.Now.ToUnixTimeMilliseconds();
string cpuFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.CPU_Fan));
string gpuFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.GPU_Fan));
string midFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.Mid_Fan));
string cpuTemp = "";
string gpuTemp = "";
string battery = "";
@@ -868,12 +853,16 @@ namespace GHelper
Program.settingsForm.BeginInvoke(delegate
{
Program.settingsForm.labelCPUFan.Text = "CPU" + cpuTemp + cpuFan;
Program.settingsForm.labelGPUFan.Text = "GPU" + gpuTemp + gpuFan;
if (midFan is not null) Program.settingsForm.labelMidFan.Text = "Mid" + midFan;
Program.settingsForm.labelCPUFan.Text = "CPU" + cpuTemp + HardwareMonitor.cpuFan;
Program.settingsForm.labelGPUFan.Text = "GPU" + gpuTemp + HardwareMonitor.gpuFan;
if (HardwareMonitor.midFan is not null)
Program.settingsForm.labelMidFan.Text = "Mid" + HardwareMonitor.midFan;
Program.settingsForm.labelBattery.Text = battery;
Program.trayIcon.Text = "CPU" + cpuTemp + cpuFan + "\n" + "GPU" + gpuTemp + gpuFan + ((battery.Length > 0) ? ("\n" + battery) : "");
Program.trayIcon.Text = "CPU" + cpuTemp + HardwareMonitor.cpuFan + "\n"
+ "GPU" + gpuTemp + HardwareMonitor.gpuFan +
((battery.Length > 0) ? ("\n" + battery) : "");
});
}
@@ -889,7 +878,7 @@ namespace GHelper
this.Top = Screen.FromControl(this).WorkingArea.Height - 10 - this.Height;
this.Activate();
aTimer.Interval = 300;
//aTimer.Interval = 300;
aTimer.Enabled = true;
//RefreshSensors();
@@ -936,7 +925,8 @@ namespace GHelper
labelPerf.Text = "Performance Mode+";
} else
}
else
{
labelPerf.Text = "Performance Mode";
}
@@ -1035,9 +1025,11 @@ namespace GHelper
if (Program.config.getConfig("keyboard_auto") != 1) return;
if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online)
Program.wmi.DeviceSet(ASUSWmi.UniversalControl, ASUSWmi.KB_Light_Up);
Aura.ApplyBrightness(3);
//Program.wmi.DeviceSet(ASUSWmi.UniversalControl, ASUSWmi.KB_Light_Up);
else
Program.wmi.DeviceSet(ASUSWmi.UniversalControl, ASUSWmi.KB_Light_Down);
Aura.ApplyBrightness(0);
//Program.wmi.DeviceSet(ASUSWmi.UniversalControl, ASUSWmi.KB_Light_Down);
}
@@ -1119,6 +1111,9 @@ namespace GHelper
int eco = Program.wmi.DeviceGet(ASUSWmi.GPUEco);
int mux = Program.wmi.DeviceGet(ASUSWmi.GPUMux);
//Logger.WriteLine("Eco flag : " + eco);
//Logger.WriteLine("Mux flag : " + mux);
int GpuMode;
if (mux == 0)
@@ -1170,11 +1165,12 @@ namespace GHelper
}
Program.wmi.DeviceSet(ASUSWmi.GPUEco, eco);
Logger.WriteLine("Setting Eco mode: " + eco);
Program.settingsForm.BeginInvoke(delegate
{
InitGPUMode();
HardwareMonitor.RecreateGpuTemperatureProviderWithDelay();
Thread.Sleep(500);
InitGPUMode();
AutoScreen();
});
});
@@ -1324,8 +1320,10 @@ namespace GHelper
if (limit < 40 || limit > 100) return;
//Debug.WriteLine(limit);
labelBatteryTitle.Text = "Battery Charge Limit: " + limit.ToString() + "%";
trackBattery.Value = limit;
sliderBattery.Value = limit;
Program.wmi.DeviceSet(ASUSWmi.BatteryLimit, limit);
Program.config.setConfig("charge_limit", limit);

168
app/Slider.cs Normal file
View File

@@ -0,0 +1,168 @@
using System.Drawing.Drawing2D;
namespace WinFormsSliderBar
{
public static class GraphicsExtensions
{
public static void DrawCircle(this Graphics g, Pen pen,
float centerX, float centerY, float radius)
{
g.DrawEllipse(pen, centerX - radius, centerY - radius,
radius + radius, radius + radius);
}
public static void FillCircle(this Graphics g, Brush brush,
float centerX, float centerY, float radius)
{
g.FillEllipse(brush, centerX - radius, centerY - radius,
radius + radius, radius + radius);
}
}
public class Slider : Control
{
private float _radius;
private PointF _thumbPos;
private SizeF _barSize;
private PointF _barPos;
private int _step = 5;
public Color accentColor = Color.FromArgb(255, 58, 174, 239);
public Color borderColor = Color.White;
public event EventHandler ValueChanged;
public Slider()
{
// This reduces flicker
DoubleBuffered = true;
}
private int _min = 0;
public int Min
{
get => _min;
set
{
_min = value;
RecalculateParameters();
}
}
private int _max = 100;
public int Max
{
get => _max;
set
{
_max = value;
RecalculateParameters();
}
}
private int _value = 50;
public int Value
{
get => _value;
set
{
value = (int)Math.Round(value / (float)_step) * _step;
if (_value != value)
{
_value = value;
ValueChanged?.Invoke(this, EventArgs.Empty);
RecalculateParameters();
}
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Brush brushAccent = new SolidBrush(accentColor);
Brush brushEmpty = new SolidBrush(Color.Gray);
Brush brushBorder = new SolidBrush(borderColor);
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
e.Graphics.FillRectangle(brushEmpty,
_barPos.X, _barPos.Y, _barSize.Width, _barSize.Height);
e.Graphics.FillRectangle(brushAccent,
_barPos.X, _barPos.Y, _thumbPos.X - _barPos.X, _barSize.Height);
e.Graphics.FillCircle(brushBorder, _thumbPos.X, _thumbPos.Y, _radius);
e.Graphics.FillCircle(brushAccent, _thumbPos.X, _thumbPos.Y, 0.7f * _radius);
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
RecalculateParameters();
}
private void RecalculateParameters()
{
_radius = 0.4F * ClientSize.Height;
_barSize = new SizeF(ClientSize.Width - 4 * _radius, ClientSize.Height * 0.15F);
_barPos = new PointF(_radius, (ClientSize.Height - _barSize.Height) / 2);
_thumbPos = new PointF(
_barSize.Width / (Max - Min) * (Value - Min) + _barPos.X,
_barPos.Y + 0.5f * _barSize.Height);
Invalidate();
}
bool _moving = false;
SizeF _delta;
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
// Difference between tumb and mouse position.
_delta = new SizeF(e.Location.X - _thumbPos.X, e.Location.Y - _thumbPos.Y);
if (_delta.Width * _delta.Width + _delta.Height * _delta.Height <= _radius * _radius)
{
// Clicking inside thumb.
_moving = true;
}
_calculateValue(e);
}
private void _calculateValue(MouseEventArgs e)
{
float thumbX = e.Location.X; // - _delta.Width;
if (thumbX < _barPos.X)
{
thumbX = _barPos.X;
}
else if (thumbX > _barPos.X + _barSize.Width)
{
thumbX = _barPos.X + _barSize.Width;
}
Value = (int)Math.Round(Min + (thumbX - _barPos.X) * (Max - Min) / _barSize.Width);
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (_moving)
{
_calculateValue(e);
}
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
_moving = false;
}
}
}

View File

@@ -1,4 +1,4 @@
# [G-Helper (GHelper)](https://github.com/seerge/g-helper)
# [G-Helper](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 stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social&label=Star)](https://GitHub.com/seerge/g-helper/stargazers/)
@@ -11,13 +11,15 @@ A small utility that allows you to do almost everything you could do with Armour
1. Seamless and automatic GPU switching (without asking you to close all apps, etc)
2. All performance modes can be fully customized (with fan curves and PPTs)
3. Very lightweight and consumes almost no resources, doesn't install any services. Just a single exe to run
4. Simple and clean UI with easy access to all settings
4. Simple and clean native UI with easy access to all settings
### [:floppy_disk: Download latest release](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
If you like this app, please [star :star: it on Github](https://github.com/seerge/g-helper) and spread a word about it!
![Screenshot](https://raw.githubusercontent.com/seerge/g-helper/main/docs/screenshot.png)
If you post about app - please include a link. Thanks.
![Screenshot 2023-03-29 122524](https://user-images.githubusercontent.com/5920850/228505505-c3682509-a9e4-4cac-a5fd-e10d30c477cd.png)
### :zap: Main features
@@ -45,6 +47,8 @@ To keep auto switching and hotkeys working the app needs to stay in running in t
Modes are **same** as in Armory Crate (as they are stored in bios), including default fan curves
![Screenshot 2023-03-29 122534](https://user-images.githubusercontent.com/5920850/228505581-4e7d087c-bd0a-4a48-b572-de2c01192830.png)
1. Silent (minimal or no fans, 70W PPT total, up to 45W PPT to CPU) + Best power efficiency setting in windows
2. Balanced (balanced fans, 100W PPT total, up to 45W PPT to CPU) + Balanced setting in windows
3. Turbo (intense fans, 125W PPT total, up to 80W PPT to CPU) + Best performance setting in windows
@@ -61,7 +65,8 @@ PPTs are shown for G14 2022, for other models PPTs will be different as they are
## :question: FAQ
### How do I stop Armory Crate install popup appearing every time I press M4 / Rog key?
Go to BIOS (F2 on boot), open Advanced Settings and disable "Armory Control Interface". If it still appears - delete or move somwhere following file C:\Windows\System32\ASUSACCI\ArmouryCrateKeyControl.exe
Go to BIOS (F2 on boot), open Advanced Settings and disable "Armory Control Interface".
If it still appears - delete or move somwhere following file ``C:\Windows\System32\ASUSACCI\ArmouryCrateKeyControl.exe``
### Why Ultimate GPU mode is not available on my laptop?
Ultimate mode is supported (by hardware) only on G14 2022 (and possibly other models from 2022+)