mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Attempt to fix auto gpu switch
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using System.Diagnostics;
|
using System.Management;
|
||||||
using System.Management;
|
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
|
|
||||||
public class AppConfig
|
public class AppConfig
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||||
<AssemblyVersion>0.33</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>
|
||||||
|
|||||||
@@ -112,7 +112,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 +126,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 +138,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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
25
app/Settings.Designer.cs
generated
25
app/Settings.Designer.cs
generated
@@ -85,6 +85,7 @@ namespace GHelper
|
|||||||
buttonKeyboardColor = new Button();
|
buttonKeyboardColor = new Button();
|
||||||
pictureKeyboard = new PictureBox();
|
pictureKeyboard = new PictureBox();
|
||||||
labelKeyboard = new Label();
|
labelKeyboard = new Label();
|
||||||
|
buttonMiniled = new RoundedButton();
|
||||||
panelMatrix.SuspendLayout();
|
panelMatrix.SuspendLayout();
|
||||||
tableLayoutMatrix.SuspendLayout();
|
tableLayoutMatrix.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)pictureMatrix).BeginInit();
|
((System.ComponentModel.ISupportInitialize)pictureMatrix).BeginInit();
|
||||||
@@ -686,6 +687,7 @@ namespace GHelper
|
|||||||
tableScreen.Controls.Add(buttonScreenAuto, 0, 0);
|
tableScreen.Controls.Add(buttonScreenAuto, 0, 0);
|
||||||
tableScreen.Controls.Add(button60Hz, 1, 0);
|
tableScreen.Controls.Add(button60Hz, 1, 0);
|
||||||
tableScreen.Controls.Add(button120Hz, 2, 0);
|
tableScreen.Controls.Add(button120Hz, 2, 0);
|
||||||
|
|
||||||
tableScreen.Location = new Point(16, 51);
|
tableScreen.Location = new Point(16, 51);
|
||||||
tableScreen.Margin = new Padding(8, 4, 8, 4);
|
tableScreen.Margin = new Padding(8, 4, 8, 4);
|
||||||
tableScreen.Name = "tableScreen";
|
tableScreen.Name = "tableScreen";
|
||||||
@@ -721,7 +723,7 @@ namespace GHelper
|
|||||||
button60Hz.FlatAppearance.BorderSize = 0;
|
button60Hz.FlatAppearance.BorderSize = 0;
|
||||||
button60Hz.FlatStyle = FlatStyle.Flat;
|
button60Hz.FlatStyle = FlatStyle.Flat;
|
||||||
button60Hz.ForeColor = SystemColors.ControlText;
|
button60Hz.ForeColor = SystemColors.ControlText;
|
||||||
button60Hz.Location = new Point(197, 4);
|
button60Hz.Location = new Point(390, 4);
|
||||||
button60Hz.Margin = new Padding(4);
|
button60Hz.Margin = new Padding(4);
|
||||||
button60Hz.Name = "button60Hz";
|
button60Hz.Name = "button60Hz";
|
||||||
button60Hz.Size = new Size(185, 72);
|
button60Hz.Size = new Size(185, 72);
|
||||||
@@ -738,7 +740,7 @@ namespace GHelper
|
|||||||
button120Hz.FlatAppearance.BorderSize = 0;
|
button120Hz.FlatAppearance.BorderSize = 0;
|
||||||
button120Hz.FlatStyle = FlatStyle.Flat;
|
button120Hz.FlatStyle = FlatStyle.Flat;
|
||||||
button120Hz.ForeColor = SystemColors.ControlText;
|
button120Hz.ForeColor = SystemColors.ControlText;
|
||||||
button120Hz.Location = new Point(390, 4);
|
button120Hz.Location = new Point(583, 4);
|
||||||
button120Hz.Margin = new Padding(4);
|
button120Hz.Margin = new Padding(4);
|
||||||
button120Hz.Name = "button120Hz";
|
button120Hz.Name = "button120Hz";
|
||||||
button120Hz.Size = new Size(185, 72);
|
button120Hz.Size = new Size(185, 72);
|
||||||
@@ -901,6 +903,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);
|
||||||
@@ -1015,5 +1035,6 @@ namespace GHelper
|
|||||||
private RoundedButton buttonOptimized;
|
private RoundedButton buttonOptimized;
|
||||||
private Label labelTipGPU;
|
private Label labelTipGPU;
|
||||||
private Label labelTipScreen;
|
private Label labelTipScreen;
|
||||||
|
private RoundedButton buttonMiniled;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -45,6 +45,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 +63,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;
|
||||||
|
|
||||||
@@ -614,13 +616,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 +635,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,15 +665,8 @@ 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)
|
if (frequency < 0)
|
||||||
{
|
{
|
||||||
@@ -711,6 +716,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 +1043,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;
|
||||||
|
|||||||
Reference in New Issue
Block a user