Compare commits

...

17 Commits
v0.70 ... v0.72

Author SHA1 Message Date
Serge
20e7d220e5 Added APU slider 2023-05-29 22:07:08 +02:00
Serge
2f5543ce84 Merge branch 'main' of https://github.com/seerge/g-helper 2023-05-29 19:39:00 +02:00
Serge
4c55e16f2e UI tweaks 2023-05-29 19:38:57 +02:00
Serge
30544e74d7 Update README.md 2023-05-29 19:18:25 +02:00
Serge
f5925accb3 Merge pull request #475 from MDowski/patch-2
Update to Polish translation
2023-05-29 15:31:29 +02:00
MD
842ea2a92d Update to Polish translation
Tweaks in declination and words shortening.
2023-05-29 14:58:37 +02:00
Serge
1ca97bd3f4 Updated translations 2023-05-29 14:36:55 +02:00
Serge
8a1dd9f137 Bumped version number 2023-05-29 13:15:54 +02:00
Serge
325f16cf55 Added optimization service to debloat.bat 2023-05-29 13:15:23 +02:00
Serge
42cc1bdb98 Added option to stop all GPU apps before setting Eco 2023-05-29 12:16:19 +02:00
Serge
83a2d1dc9f Merge branch 'main' of https://github.com/seerge/g-helper 2023-05-28 21:43:26 +02:00
Serge
3aae223b15 Added Ctr+Shif+F12 binding to toggle app window 2023-05-28 21:43:24 +02:00
Serge
b22d2f8ceb Update README.md 2023-05-28 21:26:05 +02:00
Serge
2041861a14 Merge branch 'main' of https://github.com/seerge/g-helper 2023-05-28 16:09:46 +02:00
Serge
dfc3c0e515 UI tweaks 2023-05-28 16:09:44 +02:00
Serge
796ec34284 Update README.md 2023-05-28 14:06:12 +02:00
Serge
50894a59d3 USB adjustment 2023-05-28 12:15:43 +02:00
19 changed files with 889 additions and 194 deletions

View File

@@ -1,5 +1,4 @@
using System.Diagnostics;
using System.Management;
using System.Management;
using System.Runtime.InteropServices;
public enum AsusFan

View File

@@ -1,5 +1,4 @@
using HidLibrary;
using Microsoft.Win32;
using System.Text;
namespace GHelper
@@ -175,13 +174,13 @@ namespace GHelper
}
private static IEnumerable<HidDevice> GetHidDevices(int[] deviceIds, int minInput = 18)
private static IEnumerable<HidDevice> GetHidDevices(int[] deviceIds, int minInput = 18, int minFeatures = 1)
{
HidDevice[] HidDeviceList = HidDevices.Enumerate(ASUS_ID, deviceIds).ToArray();
foreach (HidDevice device in HidDeviceList)
if (device.IsConnected
&& device.Capabilities.FeatureReportByteLength > 0
&& device.Capabilities.InputReportByteLength >= minInput)
&& device.Capabilities.FeatureReportByteLength >= minFeatures
&& device.Capabilities.InputReportByteLength >= minInput)
yield return device;
}
@@ -248,33 +247,41 @@ namespace GHelper
public static void ApplyBrightness(int brightness)
{
if (AppConfig.ContainsModel("TUF"))
Program.acpi.TUFKeyboardBrightness(brightness);
byte[] msg = { AURA_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness };
var devices = GetHidDevices(deviceIds);
foreach (HidDevice device in devices)
Task.Run(async () =>
{
device.OpenDevice();
device.WriteFeatureData(msg);
Logger.WriteLine("KB Backlight:" + BitConverter.ToString(msg));
device.CloseDevice();
}
// Backup payload for old models
if (AppConfig.ContainsModel("503"))
{
byte[] msgBackup = { INPUT_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness };
byte[] msg = { AURA_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness };
var devicesBackup = GetHidDevices(deviceIds, 0);
foreach (HidDevice device in devicesBackup)
var devices = GetHidDevices(deviceIds);
foreach (HidDevice device in devices)
{
device.OpenDevice();
device.WriteFeatureData(msgBackup);
device.WriteFeatureData(msg);
Logger.WriteLine("KB Backlight:" + BitConverter.ToString(msg));
device.CloseDevice();
}
}
// Backup payload for old models
if (AppConfig.ContainsModel("503"))
{
byte[] msgBackup = { INPUT_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness };
var devicesBackup = GetHidDevices(deviceIds, 0);
foreach (HidDevice device in devicesBackup)
{
device.OpenDevice();
device.WriteFeatureData(msgBackup);
device.CloseDevice();
}
}
});
}
@@ -305,49 +312,6 @@ namespace GHelper
}
public static int SetXGM(byte[] msg)
{
//Logger.WriteLine("XGM Payload :" + BitConverter.ToString(msg));
var payload = new byte[300];
Array.Copy(msg, payload, msg.Length);
foreach (HidDevice device in GetHidDevices(new int[] { 0x1970 }, 0))
{
device.OpenDevice();
Logger.WriteLine("XGM " + device.Attributes.ProductHexId + "|" + device.Capabilities.FeatureReportByteLength + ":" + BitConverter.ToString(msg));
device.WriteFeatureData(payload);
device.CloseDevice();
//return 1;
}
return 0;
}
public static void ApplyXGMLight(bool status)
{
SetXGM(new byte[] { 0x5e, 0xc5, status ? (byte)0x50 : (byte)0 });
}
public static int ResetXGM()
{
return SetXGM(new byte[] { 0x5e, 0xd1, 0x02 });
}
public static int SetXGMFan(byte[] curve)
{
if (AsusACPI.IsInvalidCurve(curve)) return -1;
byte[] msg = new byte[19];
Array.Copy(new byte[] { 0x5e, 0xd1, 0x01 }, msg, 3);
Array.Copy(curve, 0, msg, 3, curve.Length);
return SetXGM(msg);
}
public static void ApplyAura()
{
@@ -393,6 +357,51 @@ namespace GHelper
}
// Reference : thanks to https://github.com/RomanYazvinsky/ for initial discovery of XGM payloads
public static int SetXGM(byte[] msg)
{
//Logger.WriteLine("XGM Payload :" + BitConverter.ToString(msg));
var payload = new byte[300];
Array.Copy(msg, payload, msg.Length);
foreach (HidDevice device in GetHidDevices(new int[] { 0x1970 }, 0, 300))
{
device.OpenDevice();
Logger.WriteLine("XGM " + device.Attributes.ProductHexId + "|" + device.Capabilities.FeatureReportByteLength + ":" + BitConverter.ToString(msg));
device.WriteFeatureData(payload);
device.CloseDevice();
//return 1;
}
return 0;
}
public static void ApplyXGMLight(bool status)
{
SetXGM(new byte[] { 0x5e, 0xc5, status ? (byte)0x50 : (byte)0 });
}
public static int ResetXGM()
{
return SetXGM(new byte[] { 0x5e, 0xd1, 0x02 });
}
public static int SetXGMFan(byte[] curve)
{
if (AsusACPI.IsInvalidCurve(curve)) return -1;
byte[] msg = new byte[19];
Array.Copy(new byte[] { 0x5e, 0xd1, 0x01 }, msg, 3);
Array.Copy(curve, 0, msg, 3, curve.Length);
return SetXGM(msg);
}
}
}

59
app/Extra.Designer.cs generated
View File

@@ -51,6 +51,8 @@ namespace GHelper
pictureHelp = new PictureBox();
groupLight = new GroupBox();
panelBacklightExtra = new Panel();
numericBacklightPluggedTime = new NumericUpDown();
labelBacklightTimeoutPlugged = new Label();
numericBacklightTime = new NumericUpDown();
labelBacklightTimeout = new Label();
labelBrightness = new Label();
@@ -81,24 +83,23 @@ namespace GHelper
checkSleepLid = new CheckBox();
checkShutdownLid = new CheckBox();
groupOther = new GroupBox();
checkGpuApps = new CheckBox();
checkAutoApplyWindowsPowerMode = new CheckBox();
checkKeyboardAuto = new CheckBox();
checkUSBC = new CheckBox();
checkNoOverdrive = new CheckBox();
checkTopmost = new CheckBox();
numericBacklightPluggedTime = new NumericUpDown();
labelBacklightTimeoutPlugged = new Label();
groupBindings.SuspendLayout();
tableKeys.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureHelp).BeginInit();
groupLight.SuspendLayout();
panelBacklightExtra.SuspendLayout();
((System.ComponentModel.ISupportInitialize)numericBacklightPluggedTime).BeginInit();
((System.ComponentModel.ISupportInitialize)numericBacklightTime).BeginInit();
((System.ComponentModel.ISupportInitialize)trackBrightness).BeginInit();
panelXMG.SuspendLayout();
tableBacklight.SuspendLayout();
groupOther.SuspendLayout();
((System.ComponentModel.ISupportInitialize)numericBacklightPluggedTime).BeginInit();
SuspendLayout();
//
// groupBindings
@@ -326,6 +327,22 @@ namespace GHelper
panelBacklightExtra.Size = new Size(948, 241);
panelBacklightExtra.TabIndex = 43;
//
// numericBacklightPluggedTime
//
numericBacklightPluggedTime.Location = new Point(655, 181);
numericBacklightPluggedTime.Maximum = new decimal(new int[] { 3600, 0, 0, 0 });
numericBacklightPluggedTime.Name = "numericBacklightPluggedTime";
numericBacklightPluggedTime.Size = new Size(240, 39);
numericBacklightPluggedTime.TabIndex = 49;
//
// labelBacklightTimeoutPlugged
//
labelBacklightTimeoutPlugged.Location = new Point(13, 183);
labelBacklightTimeoutPlugged.Name = "labelBacklightTimeoutPlugged";
labelBacklightTimeoutPlugged.Size = new Size(636, 45);
labelBacklightTimeoutPlugged.TabIndex = 48;
labelBacklightTimeoutPlugged.Text = "Seconds to turn off backlight when plugged";
//
// numericBacklightTime
//
numericBacklightTime.Location = new Point(655, 133);
@@ -667,6 +684,7 @@ namespace GHelper
//
// groupOther
//
groupOther.Controls.Add(checkGpuApps);
groupOther.Controls.Add(checkAutoApplyWindowsPowerMode);
groupOther.Controls.Add(checkKeyboardAuto);
groupOther.Controls.Add(checkUSBC);
@@ -675,15 +693,25 @@ namespace GHelper
groupOther.Dock = DockStyle.Top;
groupOther.Location = new Point(10, 897);
groupOther.Name = "groupOther";
groupOther.Size = new Size(954, 276);
groupOther.Size = new Size(954, 310);
groupOther.TabIndex = 2;
groupOther.TabStop = false;
groupOther.Text = "Other";
//
// checkGpuApps
//
checkGpuApps.AutoSize = true;
checkGpuApps.Location = new Point(25, 220);
checkGpuApps.Name = "checkGpuApps";
checkGpuApps.Size = new Size(544, 36);
checkGpuApps.TabIndex = 48;
checkGpuApps.Text = "Stop all apps using GPU when switching to Eco";
checkGpuApps.UseVisualStyleBackColor = true;
//
// checkAutoApplyWindowsPowerMode
//
checkAutoApplyWindowsPowerMode.AutoSize = true;
checkAutoApplyWindowsPowerMode.Location = new Point(25, 220);
checkAutoApplyWindowsPowerMode.Location = new Point(25, 268);
checkAutoApplyWindowsPowerMode.Name = "checkAutoApplyWindowsPowerMode";
checkAutoApplyWindowsPowerMode.Size = new Size(416, 36);
checkAutoApplyWindowsPowerMode.TabIndex = 47;
@@ -731,29 +759,13 @@ namespace GHelper
checkTopmost.Text = Strings.WindowTop;
checkTopmost.UseVisualStyleBackColor = true;
//
// numericBacklightPluggedTime
//
numericBacklightPluggedTime.Location = new Point(655, 181);
numericBacklightPluggedTime.Maximum = new decimal(new int[] { 3600, 0, 0, 0 });
numericBacklightPluggedTime.Name = "numericBacklightPluggedTime";
numericBacklightPluggedTime.Size = new Size(240, 39);
numericBacklightPluggedTime.TabIndex = 49;
//
// labelBacklightTimeoutPlugged
//
labelBacklightTimeoutPlugged.Location = new Point(13, 183);
labelBacklightTimeoutPlugged.Name = "labelBacklightTimeoutPlugged";
labelBacklightTimeoutPlugged.Size = new Size(636, 45);
labelBacklightTimeoutPlugged.TabIndex = 48;
labelBacklightTimeoutPlugged.Text = "Seconds to turn off backlight when plugged";
//
// Extra
//
AutoScaleDimensions = new SizeF(13F, 32F);
AutoScaleMode = AutoScaleMode.Font;
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
ClientSize = new Size(974, 1131);
ClientSize = new Size(974, 1220);
Controls.Add(groupOther);
Controls.Add(groupLight);
Controls.Add(groupBindings);
@@ -775,6 +787,7 @@ namespace GHelper
groupLight.PerformLayout();
panelBacklightExtra.ResumeLayout(false);
panelBacklightExtra.PerformLayout();
((System.ComponentModel.ISupportInitialize)numericBacklightPluggedTime).EndInit();
((System.ComponentModel.ISupportInitialize)numericBacklightTime).EndInit();
((System.ComponentModel.ISupportInitialize)trackBrightness).EndInit();
panelXMG.ResumeLayout(false);
@@ -782,7 +795,6 @@ namespace GHelper
tableBacklight.ResumeLayout(false);
groupOther.ResumeLayout(false);
groupOther.PerformLayout();
((System.ComponentModel.ISupportInitialize)numericBacklightPluggedTime).EndInit();
ResumeLayout(false);
PerformLayout();
}
@@ -846,5 +858,6 @@ namespace GHelper
private TextBox textM1;
private NumericUpDown numericBacklightPluggedTime;
private Label labelBacklightTimeoutPlugged;
private CheckBox checkGpuApps;
}
}

View File

@@ -99,6 +99,8 @@ namespace GHelper
labelBacklightLid.Text = Properties.Strings.Lid;
labelBacklightLogo.Text = Properties.Strings.Logo;
checkGpuApps.Text = Properties.Strings.KillGpuApps;
Text = Properties.Strings.ExtraSettings;
InitTheme();
@@ -217,6 +219,14 @@ namespace GHelper
numericBacklightTime.ValueChanged += NumericBacklightTime_ValueChanged;
numericBacklightPluggedTime.ValueChanged += NumericBacklightTime_ValueChanged;
checkGpuApps.Checked = AppConfig.isConfig("kill_gpu_apps");
checkGpuApps.CheckedChanged += CheckGpuApps_CheckedChanged;
}
private void CheckGpuApps_CheckedChanged(object? sender, EventArgs e)
{
AppConfig.setConfig("kill_gpu_apps", (checkGpuApps.Checked ? 1 : 0));
}
private void NumericBacklightTime_ValueChanged(object? sender, EventArgs e)

188
app/Fans.Designer.cs generated
View File

@@ -31,14 +31,14 @@ namespace GHelper
/// </summary>
private void InitializeComponent()
{
ChartArea chartArea9 = new ChartArea();
Title title9 = new Title();
ChartArea chartArea10 = new ChartArea();
Title title10 = new Title();
ChartArea chartArea11 = new ChartArea();
Title title11 = new Title();
ChartArea chartArea12 = new ChartArea();
Title title12 = new Title();
ChartArea chartArea5 = new ChartArea();
Title title5 = new Title();
ChartArea chartArea6 = new ChartArea();
Title title6 = new Title();
ChartArea chartArea7 = new ChartArea();
Title title7 = new Title();
ChartArea chartArea8 = new ChartArea();
Title title8 = new Title();
panelFans = new Panel();
labelTip = new Label();
tableFanCharts = new TableLayoutPanel();
@@ -60,13 +60,17 @@ 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();
label2 = new Label();
labelLeftCPU = new Label();
trackCPU = new TrackBar();
panelTotal = new Panel();
labelTotal = new Label();
labelPlatform = new Label();
labelLeftPlatform = new Label();
trackTotal = new TrackBar();
panelTitleCPU = new Panel();
pictureBox1 = new PictureBox();
@@ -103,6 +107,8 @@ namespace GHelper
panelSliders.SuspendLayout();
panelPower.SuspendLayout();
panelApplyPower.SuspendLayout();
panelAPU.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackAPU).BeginInit();
panelCPU.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackCPU).BeginInit();
panelTotal.SuspendLayout();
@@ -137,7 +143,7 @@ namespace GHelper
panelFans.MinimumSize = new Size(815, 0);
panelFans.Name = "panelFans";
panelFans.Padding = new Padding(0, 0, 10, 0);
panelFans.Size = new Size(815, 1189);
panelFans.Size = new Size(815, 1310);
panelFans.TabIndex = 12;
//
// labelTip
@@ -170,65 +176,65 @@ namespace GHelper
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 25F));
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 25F));
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 25F));
tableFanCharts.Size = new Size(805, 1007);
tableFanCharts.Size = new Size(805, 1128);
tableFanCharts.TabIndex = 36;
//
// chartGPU
//
chartArea9.Name = "ChartArea1";
chartGPU.ChartAreas.Add(chartArea9);
chartArea5.Name = "ChartArea1";
chartGPU.ChartAreas.Add(chartArea5);
chartGPU.Dock = DockStyle.Fill;
chartGPU.Location = new Point(12, 259);
chartGPU.Location = new Point(12, 289);
chartGPU.Margin = new Padding(2, 10, 2, 10);
chartGPU.Name = "chartGPU";
chartGPU.Size = new Size(781, 229);
chartGPU.Size = new Size(781, 259);
chartGPU.TabIndex = 17;
chartGPU.Text = "chartGPU";
title9.Name = "Title1";
chartGPU.Titles.Add(title9);
title5.Name = "Title1";
chartGPU.Titles.Add(title5);
//
// chartCPU
//
chartArea10.Name = "ChartArea1";
chartCPU.ChartAreas.Add(chartArea10);
chartArea6.Name = "ChartArea1";
chartCPU.ChartAreas.Add(chartArea6);
chartCPU.Dock = DockStyle.Fill;
chartCPU.Location = new Point(12, 10);
chartCPU.Margin = new Padding(2, 10, 2, 10);
chartCPU.Name = "chartCPU";
chartCPU.Size = new Size(781, 229);
chartCPU.Size = new Size(781, 259);
chartCPU.TabIndex = 14;
chartCPU.Text = "chartCPU";
title10.Name = "Title1";
chartCPU.Titles.Add(title10);
title6.Name = "Title1";
chartCPU.Titles.Add(title6);
//
// chartXGM
//
chartArea11.Name = "ChartAreaXGM";
chartXGM.ChartAreas.Add(chartArea11);
chartArea7.Name = "ChartAreaXGM";
chartXGM.ChartAreas.Add(chartArea7);
chartXGM.Dock = DockStyle.Fill;
chartXGM.Location = new Point(12, 757);
chartXGM.Location = new Point(12, 847);
chartXGM.Margin = new Padding(2, 10, 2, 10);
chartXGM.Name = "chartXGM";
chartXGM.Size = new Size(781, 230);
chartXGM.Size = new Size(781, 261);
chartXGM.TabIndex = 14;
chartXGM.Text = "chartXGM";
title11.Name = "Title4";
chartXGM.Titles.Add(title11);
title7.Name = "Title4";
chartXGM.Titles.Add(title7);
chartXGM.Visible = false;
//
// chartMid
//
chartArea12.Name = "ChartArea3";
chartMid.ChartAreas.Add(chartArea12);
chartArea8.Name = "ChartArea3";
chartMid.ChartAreas.Add(chartArea8);
chartMid.Dock = DockStyle.Fill;
chartMid.Location = new Point(12, 508);
chartMid.Location = new Point(12, 568);
chartMid.Margin = new Padding(2, 10, 2, 10);
chartMid.Name = "chartMid";
chartMid.Size = new Size(781, 229);
chartMid.Size = new Size(781, 259);
chartMid.TabIndex = 14;
chartMid.Text = "chartMid";
title12.Name = "Title3";
chartMid.Titles.Add(title12);
title8.Name = "Title3";
chartMid.Titles.Add(title8);
chartMid.Visible = false;
//
// panelTitleFans
@@ -295,7 +301,7 @@ namespace GHelper
panelApplyFans.Controls.Add(checkApplyFans);
panelApplyFans.Controls.Add(buttonReset);
panelApplyFans.Dock = DockStyle.Bottom;
panelApplyFans.Location = new Point(0, 1073);
panelApplyFans.Location = new Point(0, 1194);
panelApplyFans.Name = "panelApplyFans";
panelApplyFans.Size = new Size(805, 116);
panelApplyFans.TabIndex = 43;
@@ -337,7 +343,7 @@ namespace GHelper
buttonReset.Margin = new Padding(4, 2, 4, 2);
buttonReset.Name = "buttonReset";
buttonReset.Secondary = true;
buttonReset.Size = new Size(232, 54);
buttonReset.Size = new Size(274, 54);
buttonReset.TabIndex = 18;
buttonReset.Text = Properties.Strings.FactoryDefaults;
buttonReset.UseVisualStyleBackColor = false;
@@ -351,7 +357,7 @@ namespace GHelper
panelSliders.Margin = new Padding(0);
panelSliders.Name = "panelSliders";
panelSliders.Padding = new Padding(10, 0, 0, 0);
panelSliders.Size = new Size(533, 1189);
panelSliders.Size = new Size(533, 1310);
panelSliders.TabIndex = 13;
//
// panelPower
@@ -360,20 +366,21 @@ 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(panelTitleCPU);
panelPower.Dock = DockStyle.Fill;
panelPower.Location = new Point(10, 652);
panelPower.Name = "panelPower";
panelPower.Size = new Size(523, 537);
panelPower.Size = new Size(523, 658);
panelPower.TabIndex = 43;
//
// panelApplyPower
//
panelApplyPower.Controls.Add(checkApplyPower);
panelApplyPower.Dock = DockStyle.Bottom;
panelApplyPower.Location = new Point(0, 447);
panelApplyPower.Location = new Point(0, 568);
panelApplyPower.Name = "panelApplyPower";
panelApplyPower.Padding = new Padding(10);
panelApplyPower.Size = new Size(523, 90);
@@ -396,7 +403,7 @@ namespace GHelper
// labelInfo
//
labelInfo.Dock = DockStyle.Top;
labelInfo.Location = new Point(0, 342);
labelInfo.Location = new Point(0, 482);
labelInfo.Margin = new Padding(4, 0, 4, 0);
labelInfo.Name = "labelInfo";
labelInfo.Padding = new Padding(5);
@@ -404,12 +411,62 @@ namespace GHelper
labelInfo.TabIndex = 43;
labelInfo.Text = "Experimental Feature";
//
// panelAPU
//
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;
//
// labelAPU
//
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;
//
// labelLeftAPU
//
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";
//
// trackAPU
//
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;
//
// panelCPU
//
panelCPU.AutoSize = true;
panelCPU.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelCPU.Controls.Add(labelCPU);
panelCPU.Controls.Add(label2);
panelCPU.Controls.Add(labelLeftCPU);
panelCPU.Controls.Add(trackCPU);
panelCPU.Dock = DockStyle.Top;
panelCPU.Location = new Point(0, 206);
@@ -430,15 +487,15 @@ namespace GHelper
labelCPU.Text = "CPU";
labelCPU.TextAlign = ContentAlignment.TopRight;
//
// label2
// labelLeftCPU
//
label2.AutoSize = true;
label2.Location = new Point(10, 8);
label2.Margin = new Padding(4, 0, 4, 0);
label2.Name = "label2";
label2.Size = new Size(58, 32);
label2.TabIndex = 12;
label2.Text = "CPU";
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";
//
// trackCPU
//
@@ -459,7 +516,7 @@ namespace GHelper
panelTotal.AutoSize = true;
panelTotal.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelTotal.Controls.Add(labelTotal);
panelTotal.Controls.Add(labelPlatform);
panelTotal.Controls.Add(labelLeftPlatform);
panelTotal.Controls.Add(trackTotal);
panelTotal.Dock = DockStyle.Top;
panelTotal.Location = new Point(0, 66);
@@ -480,15 +537,15 @@ namespace GHelper
labelTotal.Text = "Platform";
labelTotal.TextAlign = ContentAlignment.TopRight;
//
// labelPlatform
// labelLeftPlatform
//
labelPlatform.AutoSize = true;
labelPlatform.Location = new Point(10, 10);
labelPlatform.Margin = new Padding(4, 0, 4, 0);
labelPlatform.Name = "labelPlatform";
labelPlatform.Size = new Size(104, 32);
labelPlatform.TabIndex = 11;
labelPlatform.Text = "Platform";
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";
//
// trackTotal
//
@@ -785,7 +842,7 @@ namespace GHelper
AutoScaleMode = AutoScaleMode.Dpi;
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
ClientSize = new Size(1340, 1189);
ClientSize = new Size(1340, 1310);
Controls.Add(panelFans);
Controls.Add(panelSliders);
Margin = new Padding(4, 2, 4, 2);
@@ -816,6 +873,9 @@ 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();
@@ -859,11 +919,11 @@ namespace GHelper
private Label labelInfo;
private Panel panelCPU;
private Label labelCPU;
private Label label2;
private Label labelLeftCPU;
private TrackBar trackCPU;
private Panel panelTotal;
private Label labelTotal;
private Label labelPlatform;
private Label labelLeftPlatform;
private TrackBar trackTotal;
private Panel panelTitleCPU;
private PictureBox pictureBox1;
@@ -899,5 +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;
}
}

View File

@@ -83,9 +83,14 @@ namespace GHelper
trackCPU.Maximum = AsusACPI.MaxCPU;
trackCPU.Minimum = AsusACPI.MinCPU;
trackAPU.Maximum = AsusACPI.MaxCPU;
trackAPU.Minimum = AsusACPI.MinCPU;
trackAPU.Scroll += TrackPower_Scroll;
trackCPU.Scroll += TrackPower_Scroll;
trackTotal.Scroll += TrackPower_Scroll;
trackAPU.MouseUp += TrackPower_MouseUp;
trackCPU.MouseUp += TrackPower_MouseUp;
trackTotal.MouseUp += TrackPower_MouseUp;
@@ -303,7 +308,7 @@ namespace GHelper
}
else
{
MinimumSize = new Size(0, Program.settingsForm.Height);
Size = MinimumSize = new Size(0, Program.settingsForm.Height);
Height = Program.settingsForm.Height;
Top = Program.settingsForm.Top;
}
@@ -397,31 +402,37 @@ namespace GHelper
public void InitPower(bool changed = false)
{
bool cpuBmode = (Program.acpi.DeviceGet(AsusACPI.PPT_CPUB0) >= 0); // 2022 model +
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);
powerVisible = panelPower.Visible = cpuAmode;
panelCPU.Visible = cpuBmode;
panelAPU.Visible = apuMode;
// Yes, that's stupid, but Total slider on 2021 model actually adjusts CPU PPT
if (!cpuBmode)
{
labelPlatform.Text = "CPU PPT";
labelLeftPlatform.Text = "CPU";
}
int limit_total;
int limit_cpu;
int limit_apu;
bool apply = AppConfig.getConfigPerf("auto_apply_power") == 1;
if (changed)
{
limit_total = trackTotal.Value;
limit_cpu = trackCPU.Value;
limit_apu = trackAPU.Value;
}
else
{
limit_total = AppConfig.getConfigPerf("limit_total");
limit_cpu = AppConfig.getConfigPerf("limit_cpu");
limit_apu = AppConfig.getConfigPerf("limit_apu");
}
if (limit_total < 0) limit_total = AsusACPI.DefaultTotal;
@@ -433,15 +444,25 @@ 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;
trackTotal.Value = limit_total;
trackCPU.Value = limit_cpu;
trackAPU.Value = limit_apu;
checkApplyPower.Checked = apply;
labelTotal.Text = trackTotal.Value.ToString() + "W";
labelCPU.Text = trackCPU.Value.ToString() + "W";
labelAPU.Text = trackAPU.Value.ToString() + "W";
AppConfig.setConfigPerf("limit_total", limit_total);
AppConfig.setConfigPerf("limit_cpu", limit_cpu);
AppConfig.setConfigPerf("limit_apu", limit_apu);
}
@@ -466,7 +487,6 @@ namespace GHelper
chartMid.Visible = true;
SetChart(chartMid, AsusFan.Mid);
LoadProfile(seriesMid, AsusFan.Mid);
MinimumSize = new Size(0, chartCount * 400 + 200);
}
else
{
@@ -481,13 +501,23 @@ namespace GHelper
chartXGM.Visible = true;
SetChart(chartXGM, AsusFan.XGM);
LoadProfile(seriesXGM, AsusFan.XGM);
MinimumSize = new Size(0, chartCount * 400 + 200);
}
else
{
AppConfig.setConfig("xgm_fan", 0);
}
try
{
if (chartCount > 2)
Size = MinimumSize = new Size(0, (int)(ControlHelper.GetDpiScale(this).Value * (chartCount * 200 + 100)));
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
SetChart(chartCPU, AsusFan.CPU);
SetChart(chartGPU, AsusFan.GPU);

View File

@@ -16,7 +16,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<AssemblyVersion>0.70</AssemblyVersion>
<AssemblyVersion>0.72</AssemblyVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -1,4 +1,5 @@
using NvAPIWrapper.GPU;
using NvAPIWrapper;
using NvAPIWrapper.GPU;
using NvAPIWrapper.Native;
using NvAPIWrapper.Native.Delegates;
using NvAPIWrapper.Native.GPU;
@@ -35,8 +36,7 @@ public class NvidiaGpuControl : IGpuControl
public int? GetCurrentTemperature()
{
if (!IsValid)
return null;
if (!IsValid) return null;
PhysicalGPU internalGpu = _internalGpu!;
IThermalSensor? gpuSensor =
@@ -50,6 +50,38 @@ public class NvidiaGpuControl : IGpuControl
{
}
public void KillGPUApps()
{
if (!IsValid) return;
PhysicalGPU internalGpu = _internalGpu!;
try
{
Process[] processes = internalGpu.GetActiveApplications();
foreach (Process process in processes)
{
try
{
process?.Kill();
Logger.WriteLine("Stopped: " + process.ProcessName);
}
catch (Exception ex)
{
Logger.WriteLine(ex.Message);
}
}
}
catch (Exception ex)
{
Logger.WriteLine(ex.Message);
}
//NVIDIA.RestartDisplayDriver();
}
public int GetClocks(out int core, out int memory)
{

View File

@@ -60,10 +60,11 @@ namespace GHelper
private static nint windowHandle;
public static Keys keyProfile = Keys.F5;
public static Keys keyApp = Keys.F12;
KeyboardListener listener;
KeyHandler m1, m2, togggle;
KeyHandler m1, m2, handlerProfile, handlerApp;
public InputDispatcher(nint handle)
{
@@ -76,11 +77,12 @@ namespace GHelper
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");
togggle = new KeyHandler(KeyHandler.SHIFT | KeyHandler.CTRL, keyProfile, windowHandle);
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);
@@ -115,7 +117,7 @@ namespace GHelper
AsusUSB.ApplyBrightness(AppConfig.getConfig("keyboard_brightness"));
}
Debug.WriteLine(iddle.TotalSeconds);
//Debug.WriteLine(iddle.TotalSeconds);
}
public void Init()
@@ -144,24 +146,16 @@ namespace GHelper
string actionM1 = AppConfig.getConfigString("m1");
string actionM2 = AppConfig.getConfigString("m2");
togggle.Unregiser();
handlerProfile.Unregiser();
m1.Unregiser();
m2.Unregiser();
if (keyProfile != Keys.None)
{
togggle.Register();
}
if (keyProfile != Keys.None) handlerProfile.Register();
if (keyApp != Keys.None) handlerApp.Register();
if (actionM1 is not null && actionM1.Length > 0)
{
m1.Register();
}
if (actionM1 is not null && actionM1.Length > 0) m1.Register();
if (actionM2 is not null && actionM2.Length > 0)
{
m2.Register();
}
if (actionM2 is not null && actionM2.Length > 0) m2.Register();
}

View File

@@ -627,6 +627,15 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Stop all apps using GPU when switching to Eco.
/// </summary>
internal static string KillGpuApps {
get {
return ResourceManager.GetString("KillGpuApps", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Laptop Backlight.
/// </summary>

View File

@@ -0,0 +1,471 @@
<?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">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ACPIError" xml:space="preserve">
<value>Nie można odnaleźć sterownika ASUS ACPI. Aplikacja nie może bez niego funkcjonować. Spróbuj zainstalować Asus System Control Interface</value>
</data>
<data name="AlertDGPU" xml:space="preserve">
<value>Wygląda na to, że GPU jest mocno obciążone. Wyłączyć?</value>
</data>
<data name="AlertDGPUTitle" xml:space="preserve">
<value>Tryb Eco</value>
</data>
<data name="AlertUltimateOff" xml:space="preserve">
<value>Wyłączenie trybu Ultimate wymaga ponownego uruchomienia</value>
</data>
<data name="AlertUltimateOn" xml:space="preserve">
<value>Tryb Ultimate wymaga ponownego uruchomienia</value>
</data>
<data name="AlertUltimateTitle" xml:space="preserve">
<value>Uruchomić ponownie teraz?</value>
</data>
<data name="AnimationSpeed" xml:space="preserve">
<value>Prędkość animacji</value>
</data>
<data name="AnimeMatrix" xml:space="preserve">
<value>Anime Matrix</value>
</data>
<data name="AppAlreadyRunning" xml:space="preserve">
<value>Aplikacja jest już uruchomiona</value>
</data>
<data name="AppAlreadyRunningText" xml:space="preserve">
<value>G-Helper jest już uruchomiony. Sprawdź obszar powiadomień na pasku zadań.</value>
</data>
<data name="ApplyFanCurve" xml:space="preserve">
<value>Zastosuj krzywe</value>
</data>
<data name="ApplyPowerLimits" xml:space="preserve">
<value>Zastosuj limity</value>
</data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Automatycznie dostosuj Plan Zasilania Windows</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Oddychanie</value>
</data>
<data name="AuraColorCycle" xml:space="preserve">
<value>Pętla kolorów</value>
</data>
<data name="AuraFast" xml:space="preserve">
<value>Szybka</value>
</data>
<data name="AuraNormal" xml:space="preserve">
<value>Normalna</value>
</data>
<data name="AuraRainbow" xml:space="preserve">
<value>Tęcza</value>
</data>
<data name="AuraSlow" xml:space="preserve">
<value>Powolna</value>
</data>
<data name="AuraStatic" xml:space="preserve">
<value>Statyczny</value>
</data>
<data name="AuraStrobe" xml:space="preserve">
<value>Stroboskop</value>
</data>
<data name="AutoMode" xml:space="preserve">
<value>Auto</value>
</data>
<data name="AutoRefreshTooltip" xml:space="preserve">
<value>Automatycznie ustaw odświeżanie 60 Hz w czasie pracy na baterii</value>
</data>
<data name="Awake" xml:space="preserve">
<value>Aktywność</value>
</data>
<data name="BacklightTimeout" xml:space="preserve">
<value>Wyłączenie podświetlenia na baterii</value>
</data>
<data name="BacklightTimeoutPlugged" xml:space="preserve">
<value>Wyłączenie podświetlenia po podłączeniu (0 - nigdy)</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>Balans</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Limit ładowania baterii</value>
</data>
<data name="Boot" xml:space="preserve">
<value>Podczas uruchamiania</value>
</data>
<data name="Brightness" xml:space="preserve">
<value>Jasność</value>
</data>
<data name="Color" xml:space="preserve">
<value>Kolor</value>
</data>
<data name="CPUBoost" xml:space="preserve">
<value>CPU Boost</value>
</data>
<data name="Custom" xml:space="preserve">
<value>Niestandardowy</value>
</data>
<data name="Default" xml:space="preserve">
<value>Domyślny</value>
</data>
<data name="DisableOverdrive" xml:space="preserve">
<value>Wyłącz funkcję Overdrive monitora</value>
</data>
<data name="Discharging" xml:space="preserve">
<value>Zużycie mocy</value>
</data>
<data name="DownloadUpdate" xml:space="preserve">
<value>Pobierz aktualizację</value>
</data>
<data name="EcoGPUTooltip" xml:space="preserve">
<value>Wyłącza dedykowane GPU aby oszczędzić baterię</value>
</data>
<data name="EcoMode" xml:space="preserve">
<value>Eco</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Ustawienia</value>
</data>
<data name="ExtraSettings" xml:space="preserve">
<value>Dodatkowe ustawienia</value>
</data>
<data name="FactoryDefaults" xml:space="preserve">
<value>Ustawienia fabryczne</value>
</data>
<data name="FanCurves" xml:space="preserve">
<value>Krzywe wentylatorów</value>
</data>
<data name="FanProfileCPU" xml:space="preserve">
<value>Krzywa wentylatora CPU</value>
</data>
<data name="FanProfileGPU" xml:space="preserve">
<value>Krzywa wentylatora GPU</value>
</data>
<data name="FanProfileMid" xml:space="preserve">
<value>Krzywa wentylatora centralnego</value>
</data>
<data name="FanProfiles" xml:space="preserve">
<value>Tryb krzywych</value>
</data>
<data name="FansAndPower" xml:space="preserve">
<value>Wentylatory i moc</value>
</data>
<data name="FanSpeed" xml:space="preserve">
<value>Obroty: </value>
</data>
<data name="FansPower" xml:space="preserve">
<value>Dostosuj</value>
</data>
<data name="GPUBoost" xml:space="preserve">
<value>Dynamic Boost</value>
</data>
<data name="GPUChanging" xml:space="preserve">
<value>Przełączanie</value>
</data>
<data name="GPUCoreClockOffset" xml:space="preserve">
<value>Przesunięcie zegara rdzenia</value>
</data>
<data name="GPUMemoryClockOffset" xml:space="preserve">
<value>Przesunięcie zegara pamięci</value>
</data>
<data name="GPUMode" xml:space="preserve">
<value>Tryb GPU</value>
</data>
<data name="GPUModeEco" xml:space="preserve">
<value>tylko iGPU</value>
</data>
<data name="GPUModeStandard" xml:space="preserve">
<value>iGPU + dGPU</value>
</data>
<data name="GPUModeUltimate" xml:space="preserve">
<value>tylko dGPU</value>
</data>
<data name="GPUSettings" xml:space="preserve">
<value>Ustawienia GPU</value>
</data>
<data name="GPUTempTarget" xml:space="preserve">
<value>Temperatura docelowa</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Ustawienia klawiszy skrótów</value>
</data>
<data name="Keyboard" xml:space="preserve">
<value>Klawiatura</value>
</data>
<data name="KeyboardAuto" xml:space="preserve">
<value>Automatycznie zmniejsz jasność w czasie pracy na baterii</value>
</data>
<data name="LaptopBacklight" xml:space="preserve">
<value>Podświetlenie</value>
</data>
<data name="LaptopKeyboard" xml:space="preserve">
<value>Klawiatura laptopa</value>
</data>
<data name="LaptopScreen" xml:space="preserve">
<value>Ekran laptopa</value>
</data>
<data name="Lid" xml:space="preserve">
<value>Pokrywa</value>
</data>
<data name="Lightbar" xml:space="preserve">
<value>Lightbar</value>
</data>
<data name="Logo" xml:space="preserve">
<value>Logo</value>
</data>
<data name="MatrixAudio" xml:space="preserve">
<value>Wizualizer muzyki</value>
</data>
<data name="MatrixBanner" xml:space="preserve">
<value>Binarny</value>
</data>
<data name="MatrixBright" xml:space="preserve">
<value>Jasny</value>
</data>
<data name="MatrixClock" xml:space="preserve">
<value>Clock</value>
</data>
<data name="MatrixDim" xml:space="preserve">
<value>Ciemny</value>
</data>
<data name="MatrixLogo" xml:space="preserve">
<value>Logo ROG</value>
</data>
<data name="MatrixMedium" xml:space="preserve">
<value>Średni</value>
</data>
<data name="MatrixOff" xml:space="preserve">
<value>Wyłączony</value>
</data>
<data name="MatrixPicture" xml:space="preserve">
<value>Obraz</value>
</data>
<data name="MaxRefreshTooltip" xml:space="preserve">
<value>Maksymalna częstotliwość odświeżania dla mniejszych opóźnień</value>
</data>
<data name="MinRefreshTooltip" xml:space="preserve">
<value>Częstotliwość odświeżania 60 Hz dla oszczędzania baterii</value>
</data>
<data name="Multizone" xml:space="preserve">
<value>Multizone</value>
</data>
<data name="MuteMic" xml:space="preserve">
<value>Wyciszenie mikrofonu</value>
</data>
<data name="OpenGHelper" xml:space="preserve">
<value>Otwórz okno G-Helper</value>
</data>
<data name="Optimized" xml:space="preserve">
<value>Optymalny</value>
</data>
<data name="OptimizedGPUTooltip" xml:space="preserve">
<value>Przełącza na Eco w czasie pracy na baterii i na Standard po podłączeniu</value>
</data>
<data name="OptimizedUSBC" xml:space="preserve">
<value>W trybie Optymalnym wyłącz GPU podczas ładowania przez USB-C</value>
</data>
<data name="Other" xml:space="preserve">
<value>Inne</value>
</data>
<data name="Overdrive" xml:space="preserve">
<value>Overdrive</value>
</data>
<data name="PerformanceMode" xml:space="preserve">
<value>Tryb zasilania</value>
</data>
<data name="PictureGif" xml:space="preserve">
<value>Obraz / GIF</value>
</data>
<data name="PlayPause" xml:space="preserve">
<value>Odtwórz / Pauza</value>
</data>
<data name="PowerLimits" xml:space="preserve">
<value>Limit mocy (PPT)</value>
</data>
<data name="PPTExperimental" xml:space="preserve">
<value>Ustawienie limitu mocy (PPT) jest funkcją eksperymentalną. Używaj ostrożnie, na własną odpowiedzialność!</value>
</data>
<data name="PrintScreen" xml:space="preserve">
<value>Zrzut ekranu</value>
</data>
<data name="Quit" xml:space="preserve">
<value>Zamknij</value>
</data>
<data name="RestartGPU" xml:space="preserve">
<value>Coś korzysta z dedykowanego GPU i uniemożliwia włączenie trybu Eco. Zresetować dedykowany GPU w Menadżerze Urządzeń? * Używaj na własną odpowiedzialność</value>
</data>
<data name="RPM" xml:space="preserve">
<value>RPM</value>
</data>
<data name="RunOnStartup" xml:space="preserve">
<value>Uruchom przy starcie systemu</value>
</data>
<data name="Shutdown" xml:space="preserve">
<value>Zamknij</value>
</data>
<data name="Silent" xml:space="preserve">
<value>Cichy</value>
</data>
<data name="Sleep" xml:space="preserve">
<value>Uśpij</value>
</data>
<data name="StandardGPUTooltip" xml:space="preserve">
<value>Enables dGPU for standard use</value>
</data>
<data name="StandardMode" xml:space="preserve">
<value>Standard</value>
</data>
<data name="StartupError" xml:space="preserve">
<value>Błąd uruchamiania</value>
</data>
<data name="ToggleAura" xml:space="preserve">
<value>Przełącz Aura</value>
</data>
<data name="ToggleMiniled" xml:space="preserve">
<value>Przełącz MiniLED</value>
</data>
<data name="ToggleScreen" xml:space="preserve">
<value>Przełącz ekran</value>
</data>
<data name="Turbo" xml:space="preserve">
<value>Turbo</value>
</data>
<data name="TurnedOff" xml:space="preserve">
<value>Wyłączony</value>
</data>
<data name="TurnOffOnBattery" xml:space="preserve">
<value>Wyłączony na baterii</value>
</data>
<data name="UltimateGPUTooltip" xml:space="preserve">
<value>Podłącza ekran laptopa bezpośrednio do dedykowanego GPU</value>
</data>
<data name="UltimateMode" xml:space="preserve">
<value>Ultimate</value>
</data>
<data name="VersionLabel" xml:space="preserve">
<value>Wersja</value>
</data>
<data name="VolumeDown" xml:space="preserve">
<value>Zmniejsz głośność</value>
</data>
<data name="VolumeMute" xml:space="preserve">
<value>Wyciszenie</value>
</data>
<data name="VolumeUp" xml:space="preserve">
<value>Zwiększ głośność</value>
</data>
<data name="WindowTop" xml:space="preserve">
<value>Zachowaj okno aplikacji zawsze na wierzchu</value>
</data>
</root>

View File

@@ -306,6 +306,9 @@
<data name="KeyboardAuto" xml:space="preserve">
<value>Lower backlight brightness on battery and back when plugged</value>
</data>
<data name="KillGpuApps" xml:space="preserve">
<value>Stop all apps using GPU when switching to Eco</value>
</data>
<data name="LaptopBacklight" xml:space="preserve">
<value>Laptop Backlight</value>
</data>

View File

@@ -288,6 +288,9 @@
<data name="KeyboardAuto" xml:space="preserve">
<value>Вимкнути підсвітку на батареї та увімкнути на зарядці</value>
</data>
<data name="KillGpuApps" xml:space="preserve">
<value>Закривати додатки, що використовують GPU, під час переходу в режим Eco</value>
</data>
<data name="LaptopBacklight" xml:space="preserve">
<value>Підсвітка</value>
</data>
@@ -297,6 +300,9 @@
<data name="LaptopScreen" xml:space="preserve">
<value>Дисплей</value>
</data>
<data name="MatrixAudio" xml:space="preserve">
<value>Аудіо візуалізатор</value>
</data>
<data name="MatrixBanner" xml:space="preserve">
<value>Бінарний банер</value>
</data>
@@ -400,7 +406,7 @@
<value>Аура</value>
</data>
<data name="ToggleMiniled" xml:space="preserve">
<value>Міні-лед (якщо підтримується)</value>
<value>Міні-лед (якщо є)</value>
</data>
<data name="ToggleScreen" xml:space="preserve">
<value>Вимкнути екран</value>

View File

@@ -190,7 +190,10 @@
<value>喚醒時</value>
</data>
<data name="BacklightTimeout" xml:space="preserve">
<value>電池模式下自動關閉背光的秒數</value>
<value>電池模式下自動關閉鍵盤背光的秒數(0 = 不關閉)</value>
</data>
<data name="BacklightTimeoutPlugged" xml:space="preserve">
<value>插電模式下自動關閉鍵盤背光的秒數(0 = 不關閉)</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>平衡模式</value>
@@ -301,7 +304,7 @@
<value>鍵盤</value>
</data>
<data name="KeyboardAuto" xml:space="preserve">
<value>電池模式時自動降低鍵盤背光亮度以省電</value>
<value>電池模式時自動降低鍵盤背光亮度以省電</value>
</data>
<data name="LaptopBacklight" xml:space="preserve">
<value>背光</value>
@@ -452,9 +455,15 @@
</data>
<data name="VersionLabel" xml:space="preserve">
<value>版本</value>
</data>
<data name="VolumeDown" xml:space="preserve">
<value>音量降低</value>
</data>
<data name="VolumeMute" xml:space="preserve">
<value>靜音</value>
</data>
<data name="VolumeUp" xml:space="preserve">
<value>音量增加</value>
</data>
<data name="WindowTop" xml:space="preserve">
<value>視窗置頂</value>

View File

@@ -901,13 +901,12 @@ namespace GHelper
tableLayoutKeyboard.AutoSize = true;
tableLayoutKeyboard.AutoSizeMode = AutoSizeMode.GrowAndShrink;
tableLayoutKeyboard.ColumnCount = 3;
tableLayoutKeyboard.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
tableLayoutKeyboard.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
tableLayoutKeyboard.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
tableLayoutKeyboard.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
tableLayoutKeyboard.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33F));
tableLayoutKeyboard.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33F));
tableLayoutKeyboard.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33F));
tableLayoutKeyboard.Controls.Add(buttonKeyboard, 0, 0);
tableLayoutKeyboard.Controls.Add(panelColor, 0, 0);
tableLayoutKeyboard.Controls.Add(comboKeyboard, 0, 0);
tableLayoutKeyboard.Controls.Add(panelColor, 1, 0);
tableLayoutKeyboard.Controls.Add(buttonKeyboard, 2, 0);
tableLayoutKeyboard.Location = new Point(16, 50);
tableLayoutKeyboard.Margin = new Padding(8);
tableLayoutKeyboard.Name = "tableLayoutKeyboard";

View File

@@ -194,6 +194,7 @@ namespace GHelper
break;
default:
if (key == InputDispatcher.keyProfile) CyclePerformanceMode();
if (key == InputDispatcher.keyApp) Program.SettingsToggle();
break;
}
@@ -203,7 +204,8 @@ namespace GHelper
try
{
base.WndProc(ref m);
} catch (Exception ex)
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
}
@@ -686,6 +688,17 @@ namespace GHelper
pictureColor.BackColor = AsusUSB.Color1;
pictureColor2.BackColor = AsusUSB.Color2;
pictureColor2.Visible = AsusUSB.HasSecondColor();
if (AppConfig.ContainsModel("GA401"))
{
panelColor.Visible = false;
}
if (AppConfig.ContainsModel("GA401I"))
{
comboKeyboard.Visible = false;
}
}
public void InitMatrix()
@@ -970,6 +983,7 @@ namespace GHelper
int limit_total = AppConfig.getConfigPerf("limit_total");
int limit_cpu = AppConfig.getConfigPerf("limit_cpu");
int limit_apu = AppConfig.getConfigPerf("limit_apu");
if (limit_total > AsusACPI.MaxTotal) return;
if (limit_total < AsusACPI.MinTotal) return;
@@ -977,6 +991,9 @@ 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 (Program.acpi.DeviceGet(AsusACPI.PPT_TotalA0) >= 0)
{
Program.acpi.DeviceSet(AsusACPI.PPT_TotalA0, limit_total, "PowerLimit A0");
@@ -990,6 +1007,11 @@ namespace GHelper
customPower = limit_cpu;
}
if (Program.acpi.DeviceGet(AsusACPI.PPT_APUC1) >= 0)
{
Program.acpi.DeviceSet(AsusACPI.PPT_APUC1, limit_apu, "PowerLimit C1");
}
Program.settingsForm.BeginInvoke(SetPerformanceLabel);
}
@@ -1063,14 +1085,21 @@ namespace GHelper
if (AppConfig.getConfigPerf("auto_apply") == 1 || force)
{
bool xgmFan = false;
if (AppConfig.isConfig("xgm_fan") && Program.acpi.IsXGConnected())
{
AsusUSB.SetXGMFan(AppConfig.getFanConfig(AsusFan.XGM));
xgmFan = true;
}
int cpuResult = Program.acpi.SetFanCurve(AsusFan.CPU, AppConfig.getFanConfig(AsusFan.CPU));
int gpuResult = Program.acpi.SetFanCurve(AsusFan.GPU, AppConfig.getFanConfig(AsusFan.GPU));
if (AppConfig.isConfig("mid_fan"))
Program.acpi.SetFanCurve(AsusFan.Mid, AppConfig.getFanConfig(AsusFan.Mid));
if (AppConfig.isConfig("xgm_fan") && Program.acpi.IsXGConnected())
AsusUSB.SetXGMFan(AppConfig.getFanConfig(AsusFan.XGM));
// something went wrong, resetting to default profile
if (cpuResult != 1 || gpuResult != 1)
@@ -1087,7 +1116,7 @@ namespace GHelper
}
// fix for misbehaving bios on intell based TUF 2022
if ((AppConfig.ContainsModel("FX507") || AppConfig.ContainsModel("FX517")) && AppConfig.getConfigPerf("auto_apply_power") != 1)
if ((AppConfig.ContainsModel("FX507") || AppConfig.ContainsModel("FX517") || xgmFan) && AppConfig.getConfigPerf("auto_apply_power") != 1)
{
Task.Run(async () =>
{
@@ -1241,7 +1270,7 @@ namespace GHelper
int backlight = AppConfig.getConfig("keyboard_brightness");
if (AppConfig.isConfig("keyboard_auto") && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online)
if (AppConfig.isConfig("keyboard_auto") && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online)
AsusUSB.ApplyBrightness(0);
else if (backlight >= 0)
AsusUSB.ApplyBrightness(backlight);
@@ -1414,7 +1443,7 @@ namespace GHelper
if (eco < 0)
{
tableGPU.Visible = false;
if (Program.acpi.DeviceGet(AsusACPI.GPU_Fan) < 0 ) panelGPU.Visible = false;
if (Program.acpi.DeviceGet(AsusACPI.GPU_Fan) < 0) panelGPU.Visible = false;
}
}
@@ -1477,9 +1506,15 @@ 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)

View File

@@ -6,6 +6,8 @@ sc config ASUSSwitch start= auto
sc config ASUSSystemAnalysis start= auto
sc config ASUSSystemDiagnosis start= auto
sc config ArmouryCrateControlInterface start= auto
sc config AsusCertService start= auto
sc config ASUSOptimization start= auto
sc START AsusAppService
sc START ASUSLinkNear
@@ -14,6 +16,8 @@ sc START ASUSSoftwareManager
sc START ASUSSwitch
sc START ASUSSystemAnalysis
sc START ASUSSystemDiagnosis
sc START ArmouryCrateControlInterface
sc START ArmouryCrateControlInterface
sc START AsusCertService
sc START ASUSOptimization
set /p asd="Hit enter to finish"

View File

@@ -5,7 +5,9 @@ sc STOP ASUSSoftwareManager
sc STOP ASUSSwitch
sc STOP ASUSSystemAnalysis
sc STOP ASUSSystemDiagnosis
sc STOP ArmouryCrateControlInterface
sc STOP ArmouryCrateControlInterface
sc STOP AsusCertService
sc STOP ASUSOptimization
sc config AsusAppService start= disabled
sc config ASUSLinkNear start= disabled
@@ -15,5 +17,7 @@ sc config ASUSSwitch start= disabled
sc config ASUSSystemAnalysis start= disabled
sc config ASUSSystemDiagnosis start= disabled
sc config ArmouryCrateControlInterface start= disabled
sc config AsusCertService start= disabled
sc config ASUSOptimization start= disabled
set /p asd="Hit enter to finish"

View File

@@ -20,7 +20,7 @@ Lightweight Armoury Crate alternative for Asus lapopts. A small utility that all
## [:floppy_disk: Download App](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!
### [:euro: Donate EUR](https://www.paypal.com/donate/?hosted_button_id=4HMSHS4EBQWTA) | [💵 Donate USD](https://www.paypal.com/donate/?hosted_button_id=SRM6QUX6ACXDY) | [:coin: Donate via Stripe](https://buy.stripe.com/00gaFJ9Lf79v7WobII)
### [:euro: Donate EUR](https://www.paypal.com/donate/?hosted_button_id=4HMSHS4EBQWTA) | [💵 Donate USD](https://www.paypal.com/donate/?hosted_button_id=SRM6QUX6ACXDY) | [:credit_card: Donate via Stripe](https://buy.stripe.com/00gaFJ9Lf79v7WobII)
_If you post about the app - please include a link. Thanks._
@@ -153,6 +153,10 @@ It's a lightweight Armoury Crate alternative for Asus laptops. A small utility t
- Also, it's not recommended to have "ASUS Smart Display Control" app running, as it will try to change refresh rates and fight with g-helper for the same function. You can safely uninstall it.
- It is recommended to run app with windows default "balanced" power plan
![Screenshot 2023-05-29 191650](https://github.com/seerge/g-helper/assets/5920850/27719d96-e9ca-4164-ac4a-23b5966fc0ec)
-------------------------------
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.