Compare commits

...

50 Commits
v0.50 ... v0.53

Author SHA1 Message Date
Serge
4acbf5adf1 Merge pull request #256 from lswlc33/main
update readme.md's language switch button
2023-04-16 13:03:47 +02:00
seerge
48ea1b588f Merge branch 'main' of https://github.com/seerge/g-helper 2023-04-16 13:01:36 +02:00
seerge
cb15161fc4 Warning label when custom fan profile is not supported 2023-04-16 13:01:34 +02:00
雪中明月
d95a612788 Update README.md 2023-04-16 18:55:46 +08:00
雪中明月
0a724926ee update readme.md's language switch button 2023-04-16 10:50:20 +00:00
Serge
353ed998db Update README.md 2023-04-16 11:44:23 +02:00
seerge
0afee18f20 Merge branch 'main' of https://github.com/seerge/g-helper 2023-04-15 20:12:35 +02:00
seerge
8154883d49 It's fine 2023-04-15 20:12:33 +02:00
Serge
feb4198c0f Merge pull request #250 from marcelomijas/main
"Keyboard backlight" extra options Spanish translation fix
2023-04-15 19:48:25 +02:00
Marcelo Moreno
6edf2d9447 Add files via upload 2023-04-15 19:42:51 +02:00
seerge
25f0af1103 AdjustAllLevels fixes 2023-04-15 16:02:07 +02:00
Serge
4f9cc4a94e Merge pull request #237 from hungqbui/main
Add fan levels auto-adjust
2023-04-15 01:12:15 +02:00
Serge
e973f09f4e Update README.md 2023-04-15 01:11:40 +02:00
Serge
cd0662e11f Update README.md 2023-04-14 17:58:09 +02:00
seerge
ee43af2824 Clock fix for devices with low DPI 2023-04-14 17:50:26 +02:00
Serge
d620ca010c Update README.md 2023-04-13 21:10:57 +02:00
seerge
6bd77ab45b UI tweaks 2023-04-13 18:53:14 +02:00
Hung Bui
99a490996d Fix OutOfBounds error, and correct variables name 2023-04-13 11:23:56 -05:00
seerge
096ea3b8e9 Merge branch 'main' of https://github.com/seerge/g-helper 2023-04-13 18:01:29 +02:00
Serge
5f10f5b1e8 Update README.md 2023-04-13 19:25:58 +02:00
seerge
36219383ce UI tweaks 2023-04-13 18:01:27 +02:00
seerge
78862c6558 Merge branch 'main' of https://github.com/seerge/g-helper 2023-04-13 17:21:27 +02:00
Serge
b53a46bb3b Update README.md 2023-04-13 18:21:28 +02:00
seerge
15a681af3b G513 fix 2023-04-13 17:21:25 +02:00
Serge
6341ec7d34 Update README.md 2023-04-13 11:37:31 +02:00
Hung Bui
596c47d371 Add fan levels auto-adjust 2023-04-12 19:07:53 -05:00
seerge
7ff8fec35c Fix for zw-TW translation 2023-04-12 21:51:11 +02:00
seerge
b96185222c Merge branch 'main' of https://github.com/seerge/g-helper 2023-04-12 14:40:47 +02:00
seerge
3346bd5f0e Fans tip fix 2023-04-12 14:40:45 +02:00
Serge
34404feb5b Update bug_report.md 2023-04-12 13:06:07 +02:00
seerge
552bc1020d Merge branch 'main' of https://github.com/seerge/g-helper 2023-04-12 12:05:59 +02:00
seerge
6d0bb5bef7 Boost dropdown fix 2023-04-12 12:05:57 +02:00
Serge
00d80ce7a9 Update bug_report.md 2023-04-12 11:19:52 +02:00
seerge
08e1ed54cd Added fix for Traditional Chinese 2023-04-11 23:25:46 +02:00
seerge
97a22c59f7 - 2023-04-11 22:46:13 +02:00
seerge
d2aa5e9c42 UI tweaks 2023-04-11 22:40:13 +02:00
seerge
2cb0ffab4b Merge branch 'main' of https://github.com/seerge/g-helper 2023-04-11 22:30:19 +02:00
seerge
e3cb2bb4a1 Minor tweaks 2023-04-11 22:30:17 +02:00
Serge
5a734c00c1 Update README.zh-CN.md 2023-04-11 22:19:03 +02:00
Serge
d85ec73a27 Update README.zh-CN.md 2023-04-11 22:18:17 +02:00
Serge
4b9eb99870 Merge pull request #223 from marcelomijas/main
Spanish translation length fix
2023-04-11 21:15:31 +02:00
Marcelo Moreno
c9b939b876 Add files via upload 2023-04-11 20:57:06 +02:00
seerge
9562f77c6f Merge branch 'main' of https://github.com/seerge/g-helper 2023-04-11 19:42:47 +02:00
seerge
7120d2a009 GPU usage tweak 2023-04-11 19:42:44 +02:00
Serge
4fa4295748 Update README.md 2023-04-11 19:31:35 +02:00
Serge
23f28a8ce5 Update README.md 2023-04-11 19:29:47 +02:00
Serge
a94321df04 Merge pull request #221 from sklynic/main
Added zh-CN translation for README and minor edit
2023-04-11 19:25:18 +02:00
sklynic
9917f5543c Synchronized translation for readme 2023-04-12 01:20:40 +08:00
sklynic
78367727ae Merge branch 'seerge:main' into main 2023-04-12 01:14:12 +08:00
sklynic
9b7842a5e9 Added zh-CN for readme and minor edit 2023-04-12 01:11:45 +08:00
26 changed files with 952 additions and 200 deletions

View File

@@ -1,15 +1,15 @@
## NOTE
Bug reports without clear information or scenario to reproduce will be closed without answer.
Please respect time of the developer. Thanks.
---
name: Bug report
about: Create a report to help us improve
---
## NOTE
Bug reports without clear information or scenario to reproduce and logs from ``%AppData%\GHelper`` will be closed without answer.
Please respect time of the developer. Thanks.
**Describe the bug**
A clear and concise description of what the bug is.

View File

@@ -36,17 +36,17 @@ public class ASUSWmi
public const int Temp_CPU = 0x00120094;
public const int Temp_GPU = 0x00120097;
public const int PPT_TotalA0 = 0x001200A0; // Total PPT on 2022 and CPU PPT on 2021
public const int PPT_TotalA0 = 0x001200A0; // Total PPT on 2022 (PPT_LIMIT_SLOW ) and CPU PPT on 2021
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_CPUB0 = 0x001200B0; // CPU PPT on 2022
public const int PPT_CPUB1 = 0x001200B1; // APU PPT on 2022
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_APUC1 = 0x001200C1;
public const int PPT_APUC2 = 0x001200C2;
public const int PPT_APUC0 = 0x001200C0; // does nothing on G14 2022
public const int PPT_APUC1 = 0x001200C1; // Actual Power Limit (PPT_LIMIT_FAST) AND Sustained Power Limit (STAPM_LIMIT)
public const int PPT_APUC2 = 0x001200C2; // does nothing on G14 2022
public const int TUF_KB = 0x00100056;
public const int TUF_KB_STATE = 0x00100057;

View File

@@ -380,14 +380,14 @@ namespace Starlight.AnimeMatrix
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.AntiAlias;
using (Font font = new Font("Arial", 12F))
using (Font font = new Font("Arial", 24F, GraphicsUnit.Pixel))
{
SizeF textSize = g.MeasureString(text1, font);
g.DrawString(text1, font, Brushes.White, (MaxColumns*3 - textSize.Width)+3, -5);
g.DrawString(text1, font, Brushes.White, (MaxColumns*3 - textSize.Width)+3, -3);
}
if (text2.Length > 0)
using (Font font = new Font("Arial", 9F))
using (Font font = new Font("Arial", 18F, GraphicsUnit.Pixel))
{
SizeF textSize = g.MeasureString(text2, font);
g.DrawString(text2, font, Brushes.White, (MaxColumns * 3 - textSize.Width)+1, 25);

View File

@@ -191,8 +191,10 @@ namespace CustomControls
{
dc = m.WParam;
}
var rgn = CreateRectRgn(innerInnerBorder.Left, innerInnerBorder.Top,
innerInnerBorder.Right, innerInnerBorder.Bottom);
SelectClipRgn(dc, rgn);
DefWndProc(ref m);
DeleteObject(rgn);

22
app/Fans.Designer.cs generated
View File

@@ -63,6 +63,7 @@ namespace GHelper
trackTotal = new TrackBar();
pictureFine = new PictureBox();
labelInfo = new Label();
labelFansResult = new Label();
panelFans.SuspendLayout();
((System.ComponentModel.ISupportInitialize)picturePerf).BeginInit();
tableFanCharts.SuspendLayout();
@@ -80,6 +81,7 @@ namespace GHelper
//
// panelFans
//
panelFans.Controls.Add(labelFansResult);
panelFans.Controls.Add(labelTip);
panelFans.Controls.Add(labelBoost);
panelFans.Controls.Add(comboBoost);
@@ -117,7 +119,6 @@ namespace GHelper
labelBoost.TabIndex = 39;
labelBoost.Text = Properties.Strings.CPUBoost;
labelBoost.TextAlign = ContentAlignment.MiddleRight;
//
// comboBoost
//
@@ -221,7 +222,7 @@ namespace GHelper
checkApplyFans.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
checkApplyFans.AutoSize = true;
checkApplyFans.BackColor = SystemColors.ControlLight;
checkApplyFans.Location = new Point(449, 1084);
checkApplyFans.Location = new Point(449, 1088);
checkApplyFans.Margin = new Padding(4, 2, 4, 2);
checkApplyFans.Name = "checkApplyFans";
checkApplyFans.Padding = new Padding(15, 5, 15, 5);
@@ -238,11 +239,11 @@ namespace GHelper
buttonReset.BorderColor = Color.Transparent;
buttonReset.BorderRadius = 2;
buttonReset.FlatStyle = FlatStyle.Flat;
buttonReset.Location = new Point(30, 1084);
buttonReset.Location = new Point(30, 1082);
buttonReset.Margin = new Padding(4, 2, 4, 2);
buttonReset.Name = "buttonReset";
buttonReset.Secondary = true;
buttonReset.Size = new Size(232, 50);
buttonReset.Size = new Size(232, 54);
buttonReset.TabIndex = 15;
buttonReset.Text = Properties.Strings.FactoryDefaults;
buttonReset.UseVisualStyleBackColor = false;
@@ -292,7 +293,7 @@ namespace GHelper
checkApplyPower.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
checkApplyPower.AutoSize = true;
checkApplyPower.BackColor = SystemColors.ControlLight;
checkApplyPower.Location = new Point(20, 1086);
checkApplyPower.Location = new Point(20, 1088);
checkApplyPower.Margin = new Padding(4, 2, 4, 2);
checkApplyPower.Name = "checkApplyPower";
checkApplyPower.Padding = new Padding(15, 5, 15, 5);
@@ -417,6 +418,16 @@ namespace GHelper
labelInfo.TabIndex = 19;
labelInfo.Text = "label";
//
// labelFansResult
//
labelFansResult.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelFansResult.ForeColor = Color.Red;
labelFansResult.Location = new Point(30, 1070);
labelFansResult.Name = "labelFansResult";
labelFansResult.Size = new Size(760, 32);
labelFansResult.TabIndex = 41;
labelFansResult.TextAlign = ContentAlignment.TopRight;
//
// Fans
//
AutoScaleDimensions = new SizeF(192F, 192F);
@@ -483,5 +494,6 @@ namespace GHelper
private RComboBox comboBoost;
private Label labelBoost;
private Label labelTip;
private Label labelFansResult;
}
}

View File

@@ -200,18 +200,23 @@ namespace GHelper
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, Program.config.getConfig("performance_mode"), "PerfMode");
Program.settingsForm.AutoPower();
}
}
public void LabelFansResult(string text)
{
labelFansResult.Text = text;
}
private void Fans_FormClosing(object? sender, FormClosingEventArgs e)
{
/*
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
Hide();
}
}*/
}
@@ -335,6 +340,8 @@ namespace GHelper
old = curve[i];
}
SaveProfile(series, device);
}
void SaveProfile(Series series, int device)
@@ -390,53 +397,136 @@ namespace GHelper
{
if (sender is null) return;
Chart chart = (Chart)sender;
if (e.Button.HasFlag(MouseButtons.Left))
ChartArea ca = chart.ChartAreas[0];
Axis ax = ca.AxisX;
Axis ay = ca.AxisY;
bool tip = false;
HitTestResult hit = chart.HitTest(e.X, e.Y);
if (hit.Series is not null && hit.PointIndex >= 0)
{
ChartArea ca = chart.ChartAreas[0];
Axis ax = ca.AxisX;
Axis ay = ca.AxisY;
HitTestResult hit = chart.HitTest(e.X, e.Y);
if (hit.Series is not null && hit.PointIndex >= 0)
curPoint = hit.Series.Points[hit.PointIndex];
curPoint = hit.Series.Points[hit.PointIndex];
tip = true;
}
if (curPoint != null)
if (curPoint != null)
{
double dx, dy, dymin;
try
{
dx = ax.PixelPositionToValue(e.X);
dy = ay.PixelPositionToValue(e.Y);
Series s = hit.Series;
double dx, dy, dymin;
if (dx < 20) dx = 20;
if (dx > 100) dx = 100;
try
if (dy < 0) dy = 0;
if (dy > 100) dy = 100;
dymin = (dx - 65) * 1.2;
if (dy < dymin) dy = dymin;
if (e.Button.HasFlag(MouseButtons.Left))
{
dx = ax.PixelPositionToValue(e.X);
dy = ay.PixelPositionToValue(e.Y);
if (dx < 20) dx = 20;
if (dx > 100) dx = 100;
if (dy < 0) dy = 0;
if (dy > 100) dy = 100;
dymin = (dx - 65) * 1.2;
if (dy < dymin) dy = dymin;
curPoint.XValue = dx;
curPoint.YValues[0] = dy;
labelTip.Visible = true;
labelTip.Text = Math.Round(dx) + "C, " + ChartPercToRPM((int)dy, " " + Properties.Strings.RPM);
labelTip.Top = e.Y + ((Control)sender).Top;
labelTip.Left = e.X;
if (hit.Series is not null)
AdjustAllLevels(hit.PointIndex, dx, dy, hit.Series);
tip = true;
}
catch
labelTip.Text = Math.Round(curPoint.XValue) + "C, " + ChartPercToRPM((int)curPoint.YValues[0], " " + Properties.Strings.RPM);
labelTip.Top = e.Y + ((Control)sender).Top;
labelTip.Left = e.X - 50;
}
catch
{
Debug.WriteLine(e.Y);
tip = false;
}
}
labelTip.Visible = tip;
}
private void AdjustAllLevels(int index, double curXVal, double curYVal, Series series)
{
// Get the neighboring DataPoints of the hit point
DataPoint upperPoint = null;
DataPoint lowerPoint = null;
if (index > 0)
{
lowerPoint = series.Points[index - 1];
}
if (index < series.Points.Count - 1)
{
upperPoint = series.Points[index + 1];
}
// Adjust the values according to the comparison between the value and its neighbors
if (upperPoint != null)
{
if (curYVal > upperPoint.YValues[0])
{
for (int i = index + 1; i < series.Points.Count; i++)
{
Debug.WriteLine(e.Y);
DataPoint curUpper = series.Points[i];
if (curUpper.YValues[0] >= curYVal) break;
curUpper.YValues[0] = curYVal;
}
}
if (curXVal > upperPoint.XValue)
{
for (int i = index + 1; i < series.Points.Count; i++)
{
DataPoint curUpper = series.Points[i];
if (curUpper.XValue >= curXVal) break;
curUpper.XValue = curXVal;
}
}
}
if (lowerPoint != null)
{
//Debug.WriteLine(curYVal + " <? " + Math.Floor(lowerPoint.YValues[0]));
if (curYVal <= Math.Floor(lowerPoint.YValues[0]))
{
for (int i = index - 1; i >= 0; i--)
{
DataPoint curLower = series.Points[i];
if (curLower.YValues[0] < curYVal) break;
curLower.YValues[0] = Math.Floor(curYVal);
}
}
if (curXVal < lowerPoint.XValue)
{
for (int i = index - 1; i >= 0; i--)
{
DataPoint curLower = series.Points[i];
if (curLower.XValue <= curXVal) break;
curLower.XValue = curXVal;
}
}
}

View File

@@ -16,7 +16,7 @@
<PlatformTarget>x64</PlatformTarget>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<AssemblyVersion>0.50</AssemblyVersion>
<AssemblyVersion>0.53</AssemblyVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@@ -62,7 +62,7 @@
<PackageReference Include="hidlibrary" Version="3.3.40" />
<PackageReference Include="HidSharpCore" Version="1.2.1.1" />
<PackageReference Include="NvAPIWrapper.Net" Version="0.8.1.101" />
<PackageReference Include="System.Management" Version="7.0.0" />
<PackageReference Include="System.Management" Version="7.0.1" />
<PackageReference Include="TaskScheduler" Version="2.10.1" />
<PackageReference Include="WinForms.DataVisualization" Version="1.8.0" />
</ItemGroup>

View File

@@ -15,7 +15,6 @@ public static class HardwareMonitor
public static string? gpuFan;
public static string? midFan;
//public static List<int> gpuUsage = new List<int>();
public static int? gpuUse;
public static int GetFanMax()
@@ -78,9 +77,10 @@ public static class HardwareMonitor
if (cpuTemp < 0) try
{
var ct = new PerformanceCounter("Thermal Zone Information", "Temperature", @"\_TZ.THRM", true);
cpuTemp = ct.NextValue() - 273;
ct.Dispose();
using (var ct = new PerformanceCounter("Thermal Zone Information", "Temperature", @"\_TZ.THRM", true))
{
cpuTemp = ct.NextValue() - 273;
}
}
catch
{
@@ -102,17 +102,12 @@ public static class HardwareMonitor
if (gpuTemp is null || gpuTemp < 0)
gpuTemp = Program.wmi.DeviceGet(ASUSWmi.Temp_GPU);
/*
gpuUsage.Add(GetGpuUse());
if (gpuUsage.Count > 3) gpuUsage.RemoveAt(0);
*/
try
{
var cb = new PerformanceCounter("Power Meter", "Power", "Power Meter (0)", true);
batteryDischarge = cb.NextValue() / 1000;
cb.Dispose();
using (var cb = new PerformanceCounter("Power Meter", "Power", "Power Meter (0)", true))
{
batteryDischarge = cb.NextValue() / 1000;
}
}
catch
{
@@ -120,9 +115,14 @@ public static class HardwareMonitor
}
}
public static bool IsUsedGPU(int threshold = 50)
public static bool IsUsedGPU(int threshold = 20)
{
return (GetGpuUse() > threshold);
if (GetGpuUse() > threshold)
{
Thread.Sleep(1000);
return (GetGpuUse() > threshold);
}
return false;
}
public static void RecreateGpuTemperatureProviderWithDelay()

View File

@@ -48,16 +48,19 @@ namespace GHelper
checkBoot = new CheckBox();
checkAwake = new CheckBox();
groupOther = new GroupBox();
checkNoOverdrive = new CheckBox();
checkKeyboardAuto = new CheckBox();
checkTopmost = new CheckBox();
checkNoOverdrive = new CheckBox();
pictureHelp = new PictureBox();
groupBox1.SuspendLayout();
groupLight.SuspendLayout();
groupOther.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureHelp).BeginInit();
SuspendLayout();
//
// groupBox1
//
groupBox1.Controls.Add(pictureHelp);
groupBox1.Controls.Add(textFNF4);
groupBox1.Controls.Add(comboFNF4);
groupBox1.Controls.Add(labelFNF4);
@@ -70,14 +73,14 @@ namespace GHelper
groupBox1.Dock = DockStyle.Top;
groupBox1.Location = new Point(10, 10);
groupBox1.Name = "groupBox1";
groupBox1.Size = new Size(756, 242);
groupBox1.Size = new Size(810, 242);
groupBox1.TabIndex = 0;
groupBox1.TabStop = false;
groupBox1.Text = Properties.Strings.KeyBindings;
//
// textFNF4
//
textFNF4.Location = new Point(411, 176);
textFNF4.Location = new Point(415, 176);
textFNF4.Name = "textFNF4";
textFNF4.PlaceholderText = "action";
textFNF4.Size = new Size(320, 39);
@@ -90,6 +93,7 @@ namespace GHelper
comboFNF4.Name = "comboFNF4";
comboFNF4.Size = new Size(312, 40);
comboFNF4.TabIndex = 7;
comboFNF4.BorderColor = Color.White;
//
// labelFNF4
//
@@ -102,7 +106,7 @@ namespace GHelper
//
// textM4
//
textM4.Location = new Point(411, 113);
textM4.Location = new Point(415, 113);
textM4.Name = "textM4";
textM4.PlaceholderText = "action";
textM4.Size = new Size(320, 39);
@@ -110,7 +114,7 @@ namespace GHelper
//
// textM3
//
textM3.Location = new Point(411, 54);
textM3.Location = new Point(415, 54);
textM3.Name = "textM3";
textM3.PlaceholderText = "notepad /p \"file.txt\"";
textM3.Size = new Size(320, 39);
@@ -124,6 +128,8 @@ namespace GHelper
comboM4.Name = "comboM4";
comboM4.Size = new Size(312, 40);
comboM4.TabIndex = 3;
comboM4.BorderColor = Color.White;
//
// labelM4
//
@@ -142,6 +148,8 @@ namespace GHelper
comboM3.Name = "comboM3";
comboM3.Size = new Size(312, 40);
comboM3.TabIndex = 1;
comboM3.BorderColor = Color.White;
//
// labelM3
//
@@ -163,7 +171,7 @@ namespace GHelper
groupLight.Dock = DockStyle.Top;
groupLight.Location = new Point(10, 252);
groupLight.Name = "groupLight";
groupLight.Size = new Size(756, 320);
groupLight.Size = new Size(810, 320);
groupLight.TabIndex = 1;
groupLight.TabStop = false;
groupLight.Text = Properties.Strings.KeyboardBacklight;
@@ -172,9 +180,9 @@ namespace GHelper
//
labelSpeed.AutoSize = true;
labelSpeed.Location = new Point(25, 237);
labelSpeed.MaximumSize = new Size(200, 0);
labelSpeed.Name = "labelSpeed";
labelSpeed.Size = new Size(198, 32);
labelSpeed.MaximumSize = new Size(200, 0);
labelSpeed.TabIndex = 40;
labelSpeed.Text = Properties.Strings.AnimationSpeed;
//
@@ -240,21 +248,31 @@ namespace GHelper
groupOther.Controls.Add(checkKeyboardAuto);
groupOther.Controls.Add(checkTopmost);
groupOther.Dock = DockStyle.Top;
groupOther.Location = new Point(10, 556);
groupOther.Location = new Point(10, 572);
groupOther.Name = "groupOther";
groupOther.Size = new Size(756, 225);
groupOther.Size = new Size(810, 225);
groupOther.TabIndex = 2;
groupOther.TabStop = false;
groupOther.Text = Properties.Strings.Other;
//
// checkNoOverdrive
//
checkNoOverdrive.AutoSize = true;
checkNoOverdrive.Location = new Point(25, 156);
checkNoOverdrive.Name = "checkNoOverdrive";
checkNoOverdrive.Size = new Size(307, 36);
checkNoOverdrive.TabIndex = 3;
checkNoOverdrive.Text = Properties.Strings.DisableOverdrive;
checkNoOverdrive.UseVisualStyleBackColor = true;
//
// checkKeyboardAuto
//
checkKeyboardAuto.AutoEllipsis = true;
checkKeyboardAuto.AutoSize = true;
checkKeyboardAuto.Location = new Point(25, 51);
checkKeyboardAuto.MaximumSize = new Size(780, 0);
checkKeyboardAuto.Name = "checkKeyboardAuto";
checkKeyboardAuto.Size = new Size(712, 36);
checkKeyboardAuto.MaximumSize = new Size(712, 0);
checkKeyboardAuto.AutoEllipsis = true;
checkKeyboardAuto.TabIndex = 2;
checkKeyboardAuto.Text = Properties.Strings.KeyboardAuto;
checkKeyboardAuto.UseVisualStyleBackColor = true;
@@ -269,21 +287,22 @@ namespace GHelper
checkTopmost.Text = Properties.Strings.WindowTop;
checkTopmost.UseVisualStyleBackColor = true;
//
// checkNoOverdrive
// pictureHelp
//
checkNoOverdrive.AutoSize = true;
checkNoOverdrive.Location = new Point(25, 156);
checkNoOverdrive.Name = "checkNoOverdrive";
checkNoOverdrive.Size = new Size(307, 36);
checkNoOverdrive.TabIndex = 3;
checkNoOverdrive.Text = Properties.Strings.DisableOverdrive;
checkNoOverdrive.UseVisualStyleBackColor = true;
pictureHelp.BackgroundImageLayout = ImageLayout.Zoom;
pictureHelp.Cursor = Cursors.Hand;
pictureHelp.BackgroundImage = Properties.Resources.icons8_help_64;
pictureHelp.Location = new Point(744, 57);
pictureHelp.Name = "pictureHelp";
pictureHelp.Size = new Size(32, 32);
pictureHelp.TabIndex = 9;
pictureHelp.TabStop = false;
//
// Keyboard
//
AutoScaleDimensions = new SizeF(13F, 32F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(776, 858);
ClientSize = new Size(830, 858);
Controls.Add(groupOther);
Controls.Add(groupLight);
Controls.Add(groupBox1);
@@ -291,7 +310,7 @@ namespace GHelper
MaximizeBox = false;
MdiChildrenMinimizedAnchorBottom = false;
MinimizeBox = false;
Name = Properties.Strings.Keyboard;
Name = "Keyboard";
Padding = new Padding(10);
ShowIcon = false;
ShowInTaskbar = false;
@@ -302,6 +321,7 @@ namespace GHelper
groupLight.PerformLayout();
groupOther.ResumeLayout(false);
groupOther.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureHelp).EndInit();
ResumeLayout(false);
}
@@ -328,5 +348,6 @@ namespace GHelper
private CheckBox checkTopmost;
private CheckBox checkKeyboardAuto;
private CheckBox checkNoOverdrive;
private PictureBox pictureHelp;
}
}

View File

@@ -1,4 +1,5 @@
using CustomControls;
using System.Diagnostics;
namespace GHelper
{
@@ -87,6 +88,13 @@ namespace GHelper
checkNoOverdrive.Checked = (Program.config.getConfig("no_overdrive") == 1);
checkNoOverdrive.CheckedChanged += CheckNoOverdrive_CheckedChanged;
pictureHelp.Click += PictureHelp_Click;
}
private void PictureHelp_Click(object? sender, EventArgs e)
{
Process.Start(new ProcessStartInfo("https://github.com/seerge/g-helper#custom-hotkey-actions") { UseShellExecute = true });
}
private void CheckNoOverdrive_CheckedChanged(object? sender, EventArgs e)

View File

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

View File

@@ -31,9 +31,10 @@ namespace GHelper
public static void Main()
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CurrentCulture;
Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture;
Debug.WriteLine(CultureInfo.CurrentUICulture);
//Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("zh");
if (Process.GetProcesses().Count(p => p.ProcessName == "GHelper") > 1)

View File

@@ -160,6 +160,16 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap icons8_help_64 {
get {
object obj = ResourceManager.GetObject("icons8-help-64", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@@ -350,15 +360,6 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Test.
/// </summary>
internal static string String1 {
get {
return ResourceManager.GetString("String1", resourceCulture);
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Icon similar to (Icon).
/// </summary>

View File

@@ -133,15 +133,15 @@
<data name="icons8-fiat-500-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-fiat-500-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-video-card-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-video-card-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-project-management-48 (1)" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-project-management-48 (1).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-bicycle-48 (1)" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-bicycle-48 (1).png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-game-controller-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-game-controller-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-fan-head-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-fan-head-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@@ -172,8 +172,8 @@
<data name="icons8-laptop-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-laptop-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-rocket-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-rocket-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="icons8-video-card-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-video-card-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-organic-food-961" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-organic-food-961.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@@ -199,13 +199,16 @@
<data name="ultimate" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ultimate.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-rocket-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-rocket-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-speed-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-speed-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="everything-is-fine-itsfine" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\everything-is-fine-itsfine.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<value>..\Resources\itsfine.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-game-controller-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-game-controller-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="icons8-help-64" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-help-64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@@ -181,10 +181,10 @@
<value>Automático</value>
</data>
<data name="AutoRefreshTooltip" xml:space="preserve">
<value>Establece 60Hz para ahorrar batería y vuelve cuando está enchufado</value>
<value>Establece 60Hz con batería y vuelve cuando está enchufado</value>
</data>
<data name="Awake" xml:space="preserve">
<value>Despierto</value>
<value>Encendida</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>Equilibrado</value>
@@ -193,7 +193,7 @@
<value>Límite de carga</value>
</data>
<data name="Boot" xml:space="preserve">
<value>Inicio</value>
<value>Al arrancar</value>
</data>
<data name="Color" xml:space="preserve">
<value>Color</value>
@@ -256,7 +256,7 @@
<value>Cargando</value>
</data>
<data name="GPUMode" xml:space="preserve">
<value>Modo GPU</value>
<value>Modo de GPU</value>
</data>
<data name="GPUModeEco" xml:space="preserve">
<value>Sólo iGPU</value>
@@ -274,7 +274,7 @@
<value>Teclado</value>
</data>
<data name="KeyboardAuto" xml:space="preserve">
<value>Bajar retroiluminación con batería y volver cuando está enchufado</value>
<value>Bajar retroiluminación con batería</value>
</data>
<data name="KeyboardBacklight" xml:space="preserve">
<value>Retroiluminación del teclado</value>
@@ -361,13 +361,13 @@
<value>Ejecutar al inicio</value>
</data>
<data name="Shutdown" xml:space="preserve">
<value>Apagar</value>
<value>Al apagar</value>
</data>
<data name="Silent" xml:space="preserve">
<value>Silencio</value>
</data>
<data name="Sleep" xml:space="preserve">
<value>Suspender</value>
<value>En suspensión</value>
</data>
<data name="StandardGPUTooltip" xml:space="preserve">
<value>Habilita la dGPU para uso estándar</value>

View File

@@ -361,7 +361,7 @@
<value>Başlangıçta Çalıştır</value>
</data>
<data name="Shutdown" xml:space="preserve">
<value>Kapat</value>
<value>Kapalı</value>
</data>
<data name="Silent" xml:space="preserve">
<value>Sessiz</value>
@@ -391,7 +391,7 @@
<value>Pille çalışırken kapat</value>
</data>
<data name="UltimateGPUTooltip" xml:space="preserve">
<value>Dizüstü bilgisayar ekranını harici GPU'ya yönlendirerek FPS'yi maksimize eder</value>
<value>Dizüstü ekranını harici GPU'ya yönlendirerek FPS'yi maksimize eder</value>
</data>
<data name="UltimateMode" xml:space="preserve">
<value>Ultimate</value>
@@ -405,4 +405,4 @@
<data name="WindowTop" xml:space="preserve">
<value>Uygulama penceresini her zaman en üstte tut</value>
</data>
</root>
</root>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
@@ -118,10 +118,10 @@
<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>无法连接到华硕 ACPI。 没有它,应用程序将无法运行。 尝试安装Asus System Control Interface</value>
<value>无法连接到ASUS ACPI。 没有它,应用程序将无法运行。 尝试安装Asus System Control Interface驱动。</value>
</data>
<data name="AlertDGPU" xml:space="preserve">
<value>看起来 GPU 正在大量使用,是否禁用</value>
<value>看起来 GPU 正在大量耗电,是否禁用?</value>
</data>
<data name="AlertDGPUTitle" xml:space="preserve">
<value>节能模式</value>
@@ -139,7 +139,7 @@
<value>动画速度</value>
</data>
<data name="AnimeMatrix" xml:space="preserve">
<value>光显矩阵屏</value>
<value>Anime Matrix 光显矩阵屏</value>
</data>
<data name="AppAlreadyRunning" xml:space="preserve">
<value>应用已经运行</value>
@@ -157,7 +157,7 @@
<value>呼吸</value>
</data>
<data name="AuraColorCycle" xml:space="preserve">
<value>循环</value>
<value>彩色循环</value>
</data>
<data name="AuraFast" xml:space="preserve">
<value>快速</value>
@@ -172,22 +172,22 @@
<value>慢</value>
</data>
<data name="AuraStatic" xml:space="preserve">
<value>静态</value>
<value>恒亮(静态)</value>
</data>
<data name="AuraStrobe" xml:space="preserve">
<value>闪</value>
<value>闪</value>
</data>
<data name="AutoMode" xml:space="preserve">
<value>自动</value>
</data>
<data name="AutoRefreshTooltip" xml:space="preserve">
<value>电池模式自动60Hz</value>
<value>使用电池时设置为60Hz,并在插上电源时恢复</value>
</data>
<data name="Awake" xml:space="preserve">
<value>唤醒时</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>平衡模式</value>
<value>平衡</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>电池充电限制</value>
@@ -199,7 +199,7 @@
<value>颜色</value>
</data>
<data name="CPUBoost" xml:space="preserve">
<value>CPU 加速</value>
<value>CPU 睿频</value>
</data>
<data name="Custom" xml:space="preserve">
<value>自定义设置</value>
@@ -208,7 +208,7 @@
<value>默认</value>
</data>
<data name="DisableOverdrive" xml:space="preserve">
<value>禁用屏幕OD</value>
<value>禁用屏幕快速显示(OD)</value>
</data>
<data name="Discharging" xml:space="preserve">
<value>正在放电</value>
@@ -220,7 +220,7 @@
<value>禁用独显以节省电池电量</value>
</data>
<data name="EcoMode" xml:space="preserve">
<value>节能模式</value>
<value>集显模式</value>
</data>
<data name="Extra" xml:space="preserve">
<value>更多</value>
@@ -229,7 +229,7 @@
<value>更多设置</value>
</data>
<data name="FactoryDefaults" xml:space="preserve">
<value>恢复出厂设置</value>
<value>恢复默认设置</value>
</data>
<data name="FanCurves" xml:space="preserve">
<value>风扇曲线</value>
@@ -250,13 +250,13 @@
<value>风扇和电源</value>
</data>
<data name="FansPower" xml:space="preserve">
<value>自定义设置</value>
<value>风扇与电源设置</value>
</data>
<data name="GPUChanging" xml:space="preserve">
<value>切换中...</value>
</data>
<data name="GPUMode" xml:space="preserve">
<value>GPU 模式</value>
<value>独显模式</value>
</data>
<data name="GPUModeEco" xml:space="preserve">
<value>仅限核显</value>
@@ -265,7 +265,7 @@
<value>核显 + 独显</value>
</data>
<data name="GPUModeUltimate" xml:space="preserve">
<value>独显</value>
<value>独显优先</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>按键绑定</value>
@@ -274,19 +274,19 @@
<value>键盘</value>
</data>
<data name="KeyboardAuto" xml:space="preserve">
<value>电池模式自动降低键盘背光亮度以省电</value>
<value>电池模式降低键盘亮度以省电,并在插上电源时恢复</value>
</data>
<data name="KeyboardBacklight" xml:space="preserve">
<value>键盘背光</value>
</data>
<data name="LaptopKeyboard" xml:space="preserve">
<value>键盘背光:</value>
<value>键盘</value>
</data>
<data name="LaptopScreen" xml:space="preserve">
<value>屏幕显示</value>
</data>
<data name="MatrixBanner" xml:space="preserve">
<value>横幅</value>
<value>Anime Matrix 标识</value>
</data>
<data name="MatrixBright" xml:space="preserve">
<value>明亮</value>
@@ -310,22 +310,22 @@
<value>图片</value>
</data>
<data name="MaxRefreshTooltip" xml:space="preserve">
<value>更高的刷新率和更低延迟</value>
<value>更高的刷新率和更低延迟</value>
</data>
<data name="MinRefreshTooltip" xml:space="preserve">
<value>全局60Hz以节省电量</value>
<value>调整刷新率为60Hz以节省电量</value>
</data>
<data name="Multizone" xml:space="preserve">
<value>多区域</value>
<value>多区域设置</value>
</data>
<data name="OpenGHelper" xml:space="preserve">
<value>打开G-Helper窗口</value>
</data>
<data name="Optimized" xml:space="preserve">
<value>自动模式</value>
<value>自动切换</value>
</data>
<data name="OptimizedGPUTooltip" xml:space="preserve">
<value>使用电池切换到节能模式,插入电源时切换到标准模式</value>
<value>使用电池时关闭独显(集显模式),并在插上电源后重新启用独显(混合输出)</value>
</data>
<data name="Other" xml:space="preserve">
<value>其他</value>
@@ -334,7 +334,7 @@
<value>OD</value>
</data>
<data name="PerformanceMode" xml:space="preserve">
<value>性能模式:</value>
<value>性能模式</value>
</data>
<data name="PictureGif" xml:space="preserve">
<value>图片/动图</value>
@@ -355,7 +355,7 @@
<value>退出</value>
</data>
<data name="RPM" xml:space="preserve">
<value>每分钟转数</value>
<value>RPM</value>
</data>
<data name="RunOnStartup" xml:space="preserve">
<value>开机自启</value>
@@ -364,13 +364,13 @@
<value>关机时</value>
</data>
<data name="Silent" xml:space="preserve">
<value>静模式</value>
<value>静模式</value>
</data>
<data name="Sleep" xml:space="preserve">
<value>睡眠时</value>
</data>
<data name="StandardGPUTooltip" xml:space="preserve">
<value>标准模式会启用独显</value>
<value>启用独显以供日常使用</value>
</data>
<data name="StandardMode" xml:space="preserve">
<value>标准模式</value>
@@ -379,22 +379,22 @@
<value>启动错误</value>
</data>
<data name="ToggleAura" xml:space="preserve">
<value>切换光环</value>
<value>切换 Aura 模式</value>
</data>
<data name="Turbo" xml:space="preserve">
<value>极速模式</value>
<value>增强</value>
</data>
<data name="TurnedOff" xml:space="preserve">
<value>已关闭</value>
</data>
<data name="TurnOffOnBattery" xml:space="preserve">
<value>电池模式时关闭</value>
<value>使用电池时关闭</value>
</data>
<data name="UltimateGPUTooltip" xml:space="preserve">
<value>开启独显直连获得最佳帧率</value>
</data>
<data name="UltimateMode" xml:space="preserve">
<value>独显直连</value>
<value>独显输出</value>
</data>
<data name="VersionLabel" xml:space="preserve">
<value>版本</value>

View File

@@ -0,0 +1,408 @@
<?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>無法連結到華碩 ACPI。 没有它,應用程式將無法執行。 嘗試安裝Asus System Control Interface</value>
</data>
<data name="AlertDGPU" xml:space="preserve">
<value>看起来 GPU 正在大量使用,是否禁用它?</value>
</data>
<data name="AlertDGPUTitle" xml:space="preserve">
<value>節能模式</value>
</data>
<data name="AlertUltimateOff" xml:space="preserve">
<value>關閉獨顯需要重新啟動</value>
</data>
<data name="AlertUltimateOn" xml:space="preserve">
<value>獨顯直連需要重啟</value>
</data>
<data name="AlertUltimateTitle" xml:space="preserve">
<value>現在重新啟動嗎?</value>
</data>
<data name="AnimationSpeed" xml:space="preserve">
<value>動畫速度</value>
</data>
<data name="AnimeMatrix" xml:space="preserve">
<value>AnimeMatrix</value>
</data>
<data name="AppAlreadyRunning" xml:space="preserve">
<value>程式已正在執行</value>
</data>
<data name="AppAlreadyRunningText" xml:space="preserve">
<value>G-Helper已經在執行。 請確認右下工作列中的圖示。</value>
</data>
<data name="ApplyFanCurve" xml:space="preserve">
<value>套用自定義風扇曲線</value>
</data>
<data name="ApplyPowerLimits" xml:space="preserve">
<value>套用功率限制</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>呼吸</value>
</data>
<data name="AuraColorCycle" xml:space="preserve">
<value>循環</value>
</data>
<data name="AuraFast" xml:space="preserve">
<value>快速</value>
</data>
<data name="AuraNormal" xml:space="preserve">
<value>正常</value>
</data>
<data name="AuraRainbow" xml:space="preserve">
<value>彩虹</value>
</data>
<data name="AuraSlow" xml:space="preserve">
<value>慢</value>
</data>
<data name="AuraStatic" xml:space="preserve">
<value>靜態</value>
</data>
<data name="AuraStrobe" xml:space="preserve">
<value>閃爍</value>
</data>
<data name="AutoMode" xml:space="preserve">
<value>自動</value>
</data>
<data name="AutoRefreshTooltip" xml:space="preserve">
<value>電池模式時自動60Hz</value>
</data>
<data name="Awake" xml:space="preserve">
<value>喚醒時</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>平衡模式</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>電池充電上限</value>
</data>
<data name="Boot" xml:space="preserve">
<value>開機時</value>
</data>
<data name="Color" xml:space="preserve">
<value>顏色</value>
</data>
<data name="CPUBoost" xml:space="preserve">
<value>CPU 加速</value>
</data>
<data name="Custom" xml:space="preserve">
<value>自定義設置</value>
</data>
<data name="Default" xml:space="preserve">
<value>預設</value>
</data>
<data name="DisableOverdrive" xml:space="preserve">
<value>禁用螢幕加速OD</value>
</data>
<data name="Discharging" xml:space="preserve">
<value>正在釋放電力</value>
</data>
<data name="DownloadUpdate" xml:space="preserve">
<value>下載更新</value>
</data>
<data name="EcoGPUTooltip" xml:space="preserve">
<value>禁用獨顯以節省電池電量</value>
</data>
<data name="EcoMode" xml:space="preserve">
<value>節能模式</value>
</data>
<data name="Extra" xml:space="preserve">
<value>更多</value>
</data>
<data name="ExtraSettings" xml:space="preserve">
<value>更多設定</value>
</data>
<data name="FactoryDefaults" xml:space="preserve">
<value>恢復原廠設定</value>
</data>
<data name="FanCurves" xml:space="preserve">
<value>風扇曲線</value>
</data>
<data name="FanProfileCPU" xml:space="preserve">
<value>CPU 風扇設置文件</value>
</data>
<data name="FanProfileGPU" xml:space="preserve">
<value>GPU 風扇設置文件</value>
</data>
<data name="FanProfileMid" xml:space="preserve">
<value>中等風扇設置</value>
</data>
<data name="FanProfiles" xml:space="preserve">
<value>風扇設置</value>
</data>
<data name="FansAndPower" xml:space="preserve">
<value>風扇和電源</value>
</data>
<data name="FansPower" xml:space="preserve">
<value>自定義設置</value>
</data>
<data name="GPUChanging" xml:space="preserve">
<value>切換中...</value>
</data>
<data name="GPUMode" xml:space="preserve">
<value>GPU 模式</value>
</data>
<data name="GPUModeEco" xml:space="preserve">
<value>僅限內顯</value>
</data>
<data name="GPUModeStandard" xml:space="preserve">
<value>內顯 + 獨顯</value>
</data>
<data name="GPUModeUltimate" xml:space="preserve">
<value>獨立顯卡</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>按鍵綁定</value>
</data>
<data name="Keyboard" xml:space="preserve">
<value>鍵盤</value>
</data>
<data name="KeyboardAuto" xml:space="preserve">
<value>電池模式時自動降低鍵盤背光亮度以省電</value>
</data>
<data name="KeyboardBacklight" xml:space="preserve">
<value>鍵盤背光</value>
</data>
<data name="LaptopKeyboard" xml:space="preserve">
<value>鍵盤背光:</value>
</data>
<data name="LaptopScreen" xml:space="preserve">
<value>螢幕顯示</value>
</data>
<data name="MatrixBanner" xml:space="preserve">
<value>横幅</value>
</data>
<data name="MatrixBright" xml:space="preserve">
<value>明亮</value>
</data>
<data name="MatrixClock" xml:space="preserve">
<value>時鐘</value>
</data>
<data name="MatrixDim" xml:space="preserve">
<value>黯淡</value>
</data>
<data name="MatrixLogo" xml:space="preserve">
<value>ROG logo</value>
</data>
<data name="MatrixMedium" xml:space="preserve">
<value>中</value>
</data>
<data name="MatrixOff" xml:space="preserve">
<value>關閉</value>
</data>
<data name="MatrixPicture" xml:space="preserve">
<value>圖片</value>
</data>
<data name="MaxRefreshTooltip" xml:space="preserve">
<value>更高的更新率和更低延遲</value>
</data>
<data name="MinRefreshTooltip" xml:space="preserve">
<value>維持60Hz以節省電量</value>
</data>
<data name="Multizone" xml:space="preserve">
<value>多區域</value>
</data>
<data name="OpenGHelper" xml:space="preserve">
<value>打開G-Helper視窗</value>
</data>
<data name="Optimized" xml:space="preserve">
<value>自動模式</value>
</data>
<data name="OptimizedGPUTooltip" xml:space="preserve">
<value>使用電池切換到節能模式,插入電源時切換到標準模式</value>
</data>
<data name="Other" xml:space="preserve">
<value>其他</value>
</data>
<data name="Overdrive" xml:space="preserve">
<value>OD</value>
</data>
<data name="PerformanceMode" xml:space="preserve">
<value>性能模式:</value>
</data>
<data name="PictureGif" xml:space="preserve">
<value>圖片/動圖</value>
</data>
<data name="PlayPause" xml:space="preserve">
<value>播放/暫停</value>
</data>
<data name="PowerLimits" xml:space="preserve">
<value>功率限制 (PPT)</value>
</data>
<data name="PPTExperimental" xml:space="preserve">
<value>功率限制 (PPT) 是實驗性功能。 謹慎使用,風險自負!</value>
</data>
<data name="PrintScreen" xml:space="preserve">
<value>截圖</value>
</data>
<data name="Quit" xml:space="preserve">
<value>退出</value>
</data>
<data name="RPM" xml:space="preserve">
<value>每分鐘轉數</value>
</data>
<data name="RunOnStartup" xml:space="preserve">
<value>開機自動開啟</value>
</data>
<data name="Shutdown" xml:space="preserve">
<value>關機時</value>
</data>
<data name="Silent" xml:space="preserve">
<value>安静模式</value>
</data>
<data name="Sleep" xml:space="preserve">
<value>睡眠時</value>
</data>
<data name="StandardGPUTooltip" xml:space="preserve">
<value>標準模式會啟用獨顯</value>
</data>
<data name="StandardMode" xml:space="preserve">
<value>標準模式</value>
</data>
<data name="StartupError" xml:space="preserve">
<value>啟動錯誤</value>
</data>
<data name="ToggleAura" xml:space="preserve">
<value>切換Aura</value>
</data>
<data name="Turbo" xml:space="preserve">
<value>極速模式</value>
</data>
<data name="TurnedOff" xml:space="preserve">
<value>已關閉</value>
</data>
<data name="TurnOffOnBattery" xml:space="preserve">
<value>電池模式時關閉</value>
</data>
<data name="UltimateGPUTooltip" xml:space="preserve">
<value>開啟獨顯直連獲得最佳幀數</value>
</data>
<data name="UltimateMode" xml:space="preserve">
<value>獨顯直連</value>
</data>
<data name="VersionLabel" xml:space="preserve">
<value>版本</value>
</data>
<data name="VolumeMute" xml:space="preserve">
<value>靜音</value>
</data>
<data name="WindowTop" xml:space="preserve">
<value>視窗置頂</value>
</data>
</root>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
app/Resources/itsfine.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -202,10 +202,10 @@ namespace GHelper
buttonMatrix.FlatAppearance.BorderSize = 0;
buttonMatrix.FlatStyle = FlatStyle.Flat;
buttonMatrix.Location = new Point(518, 8);
buttonMatrix.Margin = new Padding(4, 8, 4, 8);
buttonMatrix.Margin = new Padding(4, 7, 4, 7);
buttonMatrix.Name = "buttonMatrix";
buttonMatrix.Secondary = true;
buttonMatrix.Size = new Size(249, 44);
buttonMatrix.Size = new Size(249, 45);
buttonMatrix.TabIndex = 43;
buttonMatrix.Text = Properties.Strings.PictureGif;
buttonMatrix.UseVisualStyleBackColor = false;
@@ -380,7 +380,7 @@ namespace GHelper
picturePerf.BackgroundImage = (Image)resources.GetObject("picturePerf.BackgroundImage");
picturePerf.BackgroundImageLayout = ImageLayout.Zoom;
picturePerf.InitialImage = null;
picturePerf.Location = new Point(24, 20);
picturePerf.Location = new Point(24, 18);
picturePerf.Margin = new Padding(4);
picturePerf.Name = "picturePerf";
picturePerf.Size = new Size(32, 32);
@@ -402,7 +402,7 @@ namespace GHelper
//
labelCPUFan.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelCPUFan.Cursor = Cursors.Hand;
labelCPUFan.Location = new Point(384, 15);
labelCPUFan.Location = new Point(384, 18);
labelCPUFan.Margin = new Padding(8, 0, 8, 0);
labelCPUFan.Name = "labelCPUFan";
labelCPUFan.Size = new Size(400, 36);
@@ -544,7 +544,7 @@ namespace GHelper
labelTipGPU.Location = new Point(24, 191);
labelTipGPU.Margin = new Padding(4, 0, 4, 0);
labelTipGPU.Name = "labelTipGPU";
labelTipGPU.Size = new Size(720, 36);
labelTipGPU.Size = new Size(760, 36);
labelTipGPU.TabIndex = 20;
labelTipGPU.Text = " ";
//
@@ -726,7 +726,7 @@ namespace GHelper
labelTipScreen.Location = new Point(20, 135);
labelTipScreen.Margin = new Padding(4, 0, 4, 0);
labelTipScreen.Name = "labelTipScreen";
labelTipScreen.Size = new Size(724, 36);
labelTipScreen.Size = new Size(760, 36);
labelTipScreen.TabIndex = 24;
//
// tableScreen
@@ -900,7 +900,7 @@ namespace GHelper
comboKeyboard.Location = new Point(4, 10);
comboKeyboard.Margin = new Padding(4, 10, 4, 8);
comboKeyboard.Name = "comboKeyboard";
comboKeyboard.Size = new Size(249, 40);
comboKeyboard.Size = new Size(249, 44);
comboKeyboard.TabIndex = 35;
comboKeyboard.TabStop = false;
//
@@ -912,15 +912,15 @@ namespace GHelper
panelColor.Controls.Add(buttonKeyboardColor);
panelColor.Dock = DockStyle.Fill;
panelColor.Location = new Point(261, 8);
panelColor.Margin = new Padding(4, 8, 4, 8);
panelColor.Margin = new Padding(4, 7, 4, 7);
panelColor.Name = "panelColor";
panelColor.Size = new Size(249, 44);
panelColor.Size = new Size(249, 45);
panelColor.TabIndex = 36;
//
// pictureColor2
//
pictureColor2.Anchor = AnchorStyles.Top | AnchorStyles.Right;
pictureColor2.Location = new Point(188, 12);
pictureColor2.Location = new Point(188, 13);
pictureColor2.Margin = new Padding(8);
pictureColor2.Name = "pictureColor2";
pictureColor2.Size = new Size(20, 20);
@@ -930,7 +930,7 @@ namespace GHelper
// pictureColor
//
pictureColor.Anchor = AnchorStyles.Top | AnchorStyles.Right;
pictureColor.Location = new Point(215, 12);
pictureColor.Location = new Point(215, 13);
pictureColor.Margin = new Padding(8);
pictureColor.Name = "pictureColor";
pictureColor.Size = new Size(20, 20);
@@ -947,10 +947,10 @@ namespace GHelper
buttonKeyboardColor.FlatStyle = FlatStyle.Flat;
buttonKeyboardColor.ForeColor = SystemColors.ControlText;
buttonKeyboardColor.Location = new Point(0, 0);
buttonKeyboardColor.Margin = new Padding(4, 8, 4, 8);
buttonKeyboardColor.Margin = new Padding(4, 7, 4, 7);
buttonKeyboardColor.Name = "buttonKeyboardColor";
buttonKeyboardColor.Secondary = false;
buttonKeyboardColor.Size = new Size(249, 44);
buttonKeyboardColor.Size = new Size(249, 45);
buttonKeyboardColor.TabIndex = 39;
buttonKeyboardColor.Text = Properties.Strings.Color;
buttonKeyboardColor.UseVisualStyleBackColor = false;
@@ -965,10 +965,10 @@ namespace GHelper
buttonKeyboard.FlatAppearance.BorderSize = 0;
buttonKeyboard.FlatStyle = FlatStyle.Flat;
buttonKeyboard.Location = new Point(518, 8);
buttonKeyboard.Margin = new Padding(4, 8, 4, 8);
buttonKeyboard.Margin = new Padding(4, 7, 4, 7);
buttonKeyboard.Name = "buttonKeyboard";
buttonKeyboard.Secondary = true;
buttonKeyboard.Size = new Size(249, 44);
buttonKeyboard.Size = new Size(249, 45);
buttonKeyboard.TabIndex = 37;
buttonKeyboard.Text = Properties.Strings.Extra;
buttonKeyboard.UseVisualStyleBackColor = false;
@@ -988,7 +988,7 @@ namespace GHelper
//
labelKeyboard.AutoSize = true;
labelKeyboard.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelKeyboard.Location = new Point(60, 13);
labelKeyboard.Location = new Point(60, 14);
labelKeyboard.Margin = new Padding(8, 0, 8, 0);
labelKeyboard.Name = "labelKeyboard";
labelKeyboard.Size = new Size(210, 32);

View File

@@ -560,7 +560,7 @@ namespace GHelper
if (fans.Visible)
{
fans.Hide();
fans.Close();
}
else
{
@@ -873,6 +873,7 @@ namespace GHelper
public void SetPower()
{
int limit_total = Program.config.getConfigPerf("limit_total");
int limit_cpu = Program.config.getConfigPerf("limit_cpu");
@@ -900,11 +901,18 @@ namespace GHelper
}
public void AutoFans()
protected void LabelFansResult(string text)
{
if (fans != null && fans.Text != "")
fans.LabelFansResult(text);
}
public void AutoFans(bool force = false)
{
customFans = false;
if (Program.config.getConfigPerf("auto_apply") == 1)
if (Program.config.getConfigPerf("auto_apply") == 1 || force)
{
int cpuResult = Program.wmi.SetFanCurve(0, Program.config.getFanConfig(0));
int gpuResult = Program.wmi.SetFanCurve(1, Program.config.getFanConfig(1));
@@ -913,13 +921,18 @@ namespace GHelper
Program.wmi.SetFanCurve(2, Program.config.getFanConfig(2));
// something went wrong, resetting to default profile
if (cpuResult != 1 || gpuResult != 1)
if (cpuResult != 1 || gpuResult != 1)
{
int mode = Program.config.getConfig("performance_mode");
Logger.WriteLine("Driver rejected fan curve, resetting mode to " + mode);
Logger.WriteLine("ASUS BIOS rejected fan curve, resetting mode to " + mode);
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, mode, "PerformanceMode");
LabelFansResult("ASUS BIOS rejected fan curve");
}
else
{
LabelFansResult("");
customFans = true;
}
else customFans = true;
// fix for misbehaving bios on intell based TUF 2022
if ((Program.config.ContainsModel("FX507") || Program.config.ContainsModel("FX517")) && Program.config.getConfigPerf("auto_apply_power") != 1)
@@ -941,6 +954,13 @@ namespace GHelper
public void AutoPower(int delay = 0)
{
// fix for misbehaving bios PPTs on G513
if (Program.config.ContainsModel("G513") && Program.config.getConfigPerf("auto_apply") != 1)
{
AutoFans(true);
delay = 500;
}
customPower = 0;
if (Program.config.getConfigPerf("auto_apply_power") == 1)
@@ -1014,16 +1034,16 @@ namespace GHelper
AutoFans();
AutoPower(1000);
if (Program.config.getConfigPerf("auto_boost") != -1)
{
NativeMethods.SetCPUBoost(Program.config.getConfigPerf("auto_boost"));
}
if (Program.config.getConfigPerfString("scheme") is not null)
NativeMethods.SetPowerScheme(Program.config.getConfigPerfString("scheme"));
else
NativeMethods.SetPowerScheme(PerformanceMode);
if (Program.config.getConfigPerf("auto_boost") != -1)
{
NativeMethods.SetCPUBoost(Program.config.getConfigPerf("auto_boost"));
}
if (NativeMethods.PowerGetEffectiveOverlayScheme(out Guid activeScheme) == 0)
{
Debug.WriteLine("Effective :" + activeScheme);

View File

@@ -2,10 +2,12 @@
[![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total.svg)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub release](https://img.shields.io/github/release/seerge/g-helper.svg)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social&label=Star)](https://GitHub.com/seerge/g-helper/stargazers/)
## Lightweight Armoury Crate alternative for Asus laptops
### Control tool for ROG Zephyrus G14, G15, Flow X13, Flow X16, TUF, Strix, Scar and other models
Language: English | [中文](https://github.com/seerge/g-helper/blob/main/docs/README.zh-CN.md)
## Lightweight Armoury Crate alternative for Asus laptops
Control tool for ROG Zephyrus G14, G15, Flow X13, Flow X16, TUF, Strix, Scar and other models. A small utility that allows you to do almost everything you could do with Armoury Crate but without extra bloat and unnecessary services.
A small utility that allows you to do almost everything you could do with Armoury Crate but without extra bloat and unnecessary services.
## :gift: Main advantages
@@ -21,7 +23,7 @@ If you like this app, please [star :star: it on Github](https://github.com/seerg
_If you post about the app - please include a link. Thanks._
![Screenshot 2023-03-30 115149](https://user-images.githubusercontent.com/5920850/228799078-bc93148f-6580-4319-b9e6-fbde4d246cd2.png)
![Screenshot 2023-04-13 190951](https://user-images.githubusercontent.com/5920850/231859391-c4963af4-491c-4523-95d4-0bdcfd7cfd6f.png)
### :zap: Main features
@@ -53,7 +55,7 @@ Modes are **same** as in Armoury Crate as they are stored in bios including defa
_PPTs are shown for G14 2022, for other models PPTs will be different as they are set in bios._
![Screenshot 2023-04-06 142234](https://user-images.githubusercontent.com/5920850/230377635-7032a480-3a94-4e35-9468-d8911e3e55ec.png)
![Screenshot 2023-04-13 191030](https://user-images.githubusercontent.com/5920850/231859519-3cfa40f1-b06e-4cdb-b3e8-5187521ce208.png)
### :video_game: GPU Modes
@@ -64,41 +66,52 @@ _PPTs are shown for G14 2022, for other models PPTs will be different as they ar
## :question: FAQ
### How do I stop the Armory Crate install popup appearing every time I press the M4 / Rog key?
#### How do I stop the Armory Crate install popup appearing every time I press the M4 / Rog key?
Delete or move somewhere following file ``C:\Windows\System32\ASUSACCI\ArmouryCrateKeyControl.exe``.
If it still appears - Go to BIOS (F2 on boot), open Advanced Settings and disable "Armory Control Interface".
### Why is Ultimate GPU mode not available on my laptop?
#### Why is Ultimate GPU mode not available on my laptop?
Ultimate mode is supported (by hardware) only on G14 2022 (and possibly other models from 2022+)
### I can't set Eco mode (disable dGPU) on my G14 2020
#### I can't set Eco mode (disable dGPU) on my G14 2020
Unfortunately 2020 model doesn't support that on hardware level
### Should I apply custom PPTs and fan profiles?
#### Should I apply custom PPTs and fan profiles?
You don't have to, it's purely optional. From my experience built in (in bios) performance modes work well. Limit your power or apply custom fan curves only if you have issues. As soon as you click Apply in the fan + power section bios will be considering the fan profile as "custom"! (no matter if you modified it or not)
### How does G-helper control my fan speeds?
#### How does G-helper control my fan speeds?
It doesn't. Your bios does (same as in case with armoury). What G-helper can do - is (optionally) set a custom fan profile to current performance mode consisting of 8 pairs of temperature + fan speed % via same endpoint armoury seem to use.
### How do I change fan % to fan RPM?
#### How do I change fan % to fan RPM?
Click on them
### I don't see a GPU temperature in G-helper
#### I don't see a GPU temperature in G-helper
Most probably either you are using Eco / Optimized mode and your dGPU is simply off, or your windows has put the dGPU into sleep (to preserve power). In this situations G-helper won't be able to reach your GPU and get readings
### It says, that app is already running
#### It says, that app is already running
Please check system tray for a (G) icon. By default windows is keen to hide all icons, so you may need to click ^ to see them all. I would advise to right click on Task Bar select Task Bar Settings -> Other System Tray icons -> Mark G-Helper to be always ON.
### App doesn't start / or crashes, what should I do ?
#### App doesn't start / or crashes, what should I do ?
Open "Event Viewer" from start menu, go to Windows Logs -> Application and check for recent Errors mentioning G-Helper. If you see one - please post a [new issue](https://github.com/seerge/g-helper/issues) with all details from this error.
### Can I use MyASUS app along with G-Helper?
#### Can I use MyASUS app along with G-Helper?
Sure, you can! The only problem is that MyASUS may override the battery charge limit that you set before. My advice in such a situation would be to set the same limit (i.e. 80%) in both MyASUS and G-Helper.
### How do I uninstall G-helper?
#### How do I set Mute Microphone to M3?
This function is handled by Asus Optimization Service (therefore G-helper doesn't interfere and doesn't touch this function). Make sure that this service is up and running
#### How do I set different "Visual styles"?
Personally, i'm not a big fan of them, as they make colors very inaccurate. But if you want so - you can adjust display colors using either Nvidia Control panel or AMD Adrenaline (appropriate display sections). If you really want you can also use [own ASUS utility from MS Store](https://apps.microsoft.com/store/detail/gamevisual/9P4K1LFTXSH8?hl=nl-nl&gl=nl&rtc=1)
#### How do I uninstall G-helper?
G-helper is a single exe, and it doesn't install anything in the system. To remove it - you can simply delete exe :) If you have applied any custom fan profiles or PPTs - before removing I would recommend selecting your favorite performance mode (for example balanced) and clicking "Factory defaults" under Fans + Power.
#### What is G-helper ?
It's a lightweight Armoury Crate alternative for Asus laptops. A small utility that allows you to do almost everything you could do with Armoury Crate but without extra bloat and unnecessary services.
----------------------------
### How to install
@@ -107,16 +120,18 @@ G-helper is a single exe, and it doesn't install anything in the system. To remo
2. Unzip to a folder of your choice
3. Run **GHelper.exe**
### Dependencies & Requirements
### Requirements (mandatory)
- Microsoft [.NET7](https://dotnet.microsoft.com/en-us/download). Most probably you already have it. Otherwise you can [download it](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/sdk-7.0.202-windows-x64-installer) from the official website.
- [Asus System Control Interface](https://dlcdnets.asus.com/pub/ASUS/nb/Image/CustomComponent/ASUSSystemControlInterfaceV3/ASUSSystemControlInterfaceV3.exe). If you have or had MyASUS app installed this "driver" probably still in place (even after MyASUS uninstalls). Alternatively - you can download and install it
- Optionally(!) you can disable / remove unnecessary services by running [this debloat bat file](https://raw.githubusercontent.com/seerge/g-helper/main/debloat.bat) as admin. To restore services - run [this bloat bat file](https://raw.githubusercontent.com/seerge/g-helper/main/bloat.bat) instead.
### Recommendations (optional)
- I recommend keeping "Asus Optimization Service" running, as it keeps basic laptop hotkeys such as screen or keyboard brightness adjustment working.
- Optionally(!) you can disable / remove unnecessary services by running [this debloat bat file](https://raw.githubusercontent.com/seerge/g-helper/main/debloat.bat) as admin. To restore services - run [this bloat bat file](https://raw.githubusercontent.com/seerge/g-helper/main/bloat.bat) instead.
- It's not recommended to use an app in combination with Armoury Crate services, because they adjust the same settings. You can [uninstall it using it's own uninstall tool](https://dlcdnets.asus.com/pub/ASUS/mb/14Utilities/Armoury_Crate_Uninstall_Tool.zip?model=armoury%20crate). Just in case, you can always install it back later.
-------------------------------
@@ -139,7 +154,7 @@ Debloating helps to save your battery and keep laptop a bit cooler
### Custom power plans with each mode
In config.json (under ``%appdata/GHelper``) you can manually add custom power plan GUID (it can be either "real" power plan that can be switched or "overlay" power plan like the ones g-helper sets by default)
In config.json (under ``%AppData%\GHelper``) you can manually add custom power plan GUID (it can be either "real" power plan that can be switched or "overlay" power plan like the ones g-helper sets by default)
Format is following : ``"scheme_<mode>" : "GUID" ``
@@ -152,6 +167,18 @@ Where ``mode = 0 (balanced), 1 (turbo), 2 (silent)``
Make sure to keep json structure (i.e. not to break it with extra or missing comas, etc) - or app will fail to read it and will just recreate a new config instead.
### Custom hotkey actions
App supports custom actions for M3, M4 and FN+F4 hotkeys. To set them select "Custom" next to appropriate hotkey and do one of the following:
1. To run any custom application - put a full path to exe into "action" text field, for example:
``C:\Program Files\EA Games\Battlefield 2042\BF2042.exe``
2. To simulate any windows key - put appropriate keycode into "action" field, for example ``0x2C`` for Print screen.
Full list of keycodes https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
![Screenshot 2023-04-13 172537](https://user-images.githubusercontent.com/5920850/231837470-df913847-cf8a-43e1-80b6-5eb6e9eaee4e.png)
------------
**Disclaimers**
"ROG", "TUF", and "Armoury Crate" are trademarked by and belong to AsusTek Computer, Inc. I make no claims to these or any assets belonging to AsusTek Computer and use them purely for informational purposes only.

161
docs/README.zh-CN.md Normal file
View File

@@ -0,0 +1,161 @@
# G-Helper (GHelper)
[![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total.svg)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub release](https://img.shields.io/github/release/seerge/g-helper.svg)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social&label=Star)](https://GitHub.com/seerge/g-helper/stargazers/)
语言: [English](https://github.com/seerge/g-helper#readme) | 中文
## 为ASUS笔记本打造的、Armoury Crate(奥创控制中心)的轻量化替代品
### 可作为ROG 幻14、幻15幻13、幻16飞行堡垒/天选系列ROG 枪神/魔霸系列或其他ASUS笔记本的控制工具
这是一个实用程序可以做到几乎所有Armoury Crate(奥创控制中心)能做的事情,而且不需要任何多余的功能或安装不必要的系统服务。
## :gift: 主要优点
1. 自动且无缝的独立显卡模式切换(不需要关闭所有应用或别的要求)
2. 可以完全手动调整所有的性能模式包括自定义风扇曲线以及PPTs(CPU/GPU功耗控制)
3. 极致的轻量化几乎不消耗任何资源不需要安装系统服务。只需要下载一个exe文件就可以运行。
4. 简洁的界面设计,可以轻松调整所有设置。
5. 运行不需要管理员权限!
## [:floppy_disk: 下载应用](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
如果你喜欢这个应用,请给这个项目 [:star: 在Github上Star](https://github.com/seerge/g-helper) 或者向别人推荐它!
_如果你在别的地方提到这个软件-请记得加上这个项目的网址。十分感谢。_
![Screenshot 2023-04-11 221528](https://user-images.githubusercontent.com/5920850/231278828-9bb7f5c3-4ce6-4825-b06d-572f39d3ede8.png)
### :zap: 主要功能
1. **性能模式**: 静音 - 平衡/性能 - 增强 (内置的性能模式,附带默认的风扇曲线)
2. **显卡模式**: 集显模式 - 混合输出 - 独显输出 - 自动切换
3. 笔记本屏幕刷新率 60hz 或 120hz 自动调节(或者 144hz 等刷新率)包括屏幕Overdrive(OD,即ROG系列的屏幕快速响应/快显)功能
4. 可调节的风扇曲线、电源功耗设置(PPT)(_注:请谨慎调节!_)和CPU睿频选项
5. ROG Anime matrix 光显矩阵屏控制, 感谢项目 [Starlight](https://github.com/vddCore/Starlight) + 应用侧的一些调整包括动画GIF图片
6. 键盘灯光效果和颜色设置 (包括睡眠模式下的灯光效果和对飞行堡垒/天选系列的键盘支持)
7. 对 M3, M4 按键的自定义设置和 FN+F5 快捷键(性能模式切换 FN+F4快捷键(键盘灯光效果切换)
8. CPU/GPU温度、风扇转速和电池充放电功率先生
9. 电池充电上限设置,保护电池健康度
### :gear: 当使用电池供电或插上电源时,自动切换:
- 性能模式 (软件会记住上一次使用电池或插上电源时的电源模式)
- 自动切换独立显卡模式 - 使用电池时停用独显,并在插上电源时重新启用
- 自动切换屏幕刷新率 (使用电池时切换为 60hz,插入电源后切换为 120+ hz)
- 使用电池时键盘背光可自动关闭
为了保证自动切换功能和按键绑定功能的正常工作,软件需要在后台运行并显示一个托盘图标。这并不会消耗任何资源。
### :rocket: 性能模式
性能模式与 Armoury Crate(奥创控制中心)中的 **保持一致**因为这些设置与其对应的风扇曲线都被保存在bios中
1. 静音 (风扇转速最小或完全停转, 70W 总功耗(PPT), 其中 CPU 最高 45W(PPT)) + windows电源模式设置为最长续航/省电模式
2. 平衡/性能 (平衡模式的风扇曲线设置, 100W 总功耗(PPT), 其中 CPU 最高 45W(PPT)) + windows电源模式设置为平衡
3. 增强 (激进的风扇曲线设置, 125W 总功耗(PPT), 其中 CPU 最高 80W(PPT)) + windows电源模式设置为高性能/最佳性能
_PPTs 默认在 幻14 2022版上显示, 对于其他型号 PPTs 的显示将会有所变化因为它们在bios中的设置不同。_
![Screenshot 2023-04-06 142234](https://user-images.githubusercontent.com/5920850/230377635-7032a480-3a94-4e35-9468-d8911e3e55ec.png)
### :video_game: 显卡模式
1. 集显模式 : 只启用低功耗的内置显卡, 核显连接笔电内置屏幕
2. 混合输出 (MS Hybrid) : 同时启用核显与独显, 核显连接笔电内置屏幕
3. 独显输出: 同时启用核显与独显, 但独显直连笔电屏幕 (仅在幻14 2022版等机型上支持)
4. 自动切换: 使用电池时关闭独显(集显模式),并在插上电源后重新启用独显(混合输出)
## :question: 常见问题解答(FAQ)
### 当我按下 M4 / Rog键的时候总是弹出安装Armoury Crate的弹窗提示我该如何关闭它?
删除下列文件或者把它移动(剪切+粘贴)到别的目录 ``C:\Windows\System32\ASUSACCI\ArmouryCrateKeyControl.exe``.
如果还是出现弹窗 - 进入 BIOS (开机时按住 F2), 按照屏幕下方的快捷键提示进入 Advanced Settings,然后关闭 "Armoury Crate Control Interface" (把它设置为disabled)。
### 为什么我的笔记本不支持独显输出?
独显输出只在幻14 2022版上支持(也可能支持2022年以来的其他机型)。
### 我无法在幻14 2020版上设置集显模式(关闭独显)
很不幸2020版的机型在硬件上不支持这个设置。
### 我是否应该自行调整功耗设置和风扇曲线?
你可以不那么做,这些操作是可选的。按照经验(bios)内置的性能模式工作的很好。请只在遇到问题的时候限制功耗或者手动设置风扇模式。当你在风扇与功率设置中按下“应用”时bios将会认为风扇配置文件为“自定义”! (无论你是否真的修改了风扇曲线)
### G-helper是如何控制我的风扇转速的?
软件并不会修改风扇转速。这个设置实际上由bios控制(与Armoury Crate的情况相同)。G-helper 所能做的 - 就是将一个自定义的风扇配置(可选地)应用到正在使用的性能模式其中包括8组温度+风扇速度的百分比数值%。软件通过与Armoury Crate看起来相同的WMI endpoint来应用这一设置
### 我如何把风扇转速显示从百分比%切换到RPM(每分钟转速)?
点击一下百分比即可切换。
### 我没有在G-helper中看到独显温度
很可能要么你正在使用核显模式/自动切换模式这种情况下独显只是关闭了或者你的windows系统为独显设置了睡眠模式(为了省电)。这种情况下G-helper无法识别到独显也不能获得温度读数。
### 弹窗提示"G-Helper已经在运行"
请在系统托盘里找到 (G) 图标。windows会默认隐藏所有图标所以你可能需要点击 ^ 来看见它们。建议任务栏右键进入任务栏设置 -> 其他系统图标 -> 将 G-Helper 设置为始终在任务栏上显示。
### 应用不能启动或者崩溃了,我该怎么做?
从开始菜单里打开“事件管理器”, 进入 Windows日志 -> 应用然后在最近的错误日志里寻找包含G-helper的日志。如果你找到一个 - 请提出一个 [新的 issue](https://github.com/seerge/g-helper/issues) ,其中包含来自这次错误的所有的详细信息。
### 我可以在用G-Helper的时候同时用myASUS吗?
当然可以! 唯一的问题是myASUS可能会重置你之前在g-helper里设置的电池充电上限。在这种情况下建议你在这两个应用(myASUS和g-helper)里设置相同的充电上限(60%/80%/100%)以避免冲突。
### 我该如何卸载G-helper?
G-helper是一个单文件的exe文件, 而且它不会向系统中安装任何东西。如果要“卸载”它 - 你可以直接删除exe文件 :) 如果你已经设置了自定义的风扇配置或者功耗设置(PPTs) - 在删除软件之前建议你选择你最喜欢的配置模式(比如"平衡"),然后在“风扇与电源设置”里点击“恢复默认设置”。
----------------------------
### 安装指南
1. 从 [**Releases Page**](https://github.com/seerge/g-helper/releases) 下载最新版本
2. 解压到你选择的文件夹
3. 运行 **GHelper.exe**
### 依赖软件及运行要求
- Microsoft [.NET7](https://dotnet.microsoft.com/en-us/download)。 你可能已经安装了。 如果没有的话你可以从官方网站 [立即下载](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/sdk-7.0.202-windows-x64-installer)。
- [Asus System Control Interface](https://dlcdnets.asus.com/pub/ASUS/nb/Image/CustomComponent/ASUSSystemControlInterfaceV3/ASUSSystemControlInterfaceV3.exe)。 如果你安装了或者安装过myASUS, 那么这个"驱动"应当已经安装(即使myASUS已经卸载)。 或者你可以手动下载安装。
- 可选选项(!) 你可以通过在管理员模式下运行 [这个用于精简的.bat文件](https://raw.githubusercontent.com/seerge/g-helper/main/debloat.bat)来禁用/移除不必要的服务。如果要恢复这些服务,运行 [这个.bat文件](https://raw.githubusercontent.com/seerge/g-helper/main/bloat.bat)。
- 推荐保持 "Asus Optimization Service" 这个windows服务的运行, 它保证基本的键盘快捷键(比如屏幕或键盘亮度)能够使用。
-不建议同时运行这个应用与Armoury Crate(及其服务), 因为它们调整的设置是相同的。你可以[使用ASUS官方提供的卸载工具卸载](https://dlcdnets.asus.com/pub/ASUS/mb/14Utilities/Armoury_Crate_Uninstall_Tool.zip?model=armoury%20crate)。以防万一,你总是可以之后再安装回来。
-------------------------------
为Asus ROG 幻14 2022 (配置了AMD核显和独显)设计和开发。但应当可能在幻14 2021和2020款, 幻15, X FLOW, 以及其他的ROG机型上使用相关且支持的功能。
我并没有microsoft证书来为这个应用签名所以如果你在启动时看到windows defender的警告(windows 保护了你的电脑),点击“更多详情” -> 继续运行(不推荐)。作为可选选项,你也可以使用 visual studio自行编译然后运行这个项目 :)
设置文件保存在 ``%AppData%\GHelper``
------------------
精简你的windows可以帮助延长电池的使用时间同时让笔电的温度更低一些
![Helps to save your battery](https://raw.githubusercontent.com/seerge/g-helper/main/docs/screenshots/screen-5w.png)
---------
## 高级用户设置
### 为每一个模式自定义用户计划
在 config.json (位于 %appdata/GHelper) 中你可以手动添加自定义电源设置的GUID (它既可以是"真正的"可被选择的电源计划,也可以是"覆盖式(overlay)"的电源计划就像g-helper默认设置的那样)
格式 : "scheme_<mode>" : "GUID"
Where mode = 0 (balanced), 1 (turbo), 2 (silent)
"scheme_0": "2ac1d0e0-17a7-44ed-8091-d88ef75a4eb0",
"scheme_1": "381b4222-f694-41f0-9685-ff5bb260df2e"
确保修改时保证json文件的结构 (也就是不要增减逗号等打乱配置的操作) - 否则应用会读取失败,并将重新创建一个新的配置文件来替代它。
------------
_注:请务必参考下方 **免责声明** 原文,以避免或减小错误或不恰当之翻译引起的负面影响。翻译仅为便于阅读之目的,不具有法律效力,亦不作为发生争端时处理之依据。_
**Disclaimers**
"ROG", "TUF", and "Armoury Crate" are trademarked by and belong to AsusTek Computer, Inc. I make no claims to these or any assets belonging to AsusTek Computer and use them purely for informational purposes only.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. MISUSE OF THIS SOFTWARE COULD CAUSE SYSTEM INSTABILITY OR MALFUNCTION.