mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
39387041fe | ||
|
|
400b2cd6cb | ||
|
|
b20442e61f | ||
|
|
6d219511fc | ||
|
|
2282820453 | ||
|
|
d4fcfe8895 | ||
|
|
8eb923a703 | ||
|
|
59548be543 | ||
|
|
1596ce84e8 | ||
|
|
f670b9e0dc | ||
|
|
52c2987c88 | ||
|
|
c9aa910035 | ||
|
|
22f648a23f | ||
|
|
9255a8554d | ||
|
|
859f4f55c3 | ||
|
|
7e3872939b | ||
|
|
2556583451 |
@@ -1,4 +1,5 @@
|
||||
using System.Management;
|
||||
using GHelper;
|
||||
using System.Management;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
public enum AsusFan
|
||||
@@ -65,16 +66,16 @@ public class AsusACPI
|
||||
public const int Temp_CPU = 0x00120094;
|
||||
public const int Temp_GPU = 0x00120097;
|
||||
|
||||
public const int PPT_TotalA0 = 0x001200A0; // Total PPT on 2022 (PPT_LIMIT_SLOW ) and CPU PPT on 2021
|
||||
public const int PPT_TotalA0 = 0x001200A0; // SPL (Total limit for all-AMD models)
|
||||
public const int PPT_EDCA1 = 0x001200A1; // CPU EDC
|
||||
public const int PPT_TDCA2 = 0x001200A2; // CPU TDC
|
||||
public const int PPT_APUA3 = 0x001200A3; // APU PPT ON 2021, doesn't work on 2022
|
||||
public const int PPT_APUA3 = 0x001200A3; // sPPT (long boost limit)
|
||||
|
||||
public const int PPT_CPUB0 = 0x001200B0; // CPU PPT on 2022 (PPT_LIMIT_APU)
|
||||
public const int PPT_CPUB1 = 0x001200B1; // Total PPT on 2022 (PPT_LIMIT_SLOW)
|
||||
|
||||
public const int PPT_GPUC0 = 0x001200C0; // NVIDIA GPU Boost
|
||||
public const int PPT_APUC1 = 0x001200C1; // Actual Power Limit (PPT_LIMIT_FAST) AND Sustained Power Limit (STAPM_LIMIT)
|
||||
public const int PPT_APUC1 = 0x001200C1; // fPPT (fast boost limit)
|
||||
public const int PPT_GPUC2 = 0x001200C2; // NVIDIA GPU Temp Target (75.. 87 C)
|
||||
|
||||
public const int TUF_KB_BRIGHTNESS = 0x00050021;
|
||||
@@ -170,8 +171,8 @@ public class AsusACPI
|
||||
data[0] = BitConverter.GetBytes(eventHandle.ToInt32())[0];
|
||||
data[1] = BitConverter.GetBytes(eventHandle.ToInt32())[1];
|
||||
|
||||
result = Control(0x222400, data, outBuffer);
|
||||
Logger.WriteLine("ACPI " + result + ":" + BitConverter.ToString(data) + "|" + BitConverter.ToString(outBuffer));
|
||||
Control(0x222400, data, outBuffer);
|
||||
Logger.WriteLine("ACPI :" + BitConverter.ToString(data) + "|" + BitConverter.ToString(outBuffer));
|
||||
|
||||
while (true)
|
||||
{
|
||||
@@ -202,10 +203,11 @@ public class AsusACPI
|
||||
|
||||
}
|
||||
|
||||
public bool Control(uint dwIoControlCode, byte[] lpInBuffer, byte[] lpOutBuffer)
|
||||
public void Control(uint dwIoControlCode, byte[] lpInBuffer, byte[] lpOutBuffer)
|
||||
{
|
||||
|
||||
uint lpBytesReturned = 0;
|
||||
return DeviceIoControl(
|
||||
DeviceIoControl(
|
||||
handle,
|
||||
dwIoControlCode,
|
||||
lpInBuffer,
|
||||
@@ -412,6 +414,11 @@ public class AsusACPI
|
||||
return DeviceGet(GPUXGConnected) == 1;
|
||||
}
|
||||
|
||||
public bool IsAllAmdPPT()
|
||||
{
|
||||
return DeviceGet(PPT_CPUB0) >= 0 && DeviceGet(PPT_GPUC0) < 0;
|
||||
}
|
||||
|
||||
public void TUFKeyboardBrightness(int brightness)
|
||||
{
|
||||
int param = 0x80 | (brightness & 0x7F);
|
||||
|
||||
@@ -124,6 +124,10 @@ namespace GHelper
|
||||
_modes.Remove(3);
|
||||
}
|
||||
|
||||
if (AppConfig.ContainsModel("G513")) {
|
||||
return _modes;
|
||||
}
|
||||
|
||||
if (AppConfig.ContainsModel("Strix") || AppConfig.ContainsModel("Scar"))
|
||||
{
|
||||
return _modesStrix;
|
||||
|
||||
30
app/Extra.Designer.cs
generated
30
app/Extra.Designer.cs
generated
@@ -89,6 +89,7 @@ namespace GHelper
|
||||
checkUSBC = new CheckBox();
|
||||
checkNoOverdrive = new CheckBox();
|
||||
checkTopmost = new CheckBox();
|
||||
checkFnLock = new CheckBox();
|
||||
groupBindings.SuspendLayout();
|
||||
tableKeys.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureHelp).BeginInit();
|
||||
@@ -684,6 +685,7 @@ namespace GHelper
|
||||
//
|
||||
// groupOther
|
||||
//
|
||||
groupOther.Controls.Add(checkFnLock);
|
||||
groupOther.Controls.Add(checkGpuApps);
|
||||
groupOther.Controls.Add(checkAutoApplyWindowsPowerMode);
|
||||
groupOther.Controls.Add(checkKeyboardAuto);
|
||||
@@ -693,7 +695,7 @@ namespace GHelper
|
||||
groupOther.Dock = DockStyle.Top;
|
||||
groupOther.Location = new Point(10, 897);
|
||||
groupOther.Name = "groupOther";
|
||||
groupOther.Size = new Size(954, 310);
|
||||
groupOther.Size = new Size(954, 352);
|
||||
groupOther.TabIndex = 2;
|
||||
groupOther.TabStop = false;
|
||||
groupOther.Text = "Other";
|
||||
@@ -701,7 +703,7 @@ namespace GHelper
|
||||
// checkGpuApps
|
||||
//
|
||||
checkGpuApps.AutoSize = true;
|
||||
checkGpuApps.Location = new Point(25, 220);
|
||||
checkGpuApps.Location = new Point(25, 128);
|
||||
checkGpuApps.Name = "checkGpuApps";
|
||||
checkGpuApps.Size = new Size(544, 36);
|
||||
checkGpuApps.TabIndex = 48;
|
||||
@@ -711,7 +713,7 @@ namespace GHelper
|
||||
// checkAutoApplyWindowsPowerMode
|
||||
//
|
||||
checkAutoApplyWindowsPowerMode.AutoSize = true;
|
||||
checkAutoApplyWindowsPowerMode.Location = new Point(25, 268);
|
||||
checkAutoApplyWindowsPowerMode.Location = new Point(25, 296);
|
||||
checkAutoApplyWindowsPowerMode.Name = "checkAutoApplyWindowsPowerMode";
|
||||
checkAutoApplyWindowsPowerMode.Size = new Size(416, 36);
|
||||
checkAutoApplyWindowsPowerMode.TabIndex = 47;
|
||||
@@ -721,7 +723,7 @@ namespace GHelper
|
||||
// checkKeyboardAuto
|
||||
//
|
||||
checkKeyboardAuto.AutoSize = true;
|
||||
checkKeyboardAuto.Location = new Point(25, 40);
|
||||
checkKeyboardAuto.Location = new Point(25, 50);
|
||||
checkKeyboardAuto.MaximumSize = new Size(780, 0);
|
||||
checkKeyboardAuto.Name = "checkKeyboardAuto";
|
||||
checkKeyboardAuto.Size = new Size(712, 36);
|
||||
@@ -732,7 +734,7 @@ namespace GHelper
|
||||
// checkUSBC
|
||||
//
|
||||
checkUSBC.AutoSize = true;
|
||||
checkUSBC.Location = new Point(25, 85);
|
||||
checkUSBC.Location = new Point(25, 170);
|
||||
checkUSBC.Name = "checkUSBC";
|
||||
checkUSBC.Size = new Size(659, 36);
|
||||
checkUSBC.TabIndex = 4;
|
||||
@@ -742,7 +744,7 @@ namespace GHelper
|
||||
// checkNoOverdrive
|
||||
//
|
||||
checkNoOverdrive.AutoSize = true;
|
||||
checkNoOverdrive.Location = new Point(25, 130);
|
||||
checkNoOverdrive.Location = new Point(25, 212);
|
||||
checkNoOverdrive.Name = "checkNoOverdrive";
|
||||
checkNoOverdrive.Size = new Size(307, 36);
|
||||
checkNoOverdrive.TabIndex = 3;
|
||||
@@ -752,20 +754,31 @@ namespace GHelper
|
||||
// checkTopmost
|
||||
//
|
||||
checkTopmost.AutoSize = true;
|
||||
checkTopmost.Location = new Point(25, 175);
|
||||
checkTopmost.Location = new Point(25, 254);
|
||||
checkTopmost.Name = "checkTopmost";
|
||||
checkTopmost.Size = new Size(390, 36);
|
||||
checkTopmost.TabIndex = 1;
|
||||
checkTopmost.Text = Strings.WindowTop;
|
||||
checkTopmost.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkFnLock
|
||||
//
|
||||
checkFnLock.AutoSize = true;
|
||||
checkFnLock.Location = new Point(25, 89);
|
||||
checkFnLock.MaximumSize = new Size(780, 0);
|
||||
checkFnLock.Name = "checkFnLock";
|
||||
checkFnLock.Size = new Size(401, 36);
|
||||
checkFnLock.TabIndex = 49;
|
||||
checkFnLock.Text = "Process Fn+F hotkeys without FN";
|
||||
checkFnLock.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// Extra
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(13F, 32F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
AutoSize = true;
|
||||
AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
ClientSize = new Size(974, 1220);
|
||||
ClientSize = new Size(974, 1262);
|
||||
Controls.Add(groupOther);
|
||||
Controls.Add(groupLight);
|
||||
Controls.Add(groupBindings);
|
||||
@@ -859,5 +872,6 @@ namespace GHelper
|
||||
private NumericUpDown numericBacklightPluggedTime;
|
||||
private Label labelBacklightTimeoutPlugged;
|
||||
private CheckBox checkGpuApps;
|
||||
private CheckBox checkFnLock;
|
||||
}
|
||||
}
|
||||
@@ -222,6 +222,14 @@ namespace GHelper
|
||||
checkGpuApps.Checked = AppConfig.isConfig("kill_gpu_apps");
|
||||
checkGpuApps.CheckedChanged += CheckGpuApps_CheckedChanged;
|
||||
|
||||
checkFnLock.Checked = AppConfig.isConfig("fn_lock");
|
||||
checkFnLock.CheckedChanged += CheckFnLock_CheckedChanged; ;
|
||||
}
|
||||
|
||||
private void CheckFnLock_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
AppConfig.setConfig("fn_lock", (checkFnLock.Checked ? 1 : 0));
|
||||
Program.inputDispatcher.RegisterKeys();
|
||||
}
|
||||
|
||||
private void CheckGpuApps_CheckedChanged(object? sender, EventArgs e)
|
||||
|
||||
336
app/Fans.Designer.cs
generated
336
app/Fans.Designer.cs
generated
@@ -60,18 +60,18 @@ namespace GHelper
|
||||
panelApplyPower = new Panel();
|
||||
checkApplyPower = new RCheckBox();
|
||||
labelInfo = new Label();
|
||||
panelAPU = new Panel();
|
||||
labelAPU = new Label();
|
||||
labelLeftAPU = new Label();
|
||||
trackAPU = new TrackBar();
|
||||
panelCPU = new Panel();
|
||||
labelCPU = new Label();
|
||||
labelLeftCPU = new Label();
|
||||
trackCPU = new TrackBar();
|
||||
panelTotal = new Panel();
|
||||
labelTotal = new Label();
|
||||
labelLeftPlatform = new Label();
|
||||
trackTotal = new TrackBar();
|
||||
panelB0 = new Panel();
|
||||
labelB0 = new Label();
|
||||
labelLeftB0 = new Label();
|
||||
trackB0 = new TrackBar();
|
||||
panelC1 = new Panel();
|
||||
labelC1 = new Label();
|
||||
labelLeftC1 = new Label();
|
||||
trackC1 = new TrackBar();
|
||||
panelA0 = new Panel();
|
||||
labelA0 = new Label();
|
||||
labelLeftA0 = new Label();
|
||||
trackA0 = new TrackBar();
|
||||
panelTitleCPU = new Panel();
|
||||
pictureBox1 = new PictureBox();
|
||||
labelPowerLimits = new Label();
|
||||
@@ -107,12 +107,12 @@ namespace GHelper
|
||||
panelSliders.SuspendLayout();
|
||||
panelPower.SuspendLayout();
|
||||
panelApplyPower.SuspendLayout();
|
||||
panelAPU.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackAPU).BeginInit();
|
||||
panelCPU.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackCPU).BeginInit();
|
||||
panelTotal.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackTotal).BeginInit();
|
||||
panelB0.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackB0).BeginInit();
|
||||
panelC1.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackC1).BeginInit();
|
||||
panelA0.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackA0).BeginInit();
|
||||
panelTitleCPU.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
|
||||
panelGPU.SuspendLayout();
|
||||
@@ -366,9 +366,9 @@ namespace GHelper
|
||||
panelPower.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelPower.Controls.Add(panelApplyPower);
|
||||
panelPower.Controls.Add(labelInfo);
|
||||
panelPower.Controls.Add(panelAPU);
|
||||
panelPower.Controls.Add(panelCPU);
|
||||
panelPower.Controls.Add(panelTotal);
|
||||
panelPower.Controls.Add(panelB0);
|
||||
panelPower.Controls.Add(panelC1);
|
||||
panelPower.Controls.Add(panelA0);
|
||||
panelPower.Controls.Add(panelTitleCPU);
|
||||
panelPower.Dock = DockStyle.Fill;
|
||||
panelPower.Location = new Point(10, 652);
|
||||
@@ -411,155 +411,155 @@ namespace GHelper
|
||||
labelInfo.TabIndex = 43;
|
||||
labelInfo.Text = "Experimental Feature";
|
||||
//
|
||||
// panelAPU
|
||||
// panelB0
|
||||
//
|
||||
panelAPU.AutoSize = true;
|
||||
panelAPU.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelAPU.Controls.Add(labelAPU);
|
||||
panelAPU.Controls.Add(labelLeftAPU);
|
||||
panelAPU.Controls.Add(trackAPU);
|
||||
panelAPU.Dock = DockStyle.Top;
|
||||
panelAPU.Location = new Point(0, 342);
|
||||
panelAPU.Margin = new Padding(4);
|
||||
panelAPU.Name = "panelAPU";
|
||||
panelAPU.Size = new Size(523, 140);
|
||||
panelAPU.TabIndex = 45;
|
||||
panelB0.AutoSize = true;
|
||||
panelB0.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelB0.Controls.Add(labelB0);
|
||||
panelB0.Controls.Add(labelLeftB0);
|
||||
panelB0.Controls.Add(trackB0);
|
||||
panelB0.Dock = DockStyle.Top;
|
||||
panelB0.Location = new Point(0, 346);
|
||||
panelB0.Margin = new Padding(4);
|
||||
panelB0.Name = "panelB0";
|
||||
panelB0.Size = new Size(523, 136);
|
||||
panelB0.TabIndex = 41;
|
||||
//
|
||||
// labelAPU
|
||||
// labelB0
|
||||
//
|
||||
labelAPU.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelAPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelAPU.Location = new Point(396, 8);
|
||||
labelAPU.Margin = new Padding(4, 0, 4, 0);
|
||||
labelAPU.Name = "labelAPU";
|
||||
labelAPU.Size = new Size(119, 32);
|
||||
labelAPU.TabIndex = 13;
|
||||
labelAPU.Text = "APU";
|
||||
labelAPU.TextAlign = ContentAlignment.TopRight;
|
||||
labelB0.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelB0.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelB0.Location = new Point(398, 8);
|
||||
labelB0.Margin = new Padding(4, 0, 4, 0);
|
||||
labelB0.Name = "labelB0";
|
||||
labelB0.Size = new Size(120, 32);
|
||||
labelB0.TabIndex = 13;
|
||||
labelB0.Text = "CPU";
|
||||
labelB0.TextAlign = ContentAlignment.TopRight;
|
||||
//
|
||||
// labelLeftAPU
|
||||
// labelLeftB0
|
||||
//
|
||||
labelLeftAPU.AutoSize = true;
|
||||
labelLeftAPU.Location = new Point(10, 8);
|
||||
labelLeftAPU.Margin = new Padding(4, 0, 4, 0);
|
||||
labelLeftAPU.Name = "labelLeftAPU";
|
||||
labelLeftAPU.Size = new Size(58, 32);
|
||||
labelLeftAPU.TabIndex = 12;
|
||||
labelLeftAPU.Text = "APU";
|
||||
labelLeftB0.AutoSize = true;
|
||||
labelLeftB0.Location = new Point(10, 8);
|
||||
labelLeftB0.Margin = new Padding(4, 0, 4, 0);
|
||||
labelLeftB0.Name = "labelLeftB0";
|
||||
labelLeftB0.Size = new Size(58, 32);
|
||||
labelLeftB0.TabIndex = 12;
|
||||
labelLeftB0.Text = "CPU";
|
||||
//
|
||||
// trackAPU
|
||||
// trackB0
|
||||
//
|
||||
trackAPU.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
trackAPU.Location = new Point(6, 48);
|
||||
trackAPU.Margin = new Padding(4, 2, 4, 2);
|
||||
trackAPU.Maximum = 85;
|
||||
trackAPU.Minimum = 5;
|
||||
trackAPU.Name = "trackAPU";
|
||||
trackAPU.Size = new Size(513, 90);
|
||||
trackAPU.TabIndex = 11;
|
||||
trackAPU.TickFrequency = 5;
|
||||
trackAPU.TickStyle = TickStyle.TopLeft;
|
||||
trackAPU.Value = 80;
|
||||
trackB0.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
trackB0.Location = new Point(6, 44);
|
||||
trackB0.Margin = new Padding(4, 2, 4, 2);
|
||||
trackB0.Maximum = 85;
|
||||
trackB0.Minimum = 5;
|
||||
trackB0.Name = "trackB0";
|
||||
trackB0.Size = new Size(513, 90);
|
||||
trackB0.TabIndex = 11;
|
||||
trackB0.TickFrequency = 5;
|
||||
trackB0.TickStyle = TickStyle.TopLeft;
|
||||
trackB0.Value = 80;
|
||||
//
|
||||
// panelCPU
|
||||
// panelC1
|
||||
//
|
||||
panelCPU.AutoSize = true;
|
||||
panelCPU.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelCPU.Controls.Add(labelCPU);
|
||||
panelCPU.Controls.Add(labelLeftCPU);
|
||||
panelCPU.Controls.Add(trackCPU);
|
||||
panelCPU.Dock = DockStyle.Top;
|
||||
panelCPU.Location = new Point(0, 206);
|
||||
panelCPU.Margin = new Padding(4);
|
||||
panelCPU.Name = "panelCPU";
|
||||
panelCPU.Size = new Size(523, 136);
|
||||
panelCPU.TabIndex = 41;
|
||||
panelC1.AutoSize = true;
|
||||
panelC1.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelC1.Controls.Add(labelC1);
|
||||
panelC1.Controls.Add(labelLeftC1);
|
||||
panelC1.Controls.Add(trackC1);
|
||||
panelC1.Dock = DockStyle.Top;
|
||||
panelC1.Location = new Point(0, 206);
|
||||
panelC1.Margin = new Padding(4);
|
||||
panelC1.Name = "panelC1";
|
||||
panelC1.Size = new Size(523, 140);
|
||||
panelC1.TabIndex = 45;
|
||||
//
|
||||
// labelCPU
|
||||
// labelC1
|
||||
//
|
||||
labelCPU.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelCPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelCPU.Location = new Point(398, 8);
|
||||
labelCPU.Margin = new Padding(4, 0, 4, 0);
|
||||
labelCPU.Name = "labelCPU";
|
||||
labelCPU.Size = new Size(120, 32);
|
||||
labelCPU.TabIndex = 13;
|
||||
labelCPU.Text = "CPU";
|
||||
labelCPU.TextAlign = ContentAlignment.TopRight;
|
||||
labelC1.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelC1.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelC1.Location = new Point(396, 8);
|
||||
labelC1.Margin = new Padding(4, 0, 4, 0);
|
||||
labelC1.Name = "labelC1";
|
||||
labelC1.Size = new Size(119, 32);
|
||||
labelC1.TabIndex = 13;
|
||||
labelC1.Text = "APU";
|
||||
labelC1.TextAlign = ContentAlignment.TopRight;
|
||||
//
|
||||
// labelLeftCPU
|
||||
// labelLeftC1
|
||||
//
|
||||
labelLeftCPU.AutoSize = true;
|
||||
labelLeftCPU.Location = new Point(10, 8);
|
||||
labelLeftCPU.Margin = new Padding(4, 0, 4, 0);
|
||||
labelLeftCPU.Name = "labelLeftCPU";
|
||||
labelLeftCPU.Size = new Size(58, 32);
|
||||
labelLeftCPU.TabIndex = 12;
|
||||
labelLeftCPU.Text = "CPU";
|
||||
labelLeftC1.AutoSize = true;
|
||||
labelLeftC1.Location = new Point(10, 8);
|
||||
labelLeftC1.Margin = new Padding(4, 0, 4, 0);
|
||||
labelLeftC1.Name = "labelLeftC1";
|
||||
labelLeftC1.Size = new Size(58, 32);
|
||||
labelLeftC1.TabIndex = 12;
|
||||
labelLeftC1.Text = "APU";
|
||||
//
|
||||
// trackCPU
|
||||
// trackC1
|
||||
//
|
||||
trackCPU.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
trackCPU.Location = new Point(6, 44);
|
||||
trackCPU.Margin = new Padding(4, 2, 4, 2);
|
||||
trackCPU.Maximum = 85;
|
||||
trackCPU.Minimum = 5;
|
||||
trackCPU.Name = "trackCPU";
|
||||
trackCPU.Size = new Size(513, 90);
|
||||
trackCPU.TabIndex = 11;
|
||||
trackCPU.TickFrequency = 5;
|
||||
trackCPU.TickStyle = TickStyle.TopLeft;
|
||||
trackCPU.Value = 80;
|
||||
trackC1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
trackC1.Location = new Point(6, 48);
|
||||
trackC1.Margin = new Padding(4, 2, 4, 2);
|
||||
trackC1.Maximum = 85;
|
||||
trackC1.Minimum = 5;
|
||||
trackC1.Name = "trackC1";
|
||||
trackC1.Size = new Size(513, 90);
|
||||
trackC1.TabIndex = 11;
|
||||
trackC1.TickFrequency = 5;
|
||||
trackC1.TickStyle = TickStyle.TopLeft;
|
||||
trackC1.Value = 80;
|
||||
//
|
||||
// panelTotal
|
||||
// panelA0
|
||||
//
|
||||
panelTotal.AutoSize = true;
|
||||
panelTotal.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelTotal.Controls.Add(labelTotal);
|
||||
panelTotal.Controls.Add(labelLeftPlatform);
|
||||
panelTotal.Controls.Add(trackTotal);
|
||||
panelTotal.Dock = DockStyle.Top;
|
||||
panelTotal.Location = new Point(0, 66);
|
||||
panelTotal.Margin = new Padding(4);
|
||||
panelTotal.Name = "panelTotal";
|
||||
panelTotal.Size = new Size(523, 140);
|
||||
panelTotal.TabIndex = 40;
|
||||
panelA0.AutoSize = true;
|
||||
panelA0.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelA0.Controls.Add(labelA0);
|
||||
panelA0.Controls.Add(labelLeftA0);
|
||||
panelA0.Controls.Add(trackA0);
|
||||
panelA0.Dock = DockStyle.Top;
|
||||
panelA0.Location = new Point(0, 66);
|
||||
panelA0.Margin = new Padding(4);
|
||||
panelA0.Name = "panelA0";
|
||||
panelA0.Size = new Size(523, 140);
|
||||
panelA0.TabIndex = 40;
|
||||
//
|
||||
// labelTotal
|
||||
// labelA0
|
||||
//
|
||||
labelTotal.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelTotal.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelTotal.Location = new Point(396, 10);
|
||||
labelTotal.Margin = new Padding(4, 0, 4, 0);
|
||||
labelTotal.Name = "labelTotal";
|
||||
labelTotal.Size = new Size(122, 32);
|
||||
labelTotal.TabIndex = 12;
|
||||
labelTotal.Text = "Platform";
|
||||
labelTotal.TextAlign = ContentAlignment.TopRight;
|
||||
labelA0.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelA0.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelA0.Location = new Point(396, 10);
|
||||
labelA0.Margin = new Padding(4, 0, 4, 0);
|
||||
labelA0.Name = "labelA0";
|
||||
labelA0.Size = new Size(122, 32);
|
||||
labelA0.TabIndex = 12;
|
||||
labelA0.Text = "Platform";
|
||||
labelA0.TextAlign = ContentAlignment.TopRight;
|
||||
//
|
||||
// labelLeftPlatform
|
||||
// labelLeftA0
|
||||
//
|
||||
labelLeftPlatform.AutoSize = true;
|
||||
labelLeftPlatform.Location = new Point(10, 10);
|
||||
labelLeftPlatform.Margin = new Padding(4, 0, 4, 0);
|
||||
labelLeftPlatform.Name = "labelLeftPlatform";
|
||||
labelLeftPlatform.Size = new Size(104, 32);
|
||||
labelLeftPlatform.TabIndex = 11;
|
||||
labelLeftPlatform.Text = "Platform";
|
||||
labelLeftA0.AutoSize = true;
|
||||
labelLeftA0.Location = new Point(10, 10);
|
||||
labelLeftA0.Margin = new Padding(4, 0, 4, 0);
|
||||
labelLeftA0.Name = "labelLeftA0";
|
||||
labelLeftA0.Size = new Size(104, 32);
|
||||
labelLeftA0.TabIndex = 11;
|
||||
labelLeftA0.Text = "Platform";
|
||||
//
|
||||
// trackTotal
|
||||
// trackA0
|
||||
//
|
||||
trackTotal.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
trackTotal.Location = new Point(6, 48);
|
||||
trackTotal.Margin = new Padding(4, 2, 4, 2);
|
||||
trackTotal.Maximum = 180;
|
||||
trackTotal.Minimum = 10;
|
||||
trackTotal.Name = "trackTotal";
|
||||
trackTotal.Size = new Size(513, 90);
|
||||
trackTotal.TabIndex = 10;
|
||||
trackTotal.TickFrequency = 5;
|
||||
trackTotal.TickStyle = TickStyle.TopLeft;
|
||||
trackTotal.Value = 125;
|
||||
trackA0.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
trackA0.Location = new Point(6, 48);
|
||||
trackA0.Margin = new Padding(4, 2, 4, 2);
|
||||
trackA0.Maximum = 180;
|
||||
trackA0.Minimum = 10;
|
||||
trackA0.Name = "trackA0";
|
||||
trackA0.Size = new Size(513, 90);
|
||||
trackA0.TabIndex = 10;
|
||||
trackA0.TickFrequency = 5;
|
||||
trackA0.TickStyle = TickStyle.TopLeft;
|
||||
trackA0.Value = 125;
|
||||
//
|
||||
// panelTitleCPU
|
||||
//
|
||||
@@ -873,15 +873,15 @@ namespace GHelper
|
||||
panelPower.PerformLayout();
|
||||
panelApplyPower.ResumeLayout(false);
|
||||
panelApplyPower.PerformLayout();
|
||||
panelAPU.ResumeLayout(false);
|
||||
panelAPU.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackAPU).EndInit();
|
||||
panelCPU.ResumeLayout(false);
|
||||
panelCPU.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackCPU).EndInit();
|
||||
panelTotal.ResumeLayout(false);
|
||||
panelTotal.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackTotal).EndInit();
|
||||
panelB0.ResumeLayout(false);
|
||||
panelB0.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackB0).EndInit();
|
||||
panelC1.ResumeLayout(false);
|
||||
panelC1.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackC1).EndInit();
|
||||
panelA0.ResumeLayout(false);
|
||||
panelA0.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)trackA0).EndInit();
|
||||
panelTitleCPU.ResumeLayout(false);
|
||||
panelTitleCPU.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
|
||||
@@ -917,14 +917,14 @@ namespace GHelper
|
||||
private Label labelTip;
|
||||
private Panel panelPower;
|
||||
private Label labelInfo;
|
||||
private Panel panelCPU;
|
||||
private Label labelCPU;
|
||||
private Label labelLeftCPU;
|
||||
private TrackBar trackCPU;
|
||||
private Panel panelTotal;
|
||||
private Label labelTotal;
|
||||
private Label labelLeftPlatform;
|
||||
private TrackBar trackTotal;
|
||||
private Panel panelB0;
|
||||
private Label labelB0;
|
||||
private Label labelLeftB0;
|
||||
private TrackBar trackB0;
|
||||
private Panel panelA0;
|
||||
private Label labelA0;
|
||||
private Label labelLeftA0;
|
||||
private TrackBar trackA0;
|
||||
private Panel panelTitleCPU;
|
||||
private PictureBox pictureBox1;
|
||||
private Label labelPowerLimits;
|
||||
@@ -959,9 +959,9 @@ namespace GHelper
|
||||
private RComboBox comboBoost;
|
||||
private PictureBox picturePerf;
|
||||
private Label labelFans;
|
||||
private Panel panelAPU;
|
||||
private Label labelAPU;
|
||||
private Label labelLeftAPU;
|
||||
private TrackBar trackAPU;
|
||||
private Panel panelC1;
|
||||
private Label labelC1;
|
||||
private Label labelLeftC1;
|
||||
private TrackBar trackC1;
|
||||
}
|
||||
}
|
||||
91
app/Fans.cs
91
app/Fans.cs
@@ -77,22 +77,22 @@ namespace GHelper
|
||||
|
||||
buttonReset.Click += ButtonReset_Click;
|
||||
|
||||
trackTotal.Maximum = AsusACPI.MaxTotal;
|
||||
trackTotal.Minimum = AsusACPI.MinTotal;
|
||||
trackA0.Maximum = AsusACPI.MaxTotal;
|
||||
trackA0.Minimum = AsusACPI.MinTotal;
|
||||
|
||||
trackCPU.Maximum = AsusACPI.MaxCPU;
|
||||
trackCPU.Minimum = AsusACPI.MinCPU;
|
||||
trackB0.Maximum = AsusACPI.MaxCPU;
|
||||
trackB0.Minimum = AsusACPI.MinCPU;
|
||||
|
||||
trackAPU.Maximum = AsusACPI.MaxCPU;
|
||||
trackAPU.Minimum = AsusACPI.MinCPU;
|
||||
trackC1.Maximum = AsusACPI.MaxTotal;
|
||||
trackC1.Minimum = AsusACPI.MinTotal;
|
||||
|
||||
trackAPU.Scroll += TrackPower_Scroll;
|
||||
trackCPU.Scroll += TrackPower_Scroll;
|
||||
trackTotal.Scroll += TrackPower_Scroll;
|
||||
trackC1.Scroll += TrackPower_Scroll;
|
||||
trackB0.Scroll += TrackPower_Scroll;
|
||||
trackA0.Scroll += TrackPower_Scroll;
|
||||
|
||||
trackAPU.MouseUp += TrackPower_MouseUp;
|
||||
trackCPU.MouseUp += TrackPower_MouseUp;
|
||||
trackTotal.MouseUp += TrackPower_MouseUp;
|
||||
trackC1.MouseUp += TrackPower_MouseUp;
|
||||
trackB0.MouseUp += TrackPower_MouseUp;
|
||||
trackA0.MouseUp += TrackPower_MouseUp;
|
||||
|
||||
checkApplyFans.Click += CheckApplyFans_Click;
|
||||
checkApplyPower.Click += CheckApplyPower_Click;
|
||||
@@ -145,6 +145,15 @@ namespace GHelper
|
||||
|
||||
public void InitGPU(bool readClocks = false)
|
||||
{
|
||||
|
||||
if (Program.acpi.DeviceGet(AsusACPI.GPUEco) == 1)
|
||||
{
|
||||
gpuVisible = panelGPU.Visible = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (HardwareControl.GpuControl is null) HardwareControl.RecreateGpuControl();
|
||||
|
||||
if (HardwareControl.GpuControl is not null && HardwareControl.GpuControl.IsNvidia)
|
||||
{
|
||||
nvControl = (NvidiaGpuControl)HardwareControl.GpuControl;
|
||||
@@ -402,37 +411,45 @@ namespace GHelper
|
||||
public void InitPower(bool changed = false)
|
||||
{
|
||||
|
||||
bool cpuAmode = (Program.acpi.DeviceGet(AsusACPI.PPT_TotalA0) >= 0); // 2021 model +
|
||||
bool cpuBmode = (Program.acpi.DeviceGet(AsusACPI.PPT_CPUB0) >= 0); // 2022 model +
|
||||
bool apuMode = (Program.acpi.DeviceGet(AsusACPI.PPT_APUC1) >= 0);
|
||||
bool modeA0 = Program.acpi.DeviceGet(AsusACPI.PPT_TotalA0) >= 0;
|
||||
bool modeB0 = Program.acpi.IsAllAmdPPT();
|
||||
bool modeC1 = Program.acpi.DeviceGet(AsusACPI.PPT_APUC1) >= 0;
|
||||
|
||||
powerVisible = panelPower.Visible = cpuAmode;
|
||||
panelCPU.Visible = cpuBmode;
|
||||
panelAPU.Visible = apuMode;
|
||||
powerVisible = panelPower.Visible = modeA0;
|
||||
panelB0.Visible = modeB0;
|
||||
|
||||
// Yes, that's stupid, but Total slider on 2021 model actually adjusts CPU PPT
|
||||
if (!cpuBmode)
|
||||
|
||||
// All AMD version has B0 but doesn't have C0 (Nvidia GPU) settings
|
||||
if (modeB0)
|
||||
{
|
||||
labelLeftPlatform.Text = "CPU";
|
||||
labelLeftA0.Text = "Platform (CPU + GPU)";
|
||||
labelLeftB0.Text = "CPU";
|
||||
panelC1.Visible = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
labelLeftA0.Text = "CPU Slow (SPL + sPPT)";
|
||||
labelLeftC1.Text = "CPU Fast (fPPT)";
|
||||
panelC1.Visible = modeC1;
|
||||
}
|
||||
|
||||
int limit_total;
|
||||
int limit_cpu;
|
||||
int limit_apu;
|
||||
int limit_fast;
|
||||
|
||||
bool apply = AppConfig.getConfigPerf("auto_apply_power") == 1;
|
||||
|
||||
if (changed)
|
||||
{
|
||||
limit_total = trackTotal.Value;
|
||||
limit_cpu = trackCPU.Value;
|
||||
limit_apu = trackAPU.Value;
|
||||
limit_total = trackA0.Value;
|
||||
limit_cpu = trackB0.Value;
|
||||
limit_fast = trackC1.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
limit_total = AppConfig.getConfigPerf("limit_total");
|
||||
limit_cpu = AppConfig.getConfigPerf("limit_cpu");
|
||||
limit_apu = AppConfig.getConfigPerf("limit_apu");
|
||||
limit_fast = AppConfig.getConfigPerf("limit_fast");
|
||||
}
|
||||
|
||||
if (limit_total < 0) limit_total = AsusACPI.DefaultTotal;
|
||||
@@ -444,25 +461,23 @@ namespace GHelper
|
||||
if (limit_cpu < AsusACPI.MinCPU) limit_cpu = AsusACPI.MinCPU;
|
||||
if (limit_cpu > limit_total) limit_cpu = limit_total;
|
||||
|
||||
if (limit_apu < 0) limit_apu = AsusACPI.DefaultCPU;
|
||||
if (limit_apu > AsusACPI.MaxCPU) limit_apu = AsusACPI.MaxCPU;
|
||||
if (limit_apu < AsusACPI.MinCPU) limit_apu = AsusACPI.MinCPU;
|
||||
if (limit_apu > limit_total) limit_apu = limit_total;
|
||||
if (limit_fast < 0) limit_fast = AsusACPI.DefaultTotal;
|
||||
if (limit_fast > AsusACPI.MaxTotal) limit_fast = AsusACPI.MaxTotal;
|
||||
if (limit_fast < AsusACPI.MinTotal) limit_fast = AsusACPI.MinTotal;
|
||||
|
||||
|
||||
trackTotal.Value = limit_total;
|
||||
trackCPU.Value = limit_cpu;
|
||||
trackAPU.Value = limit_apu;
|
||||
trackA0.Value = limit_total;
|
||||
trackB0.Value = limit_cpu;
|
||||
trackC1.Value = limit_fast;
|
||||
|
||||
checkApplyPower.Checked = apply;
|
||||
|
||||
labelTotal.Text = trackTotal.Value.ToString() + "W";
|
||||
labelCPU.Text = trackCPU.Value.ToString() + "W";
|
||||
labelAPU.Text = trackAPU.Value.ToString() + "W";
|
||||
labelA0.Text = trackA0.Value.ToString() + "W";
|
||||
labelB0.Text = trackB0.Value.ToString() + "W";
|
||||
labelC1.Text = trackC1.Value.ToString() + "W";
|
||||
|
||||
AppConfig.setConfigPerf("limit_total", limit_total);
|
||||
AppConfig.setConfigPerf("limit_cpu", limit_cpu);
|
||||
AppConfig.setConfigPerf("limit_apu", limit_apu);
|
||||
AppConfig.setConfigPerf("limit_fast", limit_fast);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
<AssemblyVersion>0.72</AssemblyVersion>
|
||||
<AssemblyVersion>0.74</AssemblyVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
using NvAPIWrapper;
|
||||
using NvAPIWrapper.GPU;
|
||||
using NvAPIWrapper.GPU;
|
||||
using NvAPIWrapper.Native;
|
||||
using NvAPIWrapper.Native.Delegates;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.GPU.Structures;
|
||||
using NvAPIWrapper.Native.Interfaces.GPU;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Management;
|
||||
using static NvAPIWrapper.Native.GPU.Structures.PerformanceStates20InfoV1;
|
||||
|
||||
namespace GHelper.Gpu;
|
||||
@@ -58,7 +54,7 @@ public class NvidiaGpuControl : IGpuControl
|
||||
|
||||
try
|
||||
{
|
||||
Process[] processes = internalGpu.GetActiveApplications();
|
||||
Process[] processes = internalGpu.GetActiveApplications();
|
||||
foreach (Process process in processes)
|
||||
{
|
||||
try
|
||||
@@ -98,10 +94,11 @@ public class NvidiaGpuControl : IGpuControl
|
||||
Logger.WriteLine($"GET GPU CLOCKS: {core}, {memory}");
|
||||
return 0;
|
||||
|
||||
} catch (Exception ex)
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine("GET GPU CLOCKS:" + ex.Message);
|
||||
core = memory = 0;
|
||||
core = memory = 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -155,7 +152,7 @@ public class NvidiaGpuControl : IGpuControl
|
||||
//Thread.Sleep(2000);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex )
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.ToString());
|
||||
return false;
|
||||
@@ -195,7 +192,7 @@ public class NvidiaGpuControl : IGpuControl
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine("SET GPU CLOCKS: "+ex.Message);
|
||||
Logger.WriteLine("SET GPU CLOCKS: " + ex.Message);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -179,4 +179,38 @@ public static class HardwareControl
|
||||
Debug.WriteLine(ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void KillGPUApps()
|
||||
{
|
||||
|
||||
List<string> tokill = new() { "EADesktop", "RadeonSoftware", "epicgameslauncher" };
|
||||
|
||||
if (AppConfig.isConfig("kill_gpu_apps"))
|
||||
{
|
||||
tokill.Add("nvdisplay.container");
|
||||
tokill.Add("nvcontainer");
|
||||
tokill.Add("nvcplui");
|
||||
}
|
||||
|
||||
foreach (string kill in tokill)
|
||||
foreach (var process in Process.GetProcessesByName(kill))
|
||||
{
|
||||
try
|
||||
{
|
||||
process.Kill();
|
||||
Logger.WriteLine($"Stopped: {process.ProcessName}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine($"Failed to stop: {process.ProcessName} {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
if (AppConfig.isConfig("kill_gpu_apps") && GpuControl is not null && GpuControl.IsNvidia)
|
||||
{
|
||||
NvidiaGpuControl nvControl = (NvidiaGpuControl)GpuControl;
|
||||
nvControl.KillGPUApps();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
using HidLibrary;
|
||||
using Microsoft.Win32;
|
||||
using NAudio.CoreAudioApi;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Management;
|
||||
using Tools;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
@@ -57,34 +55,22 @@ namespace GHelper
|
||||
System.Timers.Timer timer = new System.Timers.Timer(1000);
|
||||
public bool backlight = true;
|
||||
|
||||
private static nint windowHandle;
|
||||
|
||||
public static Keys keyProfile = Keys.F5;
|
||||
public static Keys keyApp = Keys.F12;
|
||||
|
||||
KeyboardListener listener;
|
||||
KeyboardHook hook = new KeyboardHook();
|
||||
|
||||
KeyHandler m1, m2, handlerProfile, handlerApp;
|
||||
|
||||
public InputDispatcher(nint handle)
|
||||
public InputDispatcher()
|
||||
{
|
||||
|
||||
windowHandle = handle;
|
||||
|
||||
byte[] result = Program.acpi.DeviceInit();
|
||||
Debug.WriteLine($"Init: {BitConverter.ToString(result)}");
|
||||
|
||||
Program.acpi.SubscribeToEvents(WatcherEventArrived);
|
||||
//Task.Run(Program.acpi.RunListener);
|
||||
|
||||
// CTRL + SHIFT + F5 to cycle profiles
|
||||
if (AppConfig.getConfig("keybind_profile") != -1) keyProfile = (Keys)AppConfig.getConfig("keybind_profile");
|
||||
|
||||
handlerProfile = new KeyHandler(KeyHandler.SHIFT | KeyHandler.CTRL, keyProfile, windowHandle);
|
||||
handlerApp = new KeyHandler(KeyHandler.SHIFT | KeyHandler.CTRL, keyApp, windowHandle);
|
||||
|
||||
m1 = new KeyHandler(KeyHandler.NOMOD, Keys.VolumeDown, windowHandle);
|
||||
m2 = new KeyHandler(KeyHandler.NOMOD, Keys.VolumeUp, windowHandle);
|
||||
hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(KeyPressed);
|
||||
|
||||
RegisterKeys();
|
||||
|
||||
@@ -100,7 +86,7 @@ namespace GHelper
|
||||
|
||||
if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online)
|
||||
kb_timeout = AppConfig.getConfig("keyboard_ac_timeout", 0);
|
||||
else
|
||||
else
|
||||
kb_timeout = AppConfig.getConfig("keyboard_timeout", 60);
|
||||
|
||||
if (kb_timeout == 0) return;
|
||||
@@ -142,20 +128,25 @@ namespace GHelper
|
||||
|
||||
public void RegisterKeys()
|
||||
{
|
||||
// CTRL + SHIFT + F5 to cycle profiles
|
||||
if (AppConfig.getConfig("keybind_profile") != -1) keyProfile = (Keys)AppConfig.getConfig("keybind_profile");
|
||||
if (AppConfig.getConfig("keybind_app") != -1) keyApp = (Keys)AppConfig.getConfig("keybind_app");
|
||||
|
||||
string actionM1 = AppConfig.getConfigString("m1");
|
||||
string actionM2 = AppConfig.getConfigString("m2");
|
||||
|
||||
handlerProfile.Unregiser();
|
||||
m1.Unregiser();
|
||||
m2.Unregiser();
|
||||
hook.UnregisterAll();
|
||||
|
||||
if (keyProfile != Keys.None) handlerProfile.Register();
|
||||
if (keyApp != Keys.None) handlerApp.Register();
|
||||
if (keyProfile != Keys.None) hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control, keyProfile);
|
||||
if (keyApp != Keys.None) hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control, keyApp);
|
||||
|
||||
if (actionM1 is not null && actionM1.Length > 0) m1.Register();
|
||||
if (actionM1 is not null && actionM1.Length > 0) hook.RegisterHotKey(ModifierKeys.None, Keys.VolumeDown);
|
||||
if (actionM2 is not null && actionM2.Length > 0) hook.RegisterHotKey(ModifierKeys.None, Keys.VolumeUp);
|
||||
|
||||
if (actionM2 is not null && actionM2.Length > 0) m2.Register();
|
||||
// FN-Lock group
|
||||
|
||||
if (AppConfig.isConfig("fn_lock"))
|
||||
for (Keys i = Keys.F1; i < Keys.F12; i++) hook.RegisterHotKey(ModifierKeys.None, i);
|
||||
|
||||
}
|
||||
|
||||
@@ -175,12 +166,75 @@ namespace GHelper
|
||||
|
||||
|
||||
if (intKey > 0)
|
||||
NativeMethods.KeyPress(intKey);
|
||||
KeyboardHook.KeyPress((Keys)intKey);
|
||||
else
|
||||
LaunchProcess(command);
|
||||
|
||||
}
|
||||
|
||||
public void KeyPressed(object sender, KeyPressedEventArgs e)
|
||||
{
|
||||
|
||||
if (e.Modifier == ModifierKeys.None)
|
||||
{
|
||||
Debug.WriteLine(e.Key);
|
||||
switch (e.Key)
|
||||
{
|
||||
case Keys.F1:
|
||||
KeyboardHook.KeyPress(Keys.VolumeMute);
|
||||
break;
|
||||
case Keys.F2:
|
||||
HandleEvent(197);
|
||||
break;
|
||||
case Keys.F3:
|
||||
HandleEvent(196);
|
||||
break;
|
||||
case Keys.F4:
|
||||
KeyProcess("fnf4");
|
||||
break;
|
||||
case Keys.F5:
|
||||
KeyProcess("fnf5");
|
||||
break;
|
||||
case Keys.F6:
|
||||
KeyboardHook.KeyPress(Keys.Snapshot);
|
||||
break;
|
||||
case Keys.F7:
|
||||
HandleEvent(16);
|
||||
break;
|
||||
case Keys.F8:
|
||||
HandleEvent(32);
|
||||
break;
|
||||
case Keys.F9:
|
||||
break;
|
||||
case Keys.F10:
|
||||
HandleEvent(107);
|
||||
break;
|
||||
case Keys.F11:
|
||||
HandleEvent(108);
|
||||
break;
|
||||
case Keys.F12:
|
||||
break;
|
||||
case Keys.VolumeDown:
|
||||
KeyProcess("m1");
|
||||
break;
|
||||
case Keys.VolumeUp:
|
||||
KeyProcess("m2");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (e.Modifier == (ModifierKeys.Control | ModifierKeys.Shift))
|
||||
{
|
||||
if (e.Key == keyProfile) Program.settingsForm.CyclePerformanceMode();
|
||||
if (e.Key == keyApp) Program.SettingsToggle();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void KeyProcess(string name = "m3")
|
||||
{
|
||||
string action = AppConfig.getConfigString(name);
|
||||
@@ -200,13 +254,13 @@ namespace GHelper
|
||||
switch (action)
|
||||
{
|
||||
case "mute":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_VOLUME_MUTE);
|
||||
KeyboardHook.KeyPress(Keys.VolumeMute);
|
||||
break;
|
||||
case "play":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_MEDIA_PLAY_PAUSE);
|
||||
KeyboardHook.KeyPress(Keys.MediaPlayPause);
|
||||
break;
|
||||
case "screenshot":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_SNAPSHOT);
|
||||
KeyboardHook.KeyPress(Keys.Snapshot);
|
||||
break;
|
||||
case "screen":
|
||||
NativeMethods.TurnOffScreen(Program.settingsForm.Handle);
|
||||
|
||||
164
app/KeyboardHook.cs
Normal file
164
app/KeyboardHook.cs
Normal file
@@ -0,0 +1,164 @@
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
public sealed class KeyboardHook : IDisposable
|
||||
{
|
||||
// Registers a hot key with Windows.
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
|
||||
// Unregisters the hot key with Windows.
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
|
||||
|
||||
[DllImport("user32.dll", SetLastError = true)]
|
||||
public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo);
|
||||
|
||||
public const int KEYEVENTF_EXTENDEDKEY = 1;
|
||||
public const int KEYEVENTF_KEYUP = 2;
|
||||
|
||||
public static void KeyPress(Keys key)
|
||||
{
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents the window that is used internally to get the messages.
|
||||
/// </summary>
|
||||
private class Window : NativeWindow, IDisposable
|
||||
{
|
||||
private static int WM_HOTKEY = 0x0312;
|
||||
public static Keys? fakeKey;
|
||||
|
||||
public Window()
|
||||
{
|
||||
// create the handle for the window.
|
||||
this.CreateHandle(new CreateParams());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overridden to get the notifications.
|
||||
/// </summary>
|
||||
/// <param name="m"></param>
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
base.WndProc(ref m);
|
||||
|
||||
// check if we got a hot key pressed.
|
||||
if (m.Msg == WM_HOTKEY)
|
||||
{
|
||||
// get the keys.
|
||||
Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF);
|
||||
ModifierKeys modifier = (ModifierKeys)((int)m.LParam & 0xFFFF);
|
||||
|
||||
// invoke the event to notify the parent.
|
||||
if (KeyPressed != null)
|
||||
KeyPressed(this, new KeyPressedEventArgs(modifier, key));
|
||||
}
|
||||
}
|
||||
|
||||
public event EventHandler<KeyPressedEventArgs> KeyPressed;
|
||||
|
||||
#region IDisposable Members
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
this.DestroyHandle();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
private Window _window = new Window();
|
||||
private int _currentId;
|
||||
|
||||
public KeyboardHook()
|
||||
{
|
||||
// register the event of the inner native window.
|
||||
_window.KeyPressed += delegate (object sender, KeyPressedEventArgs args)
|
||||
{
|
||||
if (KeyPressed != null)
|
||||
KeyPressed(this, args);
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers a hot key in the system.
|
||||
/// </summary>
|
||||
/// <param name="modifier">The modifiers that are associated with the hot key.</param>
|
||||
/// <param name="key">The key itself that is associated with the hot key.</param>
|
||||
public void RegisterHotKey(ModifierKeys modifier, Keys key)
|
||||
{
|
||||
// increment the counter.
|
||||
_currentId = _currentId + 1;
|
||||
|
||||
// register the hot key.
|
||||
if (!RegisterHotKey(_window.Handle, _currentId, (uint)modifier, (uint)key))
|
||||
throw new InvalidOperationException("Couldn’t register the hot key.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A hot key has been pressed.
|
||||
/// </summary>
|
||||
public event EventHandler<KeyPressedEventArgs> KeyPressed;
|
||||
|
||||
#region IDisposable Members
|
||||
|
||||
public void UnregisterAll()
|
||||
{
|
||||
// unregister all the registered hot keys.
|
||||
for (int i = _currentId; i > 0; i--)
|
||||
{
|
||||
UnregisterHotKey(_window.Handle, i);
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
UnregisterAll();
|
||||
// dispose the inner native window.
|
||||
_window.Dispose();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Event Args for the event that is fired after the hot key has been pressed.
|
||||
/// </summary>
|
||||
public class KeyPressedEventArgs : EventArgs
|
||||
{
|
||||
private ModifierKeys _modifier;
|
||||
private Keys _key;
|
||||
|
||||
internal KeyPressedEventArgs(ModifierKeys modifier, Keys key)
|
||||
{
|
||||
_modifier = modifier;
|
||||
_key = key;
|
||||
}
|
||||
|
||||
public ModifierKeys Modifier
|
||||
{
|
||||
get { return _modifier; }
|
||||
}
|
||||
|
||||
public Keys Key
|
||||
{
|
||||
get { return _key; }
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The enumeration of possible modifiers.
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum ModifierKeys : uint
|
||||
{
|
||||
None = 0,
|
||||
Alt = 1,
|
||||
Control = 2,
|
||||
Shift = 4,
|
||||
Win = 8
|
||||
}
|
||||
@@ -1,54 +1,11 @@
|
||||
using GHelper;
|
||||
using System.ComponentModel;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar;
|
||||
using static Tools.ScreenInterrogatory;
|
||||
|
||||
namespace Tools
|
||||
{
|
||||
|
||||
public class KeyHandler
|
||||
{
|
||||
|
||||
public const int NOMOD = 0x0000;
|
||||
public const int ALT = 0x0001;
|
||||
public const int CTRL = 0x0002;
|
||||
public const int SHIFT = 0x0004;
|
||||
public const int WIN = 0x0008;
|
||||
|
||||
public const int WM_HOTKEY_MSG_ID = 0x0312;
|
||||
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
|
||||
|
||||
private int modifier;
|
||||
private int key;
|
||||
private IntPtr hWnd;
|
||||
private int id;
|
||||
public KeyHandler(int modifier, Keys key, nint handle)
|
||||
{
|
||||
this.modifier = modifier;
|
||||
this.key = (int)key;
|
||||
this.hWnd = handle;
|
||||
id = this.GetHashCode();
|
||||
}
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return modifier ^ key ^ hWnd.ToInt32();
|
||||
}
|
||||
public bool Register()
|
||||
{
|
||||
return RegisterHotKey(hWnd, id, modifier, key);
|
||||
}
|
||||
public bool Unregiser()
|
||||
{
|
||||
return UnregisterHotKey(hWnd, id);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ScreenInterrogatory
|
||||
{
|
||||
@@ -459,24 +416,6 @@ public class NativeMethods
|
||||
public static extern bool SetSuspendState(bool hiberate, bool forceCritical, bool disableWakeEvent);
|
||||
|
||||
|
||||
public const int KEYEVENTF_EXTENDEDKEY = 1;
|
||||
public const int KEYEVENTF_KEYUP = 2;
|
||||
|
||||
public const int VK_MEDIA_NEXT_TRACK = 0xB0;
|
||||
public const int VK_MEDIA_PLAY_PAUSE = 0xB3;
|
||||
public const int VK_MEDIA_PREV_TRACK = 0xB1;
|
||||
public const int VK_VOLUME_MUTE = 0xAD;
|
||||
public const int VK_SNAPSHOT = 0x2C;
|
||||
|
||||
[DllImport("user32.dll", SetLastError = true)]
|
||||
public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo);
|
||||
|
||||
public static void KeyPress(int key = VK_MEDIA_PLAY_PAUSE)
|
||||
{
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
}
|
||||
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
|
||||
public const int SW_RESTORE = 9;
|
||||
|
||||
@@ -77,7 +77,7 @@ namespace GHelper
|
||||
|
||||
trayIcon.MouseClick += TrayIcon_MouseClick;
|
||||
|
||||
inputDispatcher = new InputDispatcher(ds);
|
||||
inputDispatcher = new InputDispatcher();
|
||||
|
||||
settingsForm.InitAura();
|
||||
settingsForm.InitMatrix();
|
||||
|
||||
@@ -190,7 +190,10 @@
|
||||
<value>Encendida</value>
|
||||
</data>
|
||||
<data name="BacklightTimeout" xml:space="preserve">
|
||||
<value>Apagar retroiluminación con batería (segundos)</value>
|
||||
<value>Apagar con batería tras (segundos)</value>
|
||||
</data>
|
||||
<data name="BacklightTimeoutPlugged" xml:space="preserve">
|
||||
<value>Apagar cuando está enchufado tras (0 - nunca)</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Equilibrado</value>
|
||||
@@ -303,6 +306,9 @@
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>Bajar retroiluminación con batería</value>
|
||||
</data>
|
||||
<data name="KillGpuApps" xml:space="preserve">
|
||||
<value>Detener todas las aplicaciones que usan la dGPU cuando se cambia a Eco</value>
|
||||
</data>
|
||||
<data name="LaptopBacklight" xml:space="preserve">
|
||||
<value>Retroiluminación</value>
|
||||
</data>
|
||||
|
||||
151
app/Settings.Designer.cs
generated
151
app/Settings.Designer.cs
generated
@@ -66,9 +66,9 @@ namespace GHelper
|
||||
tableGPU = new TableLayoutPanel();
|
||||
buttonEco = new RButton();
|
||||
buttonStandard = new RButton();
|
||||
buttonXGM = new RButton();
|
||||
buttonOptimized = new RButton();
|
||||
buttonUltimate = new RButton();
|
||||
buttonXGM = new RButton();
|
||||
panelScreen = new Panel();
|
||||
labelMidFan = new Label();
|
||||
labelTipScreen = new Label();
|
||||
@@ -81,12 +81,12 @@ namespace GHelper
|
||||
labelSreen = new Label();
|
||||
panelKeyboard = new Panel();
|
||||
tableLayoutKeyboard = new TableLayoutPanel();
|
||||
comboKeyboard = new RComboBox();
|
||||
buttonKeyboard = new RButton();
|
||||
panelColor = new Panel();
|
||||
pictureColor2 = new PictureBox();
|
||||
pictureColor = new PictureBox();
|
||||
buttonKeyboardColor = new RButton();
|
||||
buttonKeyboard = new RButton();
|
||||
comboKeyboard = new RComboBox();
|
||||
pictureKeyboard = new PictureBox();
|
||||
labelKeyboard = new Label();
|
||||
panelMatrix.SuspendLayout();
|
||||
@@ -121,7 +121,7 @@ namespace GHelper
|
||||
panelMatrix.Controls.Add(pictureMatrix);
|
||||
panelMatrix.Controls.Add(labelMatrix);
|
||||
panelMatrix.Dock = DockStyle.Top;
|
||||
panelMatrix.Location = new Point(10, 758);
|
||||
panelMatrix.Location = new Point(10, 795);
|
||||
panelMatrix.Margin = new Padding(8);
|
||||
panelMatrix.Name = "panelMatrix";
|
||||
panelMatrix.Padding = new Padding(0, 0, 0, 12);
|
||||
@@ -158,7 +158,7 @@ namespace GHelper
|
||||
tableLayoutMatrix.Name = "tableLayoutMatrix";
|
||||
tableLayoutMatrix.RowCount = 1;
|
||||
tableLayoutMatrix.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
|
||||
tableLayoutMatrix.Size = new Size(771, 60);
|
||||
tableLayoutMatrix.Size = new Size(771, 59);
|
||||
tableLayoutMatrix.TabIndex = 43;
|
||||
//
|
||||
// comboMatrix
|
||||
@@ -202,7 +202,7 @@ namespace GHelper
|
||||
buttonMatrix.Dock = DockStyle.Top;
|
||||
buttonMatrix.FlatAppearance.BorderSize = 0;
|
||||
buttonMatrix.FlatStyle = FlatStyle.Flat;
|
||||
buttonMatrix.Location = new Point(518, 8);
|
||||
buttonMatrix.Location = new Point(518, 7);
|
||||
buttonMatrix.Margin = new Padding(4, 7, 4, 7);
|
||||
buttonMatrix.Name = "buttonMatrix";
|
||||
buttonMatrix.Secondary = true;
|
||||
@@ -231,7 +231,7 @@ namespace GHelper
|
||||
labelMatrix.Name = "labelMatrix";
|
||||
labelMatrix.Size = new Size(170, 32);
|
||||
labelMatrix.TabIndex = 38;
|
||||
labelMatrix.Text = Properties.Strings.AnimeMatrix;
|
||||
labelMatrix.Text = "Anime Matrix";
|
||||
//
|
||||
// panelBattery
|
||||
//
|
||||
@@ -244,7 +244,7 @@ namespace GHelper
|
||||
panelBattery.Controls.Add(pictureBattery);
|
||||
panelBattery.Controls.Add(labelBatteryTitle);
|
||||
panelBattery.Dock = DockStyle.Top;
|
||||
panelBattery.Location = new Point(10, 926);
|
||||
panelBattery.Location = new Point(10, 963);
|
||||
panelBattery.Margin = new Padding(8);
|
||||
panelBattery.Name = "panelBattery";
|
||||
panelBattery.Padding = new Padding(0, 0, 0, 12);
|
||||
@@ -276,7 +276,7 @@ namespace GHelper
|
||||
//
|
||||
// labelVersion
|
||||
//
|
||||
labelVersion.AutoSize = false;
|
||||
labelVersion.Cursor = Cursors.Hand;
|
||||
labelVersion.Font = new Font("Segoe UI", 9F, FontStyle.Underline, GraphicsUnit.Point);
|
||||
labelVersion.ForeColor = SystemColors.ControlDark;
|
||||
labelVersion.Location = new Point(25, 119);
|
||||
@@ -285,7 +285,6 @@ namespace GHelper
|
||||
labelVersion.Size = new Size(300, 32);
|
||||
labelVersion.TabIndex = 37;
|
||||
labelVersion.Text = "v.0";
|
||||
labelVersion.Cursor = Cursors.Hand;
|
||||
//
|
||||
// labelBattery
|
||||
//
|
||||
@@ -317,7 +316,7 @@ namespace GHelper
|
||||
labelBatteryTitle.Name = "labelBatteryTitle";
|
||||
labelBatteryTitle.Size = new Size(393, 36);
|
||||
labelBatteryTitle.TabIndex = 34;
|
||||
labelBatteryTitle.Text = Properties.Strings.BatteryChargeLimit;
|
||||
labelBatteryTitle.Text = "Battery Charge Limit";
|
||||
//
|
||||
// panelFooter
|
||||
//
|
||||
@@ -326,7 +325,7 @@ namespace GHelper
|
||||
panelFooter.Controls.Add(buttonQuit);
|
||||
panelFooter.Controls.Add(checkStartup);
|
||||
panelFooter.Dock = DockStyle.Top;
|
||||
panelFooter.Location = new Point(10, 1089);
|
||||
panelFooter.Location = new Point(10, 1126);
|
||||
panelFooter.Margin = new Padding(8);
|
||||
panelFooter.Name = "panelFooter";
|
||||
panelFooter.Padding = new Padding(0, 0, 0, 10);
|
||||
@@ -398,7 +397,7 @@ namespace GHelper
|
||||
labelPerf.Name = "labelPerf";
|
||||
labelPerf.Size = new Size(234, 32);
|
||||
labelPerf.TabIndex = 31;
|
||||
labelPerf.Text = Properties.Strings.PerformanceMode;
|
||||
labelPerf.Text = "Performance Mode";
|
||||
//
|
||||
// labelCPUFan
|
||||
//
|
||||
@@ -572,7 +571,7 @@ namespace GHelper
|
||||
labelGPU.Name = "labelGPU";
|
||||
labelGPU.Size = new Size(136, 32);
|
||||
labelGPU.TabIndex = 18;
|
||||
labelGPU.Text = Properties.Strings.GPUMode;
|
||||
labelGPU.Text = "GPU Mode";
|
||||
//
|
||||
// labelGPUFan
|
||||
//
|
||||
@@ -653,6 +652,29 @@ namespace GHelper
|
||||
buttonStandard.TextImageRelation = TextImageRelation.ImageAboveText;
|
||||
buttonStandard.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// buttonXGM
|
||||
//
|
||||
buttonXGM.Activated = false;
|
||||
buttonXGM.BackColor = SystemColors.ControlLightLight;
|
||||
buttonXGM.BorderColor = Color.Transparent;
|
||||
buttonXGM.BorderRadius = 5;
|
||||
buttonXGM.Dock = DockStyle.Top;
|
||||
buttonXGM.FlatAppearance.BorderSize = 0;
|
||||
buttonXGM.FlatStyle = FlatStyle.Flat;
|
||||
buttonXGM.ForeColor = SystemColors.ControlText;
|
||||
buttonXGM.Image = Properties.Resources.icons8_video_48;
|
||||
buttonXGM.ImageAlign = ContentAlignment.BottomCenter;
|
||||
buttonXGM.Location = new Point(4, 132);
|
||||
buttonXGM.Margin = new Padding(4);
|
||||
buttonXGM.Name = "buttonXGM";
|
||||
buttonXGM.Secondary = false;
|
||||
buttonXGM.Size = new Size(185, 120);
|
||||
buttonXGM.TabIndex = 2;
|
||||
buttonXGM.Text = "XG Mobile";
|
||||
buttonXGM.TextImageRelation = TextImageRelation.ImageAboveText;
|
||||
buttonXGM.UseVisualStyleBackColor = false;
|
||||
buttonXGM.Visible = false;
|
||||
//
|
||||
// buttonOptimized
|
||||
//
|
||||
buttonOptimized.Activated = false;
|
||||
@@ -696,30 +718,6 @@ namespace GHelper
|
||||
buttonUltimate.Text = Properties.Strings.UltimateMode;
|
||||
buttonUltimate.TextImageRelation = TextImageRelation.ImageAboveText;
|
||||
buttonUltimate.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// buttonXGM
|
||||
//
|
||||
buttonXGM.Activated = false;
|
||||
buttonXGM.BackColor = SystemColors.ControlLightLight;
|
||||
buttonXGM.BorderColor = Color.Transparent;
|
||||
buttonXGM.BorderRadius = 5;
|
||||
buttonXGM.Dock = DockStyle.Top;
|
||||
buttonXGM.FlatAppearance.BorderSize = 0;
|
||||
buttonXGM.FlatStyle = FlatStyle.Flat;
|
||||
buttonXGM.ForeColor = SystemColors.ControlText;
|
||||
buttonXGM.Image = Properties.Resources.icons8_video_48;
|
||||
buttonXGM.ImageAlign = ContentAlignment.BottomCenter;
|
||||
buttonXGM.Location = new Point(390, 4);
|
||||
buttonXGM.Margin = new Padding(4);
|
||||
buttonXGM.Name = "buttonXGM";
|
||||
buttonXGM.Secondary = false;
|
||||
buttonXGM.Size = new Size(185, 120);
|
||||
buttonXGM.TabIndex = 2;
|
||||
buttonXGM.Text = "XG Mobile";
|
||||
buttonXGM.TextImageRelation = TextImageRelation.ImageAboveText;
|
||||
buttonXGM.UseVisualStyleBackColor = false;
|
||||
buttonXGM.Visible = false;
|
||||
|
||||
//
|
||||
// panelScreen
|
||||
//
|
||||
@@ -731,7 +729,7 @@ namespace GHelper
|
||||
panelScreen.Controls.Add(pictureScreen);
|
||||
panelScreen.Controls.Add(labelSreen);
|
||||
panelScreen.Dock = DockStyle.Top;
|
||||
panelScreen.Location = new Point(10, 447);
|
||||
panelScreen.Location = new Point(10, 485);
|
||||
panelScreen.Margin = new Padding(8);
|
||||
panelScreen.Name = "panelScreen";
|
||||
panelScreen.Padding = new Padding(0, 0, 0, 10);
|
||||
@@ -878,7 +876,7 @@ namespace GHelper
|
||||
labelSreen.Name = "labelSreen";
|
||||
labelSreen.Size = new Size(176, 32);
|
||||
labelSreen.TabIndex = 21;
|
||||
labelSreen.Text = Properties.Strings.LaptopScreen;
|
||||
labelSreen.Text = "Laptop Screen";
|
||||
//
|
||||
// panelKeyboard
|
||||
//
|
||||
@@ -888,11 +886,11 @@ namespace GHelper
|
||||
panelKeyboard.Controls.Add(pictureKeyboard);
|
||||
panelKeyboard.Controls.Add(labelKeyboard);
|
||||
panelKeyboard.Dock = DockStyle.Top;
|
||||
panelKeyboard.Location = new Point(10, 628);
|
||||
panelKeyboard.Location = new Point(10, 666);
|
||||
panelKeyboard.Margin = new Padding(8);
|
||||
panelKeyboard.Name = "panelKeyboard";
|
||||
panelKeyboard.Padding = new Padding(0, 0, 0, 12);
|
||||
panelKeyboard.Size = new Size(810, 130);
|
||||
panelKeyboard.Size = new Size(810, 129);
|
||||
panelKeyboard.TabIndex = 39;
|
||||
//
|
||||
// tableLayoutKeyboard
|
||||
@@ -912,25 +910,26 @@ namespace GHelper
|
||||
tableLayoutKeyboard.Name = "tableLayoutKeyboard";
|
||||
tableLayoutKeyboard.RowCount = 1;
|
||||
tableLayoutKeyboard.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
|
||||
tableLayoutKeyboard.Size = new Size(771, 60);
|
||||
tableLayoutKeyboard.Size = new Size(771, 59);
|
||||
tableLayoutKeyboard.TabIndex = 39;
|
||||
//
|
||||
// comboKeyboard
|
||||
// buttonKeyboard
|
||||
//
|
||||
comboKeyboard.BorderColor = Color.White;
|
||||
comboKeyboard.ButtonColor = Color.FromArgb(255, 255, 255);
|
||||
comboKeyboard.Dock = DockStyle.Top;
|
||||
comboKeyboard.FlatStyle = FlatStyle.Flat;
|
||||
comboKeyboard.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
comboKeyboard.FormattingEnabled = true;
|
||||
comboKeyboard.ItemHeight = 32;
|
||||
comboKeyboard.Items.AddRange(new object[] { "Static", "Breathe", "Rainbow", "Strobe" });
|
||||
comboKeyboard.Location = new Point(4, 10);
|
||||
comboKeyboard.Margin = new Padding(4, 10, 4, 8);
|
||||
comboKeyboard.Name = "comboKeyboard";
|
||||
comboKeyboard.Size = new Size(249, 44);
|
||||
comboKeyboard.TabIndex = 35;
|
||||
comboKeyboard.TabStop = false;
|
||||
buttonKeyboard.Activated = false;
|
||||
buttonKeyboard.BackColor = SystemColors.ControlLight;
|
||||
buttonKeyboard.BorderColor = Color.Transparent;
|
||||
buttonKeyboard.BorderRadius = 2;
|
||||
buttonKeyboard.Dock = DockStyle.Top;
|
||||
buttonKeyboard.FlatAppearance.BorderSize = 0;
|
||||
buttonKeyboard.FlatStyle = FlatStyle.Flat;
|
||||
buttonKeyboard.Location = new Point(518, 7);
|
||||
buttonKeyboard.Margin = new Padding(4, 7, 4, 7);
|
||||
buttonKeyboard.Name = "buttonKeyboard";
|
||||
buttonKeyboard.Secondary = true;
|
||||
buttonKeyboard.Size = new Size(249, 45);
|
||||
buttonKeyboard.TabIndex = 37;
|
||||
buttonKeyboard.Text = Properties.Strings.Extra;
|
||||
buttonKeyboard.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// panelColor
|
||||
//
|
||||
@@ -939,7 +938,7 @@ namespace GHelper
|
||||
panelColor.Controls.Add(pictureColor);
|
||||
panelColor.Controls.Add(buttonKeyboardColor);
|
||||
panelColor.Dock = DockStyle.Fill;
|
||||
panelColor.Location = new Point(261, 8);
|
||||
panelColor.Location = new Point(261, 7);
|
||||
panelColor.Margin = new Padding(4, 7, 4, 7);
|
||||
panelColor.Name = "panelColor";
|
||||
panelColor.Size = new Size(249, 45);
|
||||
@@ -983,23 +982,22 @@ namespace GHelper
|
||||
buttonKeyboardColor.Text = Properties.Strings.Color;
|
||||
buttonKeyboardColor.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// buttonKeyboard
|
||||
// comboKeyboard
|
||||
//
|
||||
buttonKeyboard.Activated = false;
|
||||
buttonKeyboard.BackColor = SystemColors.ControlLight;
|
||||
buttonKeyboard.BorderColor = Color.Transparent;
|
||||
buttonKeyboard.BorderRadius = 2;
|
||||
buttonKeyboard.Dock = DockStyle.Top;
|
||||
buttonKeyboard.FlatAppearance.BorderSize = 0;
|
||||
buttonKeyboard.FlatStyle = FlatStyle.Flat;
|
||||
buttonKeyboard.Location = new Point(518, 8);
|
||||
buttonKeyboard.Margin = new Padding(4, 7, 4, 7);
|
||||
buttonKeyboard.Name = "buttonKeyboard";
|
||||
buttonKeyboard.Secondary = true;
|
||||
buttonKeyboard.Size = new Size(249, 45);
|
||||
buttonKeyboard.TabIndex = 37;
|
||||
buttonKeyboard.Text = Properties.Strings.Extra;
|
||||
buttonKeyboard.UseVisualStyleBackColor = false;
|
||||
comboKeyboard.BorderColor = Color.White;
|
||||
comboKeyboard.ButtonColor = Color.FromArgb(255, 255, 255);
|
||||
comboKeyboard.Dock = DockStyle.Top;
|
||||
comboKeyboard.FlatStyle = FlatStyle.Flat;
|
||||
comboKeyboard.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
comboKeyboard.FormattingEnabled = true;
|
||||
comboKeyboard.ItemHeight = 32;
|
||||
comboKeyboard.Items.AddRange(new object[] { "Static", "Breathe", "Rainbow", "Strobe" });
|
||||
comboKeyboard.Location = new Point(4, 10);
|
||||
comboKeyboard.Margin = new Padding(4, 10, 4, 8);
|
||||
comboKeyboard.Name = "comboKeyboard";
|
||||
comboKeyboard.Size = new Size(249, 40);
|
||||
comboKeyboard.TabIndex = 35;
|
||||
comboKeyboard.TabStop = false;
|
||||
//
|
||||
// pictureKeyboard
|
||||
//
|
||||
@@ -1021,7 +1019,7 @@ namespace GHelper
|
||||
labelKeyboard.Name = "labelKeyboard";
|
||||
labelKeyboard.Size = new Size(210, 32);
|
||||
labelKeyboard.TabIndex = 32;
|
||||
labelKeyboard.Text = Properties.Strings.LaptopKeyboard;
|
||||
labelKeyboard.Text = "Laptop Keyboard";
|
||||
//
|
||||
// SettingsForm
|
||||
//
|
||||
@@ -1053,7 +1051,6 @@ namespace GHelper
|
||||
tableLayoutMatrix.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)pictureMatrix).EndInit();
|
||||
panelBattery.ResumeLayout(false);
|
||||
panelBattery.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBattery).EndInit();
|
||||
panelFooter.ResumeLayout(false);
|
||||
panelFooter.PerformLayout();
|
||||
|
||||
121
app/Settings.cs
121
app/Settings.cs
@@ -41,6 +41,36 @@ namespace GHelper
|
||||
InitializeComponent();
|
||||
InitTheme(true);
|
||||
|
||||
buttonSilent.Text = Properties.Strings.Silent;
|
||||
buttonBalanced.Text = Properties.Strings.Balanced;
|
||||
buttonTurbo.Text = Properties.Strings.Turbo;
|
||||
buttonFans.Text = Properties.Strings.FansPower;
|
||||
|
||||
buttonEco.Text = Properties.Strings.EcoMode;
|
||||
buttonUltimate.Text = Properties.Strings.UltimateMode;
|
||||
buttonStandard.Text = Properties.Strings.StandardMode;
|
||||
buttonOptimized.Text = Properties.Strings.Optimized;
|
||||
|
||||
|
||||
buttonScreenAuto.Text = Properties.Strings.AutoMode;
|
||||
buttonMiniled.Text = Properties.Strings.Multizone;
|
||||
|
||||
buttonKeyboardColor.Text = Properties.Strings.Color;
|
||||
buttonKeyboard.Text = Properties.Strings.Extra;
|
||||
|
||||
labelPerf.Text = Properties.Strings.PerformanceMode;
|
||||
labelGPU.Text = Properties.Strings.GPUMode;
|
||||
labelSreen.Text = Properties.Strings.LaptopScreen;
|
||||
labelKeyboard.Text = Properties.Strings.LaptopKeyboard;
|
||||
labelMatrix.Text = Properties.Strings.AnimeMatrix;
|
||||
labelBatteryTitle.Text = Properties.Strings.BatteryChargeLimit;
|
||||
|
||||
checkMatrix.Text = Properties.Strings.TurnOffOnBattery;
|
||||
checkStartup.Text = Properties.Strings.RunOnStartup;
|
||||
|
||||
buttonMatrix.Text = Properties.Strings.PictureGif;
|
||||
buttonQuit.Text = Properties.Strings.Quit;
|
||||
|
||||
FormClosing += SettingsForm_FormClosing;
|
||||
|
||||
buttonSilent.BorderColor = colorEco;
|
||||
@@ -58,7 +88,6 @@ namespace GHelper
|
||||
buttonScreenAuto.BorderColor = SystemColors.ActiveBorder;
|
||||
buttonMiniled.BorderColor = colorTurbo;
|
||||
|
||||
buttonOptimized.Click += ButtonOptimized_Click;
|
||||
buttonSilent.Click += ButtonSilent_Click;
|
||||
buttonBalanced.Click += ButtonBalanced_Click;
|
||||
buttonTurbo.Click += ButtonTurbo_Click;
|
||||
@@ -66,6 +95,7 @@ namespace GHelper
|
||||
buttonEco.Click += ButtonEco_Click;
|
||||
buttonStandard.Click += ButtonStandard_Click;
|
||||
buttonUltimate.Click += ButtonUltimate_Click;
|
||||
buttonOptimized.Click += ButtonOptimized_Click;
|
||||
|
||||
VisibleChanged += SettingsForm_VisibleChanged;
|
||||
|
||||
@@ -179,26 +209,6 @@ namespace GHelper
|
||||
}
|
||||
m.Result = (IntPtr)1;
|
||||
break;
|
||||
|
||||
case KeyHandler.WM_HOTKEY_MSG_ID:
|
||||
|
||||
Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF);
|
||||
|
||||
switch (key)
|
||||
{
|
||||
case Keys.VolumeDown:
|
||||
InputDispatcher.KeyProcess("m1");
|
||||
break;
|
||||
case Keys.VolumeUp:
|
||||
InputDispatcher.KeyProcess("m2");
|
||||
break;
|
||||
default:
|
||||
if (key == InputDispatcher.keyProfile) CyclePerformanceMode();
|
||||
if (key == InputDispatcher.keyApp) Program.SettingsToggle();
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
try
|
||||
@@ -308,7 +318,7 @@ namespace GHelper
|
||||
|
||||
if (Program.acpi.DeviceGet(AsusACPI.GPUXG) == 1)
|
||||
{
|
||||
KillGPUApps();
|
||||
HardwareControl.KillGPUApps();
|
||||
DialogResult dialogResult = MessageBox.Show("Did you close all applications running on XG Mobile?", "Disabling XG Mobile", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
@@ -922,29 +932,29 @@ namespace GHelper
|
||||
HardwareControl.ReadSensors();
|
||||
|
||||
if (HardwareControl.cpuTemp > 0)
|
||||
cpuTemp = ": " + Math.Round((decimal)HardwareControl.cpuTemp).ToString() + "°C ";
|
||||
cpuTemp = ": " + Math.Round((decimal)HardwareControl.cpuTemp).ToString() + "°C";
|
||||
|
||||
if (HardwareControl.batteryDischarge > 0)
|
||||
battery = Properties.Strings.Discharging + ": " + Math.Round((decimal)HardwareControl.batteryDischarge, 1).ToString() + "W";
|
||||
|
||||
if (HardwareControl.gpuTemp > 0)
|
||||
{
|
||||
gpuTemp = $": {HardwareControl.gpuTemp}°C ";
|
||||
gpuTemp = $": {HardwareControl.gpuTemp}°C";
|
||||
}
|
||||
|
||||
|
||||
Program.settingsForm.BeginInvoke(delegate
|
||||
{
|
||||
labelCPUFan.Text = "CPU" + cpuTemp + HardwareControl.cpuFan;
|
||||
labelGPUFan.Text = "GPU" + gpuTemp + HardwareControl.gpuFan;
|
||||
labelCPUFan.Text = "CPU" + cpuTemp + " " + HardwareControl.cpuFan;
|
||||
labelGPUFan.Text = "GPU" + gpuTemp + " " + HardwareControl.gpuFan;
|
||||
if (HardwareControl.midFan is not null)
|
||||
labelMidFan.Text = "Mid" + HardwareControl.midFan;
|
||||
|
||||
labelBattery.Text = battery;
|
||||
});
|
||||
|
||||
string trayTip = "CPU" + cpuTemp + HardwareControl.cpuFan;
|
||||
if (gpuTemp.Length > 0) trayTip += "\nGPU" + gpuTemp + HardwareControl.gpuFan;
|
||||
string trayTip = "CPU" + cpuTemp + " " + HardwareControl.cpuFan;
|
||||
if (gpuTemp.Length > 0) trayTip += "\nGPU" + gpuTemp + " " + HardwareControl.gpuFan;
|
||||
if (battery.Length > 0) trayTip += "\n" + battery;
|
||||
|
||||
Program.trayIcon.Text = trayTip;
|
||||
@@ -983,7 +993,7 @@ namespace GHelper
|
||||
|
||||
int limit_total = AppConfig.getConfigPerf("limit_total");
|
||||
int limit_cpu = AppConfig.getConfigPerf("limit_cpu");
|
||||
int limit_apu = AppConfig.getConfigPerf("limit_apu");
|
||||
int limit_fast = AppConfig.getConfigPerf("limit_fast");
|
||||
|
||||
if (limit_total > AsusACPI.MaxTotal) return;
|
||||
if (limit_total < AsusACPI.MinTotal) return;
|
||||
@@ -991,9 +1001,10 @@ namespace GHelper
|
||||
if (limit_cpu > AsusACPI.MaxCPU) return;
|
||||
if (limit_cpu < AsusACPI.MinCPU) return;
|
||||
|
||||
if (limit_apu > AsusACPI.MaxCPU) return;
|
||||
if (limit_apu < AsusACPI.MinCPU) return;
|
||||
if (limit_fast > AsusACPI.MaxTotal) return;
|
||||
if (limit_fast < AsusACPI.MinTotal) return;
|
||||
|
||||
// SPL + SPPT togeher in one slider
|
||||
if (Program.acpi.DeviceGet(AsusACPI.PPT_TotalA0) >= 0)
|
||||
{
|
||||
Program.acpi.DeviceSet(AsusACPI.PPT_TotalA0, limit_total, "PowerLimit A0");
|
||||
@@ -1001,17 +1012,18 @@ namespace GHelper
|
||||
customPower = limit_total;
|
||||
}
|
||||
|
||||
if (Program.acpi.DeviceGet(AsusACPI.PPT_CPUB0) >= 0)
|
||||
if (Program.acpi.IsAllAmdPPT()) // CPU limit all amd models
|
||||
{
|
||||
Program.acpi.DeviceSet(AsusACPI.PPT_CPUB0, limit_cpu, "PowerLimit B0");
|
||||
customPower = limit_cpu;
|
||||
}
|
||||
|
||||
if (Program.acpi.DeviceGet(AsusACPI.PPT_APUC1) >= 0)
|
||||
else if (Program.acpi.DeviceGet(AsusACPI.PPT_APUC1) >= 0) // FPPT boost for non all-amd models
|
||||
{
|
||||
Program.acpi.DeviceSet(AsusACPI.PPT_APUC1, limit_apu, "PowerLimit C1");
|
||||
Program.acpi.DeviceSet(AsusACPI.PPT_APUC1, limit_fast, "PowerLimit C1");
|
||||
customPower = limit_fast;
|
||||
}
|
||||
|
||||
|
||||
Program.settingsForm.BeginInvoke(SetPerformanceLabel);
|
||||
|
||||
}
|
||||
@@ -1270,10 +1282,14 @@ namespace GHelper
|
||||
|
||||
int backlight = AppConfig.getConfig("keyboard_brightness");
|
||||
|
||||
if (AppConfig.isConfig("keyboard_auto") && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online)
|
||||
AsusUSB.ApplyBrightness(0);
|
||||
else if (backlight >= 0)
|
||||
AsusUSB.ApplyBrightness(backlight);
|
||||
if (backlight > 0)
|
||||
{
|
||||
if (AppConfig.isConfig("keyboard_auto") && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online)
|
||||
AsusUSB.ApplyBrightness(1);
|
||||
else
|
||||
AsusUSB.ApplyBrightness(backlight);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1503,19 +1519,6 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
protected static void KillGPUApps()
|
||||
{
|
||||
string[] tokill = { "EADesktop", "RadeonSoftware", "epicgameslauncher" };
|
||||
|
||||
foreach (string kill in tokill)
|
||||
foreach (var process in Process.GetProcessesByName(kill)) process.Kill();
|
||||
|
||||
if (AppConfig.isConfig("kill_gpu_apps") && HardwareControl.GpuControl is not null && HardwareControl.GpuControl.IsNvidia)
|
||||
{
|
||||
NvidiaGpuControl nvControl = (NvidiaGpuControl)HardwareControl.GpuControl;
|
||||
nvControl.KillGPUApps();
|
||||
}
|
||||
}
|
||||
|
||||
public void SetGPUEco(int eco, bool hardWay = false)
|
||||
{
|
||||
@@ -1531,19 +1534,17 @@ namespace GHelper
|
||||
Task.Run(async () =>
|
||||
{
|
||||
|
||||
int status;
|
||||
int status = 1;
|
||||
|
||||
if (eco == 1) KillGPUApps();
|
||||
if (eco == 1) HardwareControl.KillGPUApps();
|
||||
|
||||
Logger.WriteLine($"Running eco command {eco}");
|
||||
|
||||
//if (eco == 1) status = 0; else
|
||||
status = Program.acpi.SetGPUEco(eco);
|
||||
|
||||
if (status == 0 && eco == 1 && hardWay)
|
||||
{
|
||||
RestartGPU();
|
||||
}
|
||||
if (status == 0 && eco == 1 && hardWay) RestartGPU();
|
||||
|
||||
await Task.Delay(TimeSpan.FromMilliseconds(500));
|
||||
await Task.Delay(TimeSpan.FromMilliseconds(100));
|
||||
Program.settingsForm.BeginInvoke(delegate
|
||||
{
|
||||
InitGPUMode();
|
||||
|
||||
@@ -1,4 +1,64 @@
|
||||
<root>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
# G-Helper (GHelper)
|
||||
|
||||
[](https://GitHub.com/seerge/g-helper/releases/) [](https://GitHub.com/seerge/g-helper/releases/) [](https://GitHub.com/seerge/g-helper/stargazers/)
|
||||
|
||||
Language: English | [中文](https://github.com/seerge/g-helper/blob/main/docs/README.zh-CN.md)
|
||||
@@ -8,7 +7,6 @@ Language: English | [中文](https://github.com/seerge/g-helper/blob/main/docs/R
|
||||
|
||||
Lightweight Armoury Crate alternative for Asus lapopts. A small utility that allows you to do almost everything you could do with Armoury Crate but without extra bloat and unnecessary services. Works on all popular models, such as ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar, ProArt and many more! Feel free to try :)
|
||||
|
||||
|
||||
## :gift: Main advantages
|
||||
|
||||
1. Seamless and automatic GPU switching (without asking you to close all apps, etc)
|
||||
@@ -40,6 +38,8 @@ _If you post about the app - please include a link. Thanks._
|
||||
10. NVidia GPU overclocking
|
||||
11. XG Mobile Control
|
||||
|
||||

|
||||
|
||||
### :gear: Automatic switching when on battery or plugged in
|
||||
- Performance modes (app remembers last mode used on battery or when plugged)
|
||||
- Optimized GPU mode - disables dGPU on battery and enables when plugged
|
||||
@@ -48,8 +48,6 @@ _If you post about the app - please include a link. Thanks._
|
||||
|
||||
To keep auto switching and hotkeys working the app needs to stay running in the tray. It doesn't consume any resources.
|
||||
|
||||

|
||||
|
||||
### :rocket: Performance Modes
|
||||
|
||||
Modes are **same** as in Armoury Crate as they are stored in bios including default fan curves
|
||||
@@ -67,7 +65,7 @@ _PPTs are shown for G14 2022, for other models PPTs will be different as they ar
|
||||
3. Ultimate mode: iGPU and dGPU enabled, but dGPU drives built in display (supported only on G14 2022 model)
|
||||
4. Optimized: disables dGPU on battery (Eco) and enables when plugged (Standard)
|
||||
|
||||

|
||||

|
||||
|
||||
## :question: FAQ
|
||||
|
||||
@@ -156,7 +154,6 @@ It's a lightweight Armoury Crate alternative for Asus laptops. A small utility t
|
||||
- It is recommended to run app with windows default "balanced" power plan
|
||||

|
||||
|
||||
|
||||
-------------------------------
|
||||
|
||||
Designed and developed for Asus Zephyrus G14 2022 (with AMD Radeon iGPU and dGPU). But could and should potentially work for G14 of 2021 and 2020, G15, X FLOW, and other ROG models for relevant and supported features.
|
||||
|
||||
Reference in New Issue
Block a user