mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a7a7170676 | ||
|
|
1d43ca3ce4 | ||
|
|
ff7618f16f | ||
|
|
bb947bf8bf | ||
|
|
63092d8415 | ||
|
|
6fbce2f495 | ||
|
|
8d89a04608 | ||
|
|
0cbc48d526 | ||
|
|
81013ca0be | ||
|
|
af2509fc17 | ||
|
|
136b5b4f55 | ||
|
|
4e2abff942 | ||
|
|
2c8a11fc24 |
@@ -31,6 +31,10 @@ public class ASUSWmi
|
|||||||
public const uint DevsGPUFanCurve = 0x00110025;
|
public const uint DevsGPUFanCurve = 0x00110025;
|
||||||
public const uint DevsMidFanCurve = 0x00110032;
|
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_TotalA0 = 0x001200A0; // Total PPT on 2022 and CPU PPT on 2021
|
||||||
public const int PPT_EDCA1 = 0x001200A1; // CPU EDC
|
public const int PPT_EDCA1 = 0x001200A1; // CPU EDC
|
||||||
public const int PPT_TDCA2 = 0x001200A2; // CPU TDC
|
public const int PPT_TDCA2 = 0x001200A2; // CPU TDC
|
||||||
|
|||||||
@@ -108,6 +108,8 @@ public class AppConfig
|
|||||||
|
|
||||||
if (device == 1)
|
if (device == 1)
|
||||||
name = "gpu";
|
name = "gpu";
|
||||||
|
else if (device == 2)
|
||||||
|
name = "mid";
|
||||||
else
|
else
|
||||||
name = "cpu";
|
name = "cpu";
|
||||||
|
|
||||||
|
|||||||
22
app/Aura.cs
22
app/Aura.cs
@@ -71,9 +71,8 @@ namespace GHelper
|
|||||||
{ 2, "Fast" }
|
{ 2, "Fast" }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
public static Dictionary<int, string> GetModes()
|
|
||||||
{
|
static Dictionary<int, string> _modes = new Dictionary<int, string>
|
||||||
return new Dictionary<int, string>
|
|
||||||
{
|
{
|
||||||
{ 0, "Static" },
|
{ 0, "Static" },
|
||||||
{ 1, "Breathe" },
|
{ 1, "Breathe" },
|
||||||
@@ -81,6 +80,21 @@ namespace GHelper
|
|||||||
{ 3, "Rainbow" },
|
{ 3, "Rainbow" },
|
||||||
{ 10, "Strobe" },
|
{ 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();
|
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)
|
foreach (HidDevice device in HidDeviceList)
|
||||||
if (device.IsConnected && device.Description.Contains("HID"))
|
if (device.IsConnected && device.Description.Contains("HID"))
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ public static class ControlHelper
|
|||||||
static bool _invert = false;
|
static bool _invert = false;
|
||||||
static bool _darkTheme = false;
|
static bool _darkTheme = false;
|
||||||
|
|
||||||
|
|
||||||
static float _scale = 1;
|
static float _scale = 1;
|
||||||
|
|
||||||
static Color formBack;
|
static Color formBack;
|
||||||
|
|||||||
12
app/Fans.cs
12
app/Fans.cs
@@ -18,7 +18,7 @@ namespace GHelper
|
|||||||
{
|
{
|
||||||
if (percentage == 0) return "OFF";
|
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)
|
void SetChart(Chart chart, int device)
|
||||||
@@ -89,14 +89,8 @@ namespace GHelper
|
|||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
InitTheme();
|
InitTheme();
|
||||||
|
|
||||||
MinRPM = 1800;
|
MinRPM = 18;
|
||||||
|
MaxRPM = HardwareMonitor.GetFanMax();
|
||||||
if (Program.config.ContainsModel("401"))
|
|
||||||
MaxRPM = 7200;
|
|
||||||
else if (Program.config.ContainsModel("503"))
|
|
||||||
MaxRPM = 6800;
|
|
||||||
else
|
|
||||||
MaxRPM = 5800;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||||
<AssemblyVersion>0.42</AssemblyVersion>
|
<AssemblyVersion>0.43</AssemblyVersion>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using GHelper;
|
||||||
using GHelper.Gpu;
|
using GHelper.Gpu;
|
||||||
|
|
||||||
public static class HardwareMonitor
|
public static class HardwareMonitor
|
||||||
@@ -9,12 +10,53 @@ public static class HardwareMonitor
|
|||||||
public static float? batteryDischarge = -1;
|
public static float? batteryDischarge = -1;
|
||||||
public static int? gpuTemp = null;
|
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()
|
public static void ReadSensors()
|
||||||
{
|
{
|
||||||
cpuTemp = -1;
|
|
||||||
batteryDischarge = -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);
|
var ct = new PerformanceCounter("Thermal Zone Information", "Temperature", @"\_TZ.THRM", true);
|
||||||
cpuTemp = ct.NextValue() - 273;
|
cpuTemp = ct.NextValue() - 273;
|
||||||
@@ -24,26 +66,29 @@ public static class HardwareMonitor
|
|||||||
Logger.WriteLine("Failed reading CPU temp");
|
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
|
try
|
||||||
{
|
{
|
||||||
var cb = new PerformanceCounter("Power Meter", "Power", "Power Meter (0)", true);
|
var cb = new PerformanceCounter("Power Meter", "Power", "Power Meter (0)", true);
|
||||||
batteryDischarge = cb.NextValue() / 1000;
|
batteryDischarge = cb.NextValue() / 1000;
|
||||||
cb.Dispose();
|
cb.Dispose();
|
||||||
|
|
||||||
} catch
|
}
|
||||||
|
catch
|
||||||
{
|
{
|
||||||
Logger.WriteLine("Failed reading Battery discharge");
|
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() {
|
public static void RecreateGpuTemperatureProviderWithDelay() {
|
||||||
|
|||||||
@@ -59,13 +59,10 @@ namespace GHelper
|
|||||||
|
|
||||||
Application.EnableVisualStyles();
|
Application.EnableVisualStyles();
|
||||||
|
|
||||||
SystemEvents.UserPreferenceChanged += new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
|
|
||||||
|
|
||||||
var ds = settingsForm.Handle;
|
var ds = settingsForm.Handle;
|
||||||
|
|
||||||
trayIcon.MouseClick += TrayIcon_MouseClick;
|
trayIcon.MouseClick += TrayIcon_MouseClick;
|
||||||
|
|
||||||
|
|
||||||
wmi.SubscribeToEvents(WatcherEventArrived);
|
wmi.SubscribeToEvents(WatcherEventArrived);
|
||||||
|
|
||||||
settingsForm.InitGPUMode();
|
settingsForm.InitGPUMode();
|
||||||
@@ -75,10 +72,10 @@ namespace GHelper
|
|||||||
settingsForm.SetStartupCheck(Startup.IsScheduled());
|
settingsForm.SetStartupCheck(Startup.IsScheduled());
|
||||||
|
|
||||||
SetAutoModes();
|
SetAutoModes();
|
||||||
HardwareMonitor.RecreateGpuTemperatureProvider();
|
|
||||||
|
|
||||||
// Subscribing for system power change events
|
// Subscribing for system power change events
|
||||||
SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
|
SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
|
||||||
|
SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged;
|
||||||
|
|
||||||
|
|
||||||
if (Environment.CurrentDirectory.Trim('\\') == Application.StartupPath.Trim('\\'))
|
if (Environment.CurrentDirectory.Trim('\\') == Application.StartupPath.Trim('\\'))
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ namespace GHelper
|
|||||||
sliderBattery.ValueChanged += SliderBattery_ValueChanged;
|
sliderBattery.ValueChanged += SliderBattery_ValueChanged;
|
||||||
Program.trayIcon.MouseMove += TrayIcon_MouseMove;
|
Program.trayIcon.MouseMove += TrayIcon_MouseMove;
|
||||||
|
|
||||||
aTimer = new System.Timers.Timer(500);
|
aTimer = new System.Timers.Timer(1000);
|
||||||
aTimer.Elapsed += OnTimedEvent;
|
aTimer.Elapsed += OnTimedEvent;
|
||||||
|
|
||||||
// Subscribing for monitor power on events
|
// Subscribing for monitor power on events
|
||||||
@@ -137,7 +137,7 @@ namespace GHelper
|
|||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
await Task.Delay(TimeSpan.FromSeconds(5));
|
await Task.Delay(TimeSpan.FromSeconds(1));
|
||||||
CheckForUpdatesAsync();
|
CheckForUpdatesAsync();
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -828,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)
|
private static void RefreshSensors(bool force = false)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!force && Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastRefresh) < 2000) return;
|
if (!force && Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastRefresh) < 2000) return;
|
||||||
lastRefresh = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
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 cpuTemp = "";
|
||||||
string gpuTemp = "";
|
string gpuTemp = "";
|
||||||
string battery = "";
|
string battery = "";
|
||||||
@@ -867,12 +853,16 @@ namespace GHelper
|
|||||||
|
|
||||||
Program.settingsForm.BeginInvoke(delegate
|
Program.settingsForm.BeginInvoke(delegate
|
||||||
{
|
{
|
||||||
Program.settingsForm.labelCPUFan.Text = "CPU" + cpuTemp + cpuFan;
|
Program.settingsForm.labelCPUFan.Text = "CPU" + cpuTemp + HardwareMonitor.cpuFan;
|
||||||
Program.settingsForm.labelGPUFan.Text = "GPU" + gpuTemp + gpuFan;
|
Program.settingsForm.labelGPUFan.Text = "GPU" + gpuTemp + HardwareMonitor.gpuFan;
|
||||||
if (midFan is not null) Program.settingsForm.labelMidFan.Text = "Mid" + midFan;
|
if (HardwareMonitor.midFan is not null)
|
||||||
|
Program.settingsForm.labelMidFan.Text = "Mid" + HardwareMonitor.midFan;
|
||||||
|
|
||||||
Program.settingsForm.labelBattery.Text = battery;
|
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) : "");
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -888,7 +878,7 @@ namespace GHelper
|
|||||||
this.Top = Screen.FromControl(this).WorkingArea.Height - 10 - this.Height;
|
this.Top = Screen.FromControl(this).WorkingArea.Height - 10 - this.Height;
|
||||||
this.Activate();
|
this.Activate();
|
||||||
|
|
||||||
aTimer.Interval = 300;
|
//aTimer.Interval = 300;
|
||||||
aTimer.Enabled = true;
|
aTimer.Enabled = true;
|
||||||
|
|
||||||
//RefreshSensors();
|
//RefreshSensors();
|
||||||
@@ -1035,9 +1025,11 @@ namespace GHelper
|
|||||||
if (Program.config.getConfig("keyboard_auto") != 1) return;
|
if (Program.config.getConfig("keyboard_auto") != 1) return;
|
||||||
|
|
||||||
if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online)
|
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
|
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 eco = Program.wmi.DeviceGet(ASUSWmi.GPUEco);
|
||||||
int mux = Program.wmi.DeviceGet(ASUSWmi.GPUMux);
|
int mux = Program.wmi.DeviceGet(ASUSWmi.GPUMux);
|
||||||
|
|
||||||
|
//Logger.WriteLine("Eco flag : " + eco);
|
||||||
|
//Logger.WriteLine("Mux flag : " + mux);
|
||||||
|
|
||||||
int GpuMode;
|
int GpuMode;
|
||||||
|
|
||||||
if (mux == 0)
|
if (mux == 0)
|
||||||
@@ -1170,11 +1165,12 @@ namespace GHelper
|
|||||||
}
|
}
|
||||||
|
|
||||||
Program.wmi.DeviceSet(ASUSWmi.GPUEco, eco);
|
Program.wmi.DeviceSet(ASUSWmi.GPUEco, eco);
|
||||||
|
Logger.WriteLine("Setting Eco mode: " + eco);
|
||||||
|
|
||||||
Program.settingsForm.BeginInvoke(delegate
|
Program.settingsForm.BeginInvoke(delegate
|
||||||
{
|
{
|
||||||
InitGPUMode();
|
|
||||||
HardwareMonitor.RecreateGpuTemperatureProviderWithDelay();
|
|
||||||
Thread.Sleep(500);
|
Thread.Sleep(500);
|
||||||
|
InitGPUMode();
|
||||||
AutoScreen();
|
AutoScreen();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# [G-Helper (GHelper)](https://github.com/seerge/g-helper)
|
# [G-Helper](https://github.com/seerge/g-helper)
|
||||||
|
|
||||||
[](https://GitHub.com/seerge/g-helper/releases/) [](https://GitHub.com/seerge/g-helper/releases/) [](https://GitHub.com/seerge/g-helper/stargazers/)
|
[](https://GitHub.com/seerge/g-helper/releases/) [](https://GitHub.com/seerge/g-helper/releases/) [](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)
|
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)
|
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
|
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)
|
### [: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!
|
If you like this app, please [star :star: it on Github](https://github.com/seerge/g-helper) and spread a word about it!
|
||||||
|
|
||||||

|
If you post about app - please include a link. Thanks.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
### :zap: Main features
|
### :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
|
Modes are **same** as in Armory Crate (as they are stored in bios), including default fan curves
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
1. Silent (minimal or no fans, 70W PPT total, up to 45W PPT to CPU) + Best power efficiency setting in windows
|
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
|
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
|
3. Turbo (intense fans, 125W PPT total, up to 80W PPT to CPU) + Best performance setting in windows
|
||||||
|
|||||||
Reference in New Issue
Block a user