Compare commits

..

26 Commits
0.80 ... v0.82

Author SHA1 Message Date
Serge
6b04ffa172 Version bump 2023-06-09 21:55:47 +02:00
Serge
15e4310016 Clock fix 2023-06-09 21:53:31 +02:00
Serge
3abe924525 Merge branch 'main' of https://github.com/seerge/g-helper 2023-06-09 21:29:02 +02:00
Serge
691f187b7d Improved backlight sync with optimization service 2023-06-09 21:28:59 +02:00
Serge
8e4c0dada7 Update README.md 2023-06-09 15:44:13 +02:00
Serge
f535818fb0 Update README.md 2023-06-09 14:14:21 +02:00
Serge
ce75d2c778 Update README.md 2023-06-09 12:45:08 +02:00
Serge
c755213472 Merge pull request #573 from hellotale/patch-2
Update and fix Korean translation
2023-06-08 14:57:01 +02:00
hellotale
60e8712131 Update and rename Strings.kr.resx to Strings.ko.resx 2023-06-08 21:30:24 +09:00
Serge
2c817b46ef Merge branch 'main' of https://github.com/seerge/g-helper 2023-06-08 13:20:28 +02:00
Serge
e16f612311 Driver updater fix 2023-06-08 13:20:26 +02:00
Serge
4ce4b4bbf7 Update README.md 2023-06-08 12:03:13 +02:00
Serge
f9303ced8a Merge pull request #570 from marcelomijas/main
Spanish translation fix for "Updates" + more
2023-06-08 11:55:28 +02:00
Serge
f000a03395 Update README.md 2023-06-08 11:51:30 +02:00
Marcelo Moreno
90205e9231 Start/stop Spanish translation 2023-06-08 11:51:26 +02:00
Marcelo Moreno
e65270c961 Spanish translation fix for "Updates" 2023-06-08 11:34:13 +02:00
Serge
306dfe2bd7 XGM button fix 2023-06-08 11:17:06 +02:00
Serge
ca7dfff357 Merge branch 'main' of https://github.com/seerge/g-helper 2023-06-07 22:52:05 +02:00
Serge
59288b9422 Integrated debloater 2023-06-07 22:52:04 +02:00
Serge
46ff8deb44 Merge pull request #558 from marcelomijas/main
Update Spanish translation
2023-06-07 22:21:51 +02:00
Marcelo Moreno
e6e8877531 Update Spanish translation 2023-06-07 21:48:57 +02:00
Serge
b13306b989 Added brightness control to M-hotkeys 2023-06-07 16:34:40 +02:00
Serge
838dc039ac Merge branch 'main' of https://github.com/seerge/g-helper 2023-06-07 15:16:34 +02:00
Serge
0702f95e0c Driver Updater improvements 2023-06-07 15:16:32 +02:00
Serge
f42fcf2f73 Merge pull request #554 from hellotale/patch-1
Add Korean translation
2023-06-07 12:07:15 +02:00
hellotale
6a7e1ddaa3 Add Korean translation 2023-06-07 16:25:57 +09:00
25 changed files with 1171 additions and 282 deletions

View File

@@ -369,7 +369,7 @@ namespace Starlight.AnimeMatrix
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.AntiAlias;
using (Font font = new Font("Consolas", 24F, FontStyle.Regular, GraphicsUnit.Pixel))
using (Font font = new Font("Consolas", 21F, FontStyle.Regular, GraphicsUnit.Pixel))
{
SizeF textSize = g.MeasureString(text1, font);
g.DrawString(text1, font, Brushes.White, (MaxColumns * 3 - textSize.Width) + 3, -4);

View File

@@ -63,22 +63,6 @@ public static class AppConfig
return (_model is not null && _model.ToLower().Contains(contains.ToLower()));
}
public static string GetModelShort()
{
GetModel();
if (_model is not null)
{
int trim = _model.LastIndexOf("_");
if (trim > 0) return _model.Substring(trim+1);
trim = _model.LastIndexOf(" ");
if (trim > 0) return _model.Substring(trim + 1);
return _model;
}
return "";
}
private static void initConfig()
{

View File

@@ -34,8 +34,16 @@ public class AsusACPI
const uint INIT = 0x54494E49;
public const uint UniversalControl = 0x00100021;
public const int KB_Light_Up = 0xc4;
public const int KB_Light_Down = 0xc5;
public const int Brightness_Down = 0x10;
public const int Brightness_Up = 0x20;
public const int KB_Sleep = 0x6c;
public const int KB_DUO_PgUpDn = 0x4B;
public const int KB_DUO_SecondDisplay = 0x6A;
public const int Touchpad_Toggle = 0x6B;
public const int ChargerMode = 0x0012006C;
@@ -65,10 +73,10 @@ public class AsusACPI
public const int Temp_CPU = 0x00120094;
public const int Temp_GPU = 0x00120097;
public const int PPT_TotalA0 = 0x001200A0; // SPL (Total limit for all-AMD models)
public const int PPT_TotalA0 = 0x001200A0; // SPL (Total limit for all-AMD models) / PL1
public const int PPT_EDCA1 = 0x001200A1; // CPU EDC
public const int PPT_TDCA2 = 0x001200A2; // CPU TDC
public const int PPT_APUA3 = 0x001200A3; // sPPT (long boost limit)
public const int PPT_APUA3 = 0x001200A3; // sPPT (long boost limit) / PL2
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)
@@ -420,6 +428,7 @@ public class AsusACPI
return DeviceGet(PPT_CPUB0) >= 0 && DeviceGet(PPT_GPUC0) < 0;
}
/*
public void ScanRange()
{
int value;
@@ -437,6 +446,7 @@ public class AsusACPI
}
}
*/
public void TUFKeyboardBrightness(int brightness)
{

View File

@@ -124,7 +124,8 @@ namespace GHelper
_modes.Remove(3);
}
if (AppConfig.ContainsModel("G513QY")) {
if (AppConfig.ContainsModel("G513QY"))
{
return _modes;
}
@@ -260,18 +261,31 @@ namespace GHelper
{
byte[] msg = { AURA_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness };
byte[] msgBackup = { INPUT_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness };
var devices = GetHidDevices(deviceIds);
var devices = GetHidDevices(deviceIds, 0);
foreach (HidDevice device in devices)
{
device.OpenDevice();
device.WriteFeatureData(msg);
Logger.WriteLine(log + ":" + BitConverter.ToString(msg));
if (device.ReadFeatureData(out byte[] data, AURA_HID_ID))
{
device.WriteFeatureData(msg);
Logger.WriteLine(log + ":" + BitConverter.ToString(msg));
}
if (AppConfig.ContainsModel("GA503") && device.ReadFeatureData(out byte[] dataBackkup, INPUT_HID_ID))
{
device.WriteFeatureData(msgBackup);
Logger.WriteLine(log + ":" + BitConverter.ToString(msgBackup));
}
device.CloseDevice();
}
// Backup payload for old models
if (AppConfig.ContainsModel("503"))
/*
if (AppConfig.ContainsModel("GA503RW"))
{
byte[] msgBackup = { INPUT_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness };
@@ -283,6 +297,7 @@ namespace GHelper
device.CloseDevice();
}
}
*/
});

139
app/Extra.Designer.cs generated
View File

@@ -93,6 +93,9 @@ namespace GHelper
checkVariBright = new CheckBox();
checkGpuApps = new CheckBox();
checkFnLock = new CheckBox();
panelServices = new Panel();
labelServices = new Label();
buttonServices = new RButton();
groupBindings.SuspendLayout();
tableKeys.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureHelp).BeginInit();
@@ -104,6 +107,7 @@ namespace GHelper
panelXMG.SuspendLayout();
tableBacklight.SuspendLayout();
groupOther.SuspendLayout();
panelServices.SuspendLayout();
SuspendLayout();
//
// groupBindings
@@ -380,7 +384,7 @@ namespace GHelper
groupLight.Margin = new Padding(4, 2, 4, 2);
groupLight.Name = "groupLight";
groupLight.Padding = new Padding(4, 2, 4, 11);
groupLight.Size = new Size(966, 554);
groupLight.Size = new Size(966, 526);
groupLight.TabIndex = 1;
groupLight.TabStop = false;
groupLight.Text = "Keyboard Backlight";
@@ -398,15 +402,15 @@ namespace GHelper
panelBacklightExtra.Controls.Add(labelSpeed);
panelBacklightExtra.Controls.Add(comboKeyboardSpeed);
panelBacklightExtra.Dock = DockStyle.Top;
panelBacklightExtra.Location = new Point(4, 315);
panelBacklightExtra.Location = new Point(4, 299);
panelBacklightExtra.Margin = new Padding(4, 2, 4, 2);
panelBacklightExtra.Name = "panelBacklightExtra";
panelBacklightExtra.Size = new Size(958, 228);
panelBacklightExtra.Size = new Size(958, 216);
panelBacklightExtra.TabIndex = 43;
//
// numericBacklightPluggedTime
//
numericBacklightPluggedTime.Location = new Point(702, 181);
numericBacklightPluggedTime.Location = new Point(702, 169);
numericBacklightPluggedTime.Margin = new Padding(4, 2, 4, 2);
numericBacklightPluggedTime.Maximum = new decimal(new int[] { 3600, 0, 0, 0 });
numericBacklightPluggedTime.Name = "numericBacklightPluggedTime";
@@ -415,7 +419,7 @@ namespace GHelper
//
// labelBacklightTimeoutPlugged
//
labelBacklightTimeoutPlugged.Location = new Point(13, 183);
labelBacklightTimeoutPlugged.Location = new Point(13, 171);
labelBacklightTimeoutPlugged.Margin = new Padding(4, 0, 4, 0);
labelBacklightTimeoutPlugged.Name = "labelBacklightTimeoutPlugged";
labelBacklightTimeoutPlugged.Size = new Size(683, 45);
@@ -424,7 +428,7 @@ namespace GHelper
//
// numericBacklightTime
//
numericBacklightTime.Location = new Point(702, 132);
numericBacklightTime.Location = new Point(702, 120);
numericBacklightTime.Margin = new Padding(4, 2, 4, 2);
numericBacklightTime.Maximum = new decimal(new int[] { 3600, 0, 0, 0 });
numericBacklightTime.Name = "numericBacklightTime";
@@ -433,7 +437,7 @@ namespace GHelper
//
// labelBacklightTimeout
//
labelBacklightTimeout.Location = new Point(13, 134);
labelBacklightTimeout.Location = new Point(13, 122);
labelBacklightTimeout.Margin = new Padding(4, 0, 4, 0);
labelBacklightTimeout.Name = "labelBacklightTimeout";
labelBacklightTimeout.Size = new Size(683, 45);
@@ -452,7 +456,7 @@ namespace GHelper
// trackBrightness
//
trackBrightness.LargeChange = 1;
trackBrightness.Location = new Point(355, 60);
trackBrightness.Location = new Point(355, 59);
trackBrightness.Margin = new Padding(4, 2, 4, 2);
trackBrightness.Maximum = 3;
trackBrightness.Name = "trackBrightness";
@@ -462,7 +466,7 @@ namespace GHelper
//
// labelSpeed
//
labelSpeed.Location = new Point(13, 15);
labelSpeed.Location = new Point(13, 18);
labelSpeed.Margin = new Padding(4, 0, 4, 0);
labelSpeed.Name = "labelSpeed";
labelSpeed.Size = new Size(539, 41);
@@ -478,7 +482,7 @@ namespace GHelper
comboKeyboardSpeed.FormattingEnabled = true;
comboKeyboardSpeed.ItemHeight = 32;
comboKeyboardSpeed.Items.AddRange(new object[] { "Slow", "Normal", "Fast" });
comboKeyboardSpeed.Location = new Point(607, 15);
comboKeyboardSpeed.Location = new Point(607, 16);
comboKeyboardSpeed.Margin = new Padding(4, 11, 4, 9);
comboKeyboardSpeed.Name = "comboKeyboardSpeed";
comboKeyboardSpeed.Size = new Size(292, 40);
@@ -489,7 +493,7 @@ namespace GHelper
//
panelXMG.Controls.Add(checkXMG);
panelXMG.Dock = DockStyle.Top;
panelXMG.Location = new Point(4, 257);
panelXMG.Location = new Point(4, 241);
panelXMG.Margin = new Padding(4, 2, 4, 2);
panelXMG.Name = "panelXMG";
panelXMG.Size = new Size(958, 58);
@@ -545,7 +549,7 @@ namespace GHelper
tableBacklight.RowStyles.Add(new RowStyle());
tableBacklight.RowStyles.Add(new RowStyle());
tableBacklight.RowStyles.Add(new RowStyle());
tableBacklight.Size = new Size(958, 223);
tableBacklight.Size = new Size(958, 207);
tableBacklight.TabIndex = 41;
//
// labelBacklight
@@ -563,8 +567,8 @@ namespace GHelper
// checkAwake
//
checkAwake.Dock = DockStyle.Fill;
checkAwake.Location = new Point(4, 45);
checkAwake.Margin = new Padding(4, 2, 4, 2);
checkAwake.Location = new Point(4, 43);
checkAwake.Margin = new Padding(4, 0, 4, 0);
checkAwake.Name = "checkAwake";
checkAwake.Padding = new Padding(15, 2, 6, 2);
checkAwake.Size = new Size(231, 41);
@@ -575,8 +579,8 @@ namespace GHelper
// checkBoot
//
checkBoot.Dock = DockStyle.Fill;
checkBoot.Location = new Point(4, 90);
checkBoot.Margin = new Padding(4, 2, 4, 2);
checkBoot.Location = new Point(4, 84);
checkBoot.Margin = new Padding(4, 0, 4, 0);
checkBoot.Name = "checkBoot";
checkBoot.Padding = new Padding(15, 2, 6, 2);
checkBoot.Size = new Size(231, 41);
@@ -587,8 +591,8 @@ namespace GHelper
// checkSleep
//
checkSleep.Dock = DockStyle.Fill;
checkSleep.Location = new Point(4, 135);
checkSleep.Margin = new Padding(4, 2, 4, 2);
checkSleep.Location = new Point(4, 125);
checkSleep.Margin = new Padding(4, 0, 4, 0);
checkSleep.Name = "checkSleep";
checkSleep.Padding = new Padding(15, 2, 6, 2);
checkSleep.Size = new Size(231, 41);
@@ -599,8 +603,8 @@ namespace GHelper
// checkShutdown
//
checkShutdown.Dock = DockStyle.Fill;
checkShutdown.Location = new Point(4, 180);
checkShutdown.Margin = new Padding(4, 2, 4, 2);
checkShutdown.Location = new Point(4, 166);
checkShutdown.Margin = new Padding(4, 0, 4, 0);
checkShutdown.Name = "checkShutdown";
checkShutdown.Padding = new Padding(15, 2, 6, 2);
checkShutdown.Size = new Size(231, 41);
@@ -623,8 +627,8 @@ namespace GHelper
// checkAwakeLogo
//
checkAwakeLogo.Dock = DockStyle.Fill;
checkAwakeLogo.Location = new Point(243, 45);
checkAwakeLogo.Margin = new Padding(4, 2, 4, 2);
checkAwakeLogo.Location = new Point(243, 43);
checkAwakeLogo.Margin = new Padding(4, 0, 4, 0);
checkAwakeLogo.Name = "checkAwakeLogo";
checkAwakeLogo.Padding = new Padding(15, 2, 6, 2);
checkAwakeLogo.Size = new Size(231, 41);
@@ -635,8 +639,8 @@ namespace GHelper
// checkBootLogo
//
checkBootLogo.Dock = DockStyle.Fill;
checkBootLogo.Location = new Point(243, 90);
checkBootLogo.Margin = new Padding(4, 2, 4, 2);
checkBootLogo.Location = new Point(243, 84);
checkBootLogo.Margin = new Padding(4, 0, 4, 0);
checkBootLogo.Name = "checkBootLogo";
checkBootLogo.Padding = new Padding(15, 2, 6, 2);
checkBootLogo.Size = new Size(231, 41);
@@ -647,8 +651,8 @@ namespace GHelper
// checkSleepLogo
//
checkSleepLogo.Dock = DockStyle.Fill;
checkSleepLogo.Location = new Point(243, 135);
checkSleepLogo.Margin = new Padding(4, 2, 4, 2);
checkSleepLogo.Location = new Point(243, 125);
checkSleepLogo.Margin = new Padding(4, 0, 4, 0);
checkSleepLogo.Name = "checkSleepLogo";
checkSleepLogo.Padding = new Padding(15, 2, 6, 2);
checkSleepLogo.Size = new Size(231, 41);
@@ -659,8 +663,8 @@ namespace GHelper
// checkShutdownLogo
//
checkShutdownLogo.Dock = DockStyle.Fill;
checkShutdownLogo.Location = new Point(243, 180);
checkShutdownLogo.Margin = new Padding(4, 2, 4, 2);
checkShutdownLogo.Location = new Point(243, 166);
checkShutdownLogo.Margin = new Padding(4, 0, 4, 0);
checkShutdownLogo.Name = "checkShutdownLogo";
checkShutdownLogo.Padding = new Padding(15, 2, 6, 2);
checkShutdownLogo.Size = new Size(231, 41);
@@ -683,8 +687,8 @@ namespace GHelper
// checkAwakeBar
//
checkAwakeBar.Dock = DockStyle.Fill;
checkAwakeBar.Location = new Point(482, 45);
checkAwakeBar.Margin = new Padding(4, 2, 4, 2);
checkAwakeBar.Location = new Point(482, 43);
checkAwakeBar.Margin = new Padding(4, 0, 4, 0);
checkAwakeBar.Name = "checkAwakeBar";
checkAwakeBar.Padding = new Padding(15, 2, 6, 2);
checkAwakeBar.Size = new Size(231, 41);
@@ -695,8 +699,8 @@ namespace GHelper
// checkBootBar
//
checkBootBar.Dock = DockStyle.Fill;
checkBootBar.Location = new Point(482, 90);
checkBootBar.Margin = new Padding(4, 2, 4, 2);
checkBootBar.Location = new Point(482, 84);
checkBootBar.Margin = new Padding(4, 0, 4, 0);
checkBootBar.Name = "checkBootBar";
checkBootBar.Padding = new Padding(15, 2, 6, 2);
checkBootBar.Size = new Size(231, 41);
@@ -707,8 +711,8 @@ namespace GHelper
// checkSleepBar
//
checkSleepBar.Dock = DockStyle.Fill;
checkSleepBar.Location = new Point(482, 135);
checkSleepBar.Margin = new Padding(4, 2, 4, 2);
checkSleepBar.Location = new Point(482, 125);
checkSleepBar.Margin = new Padding(4, 0, 4, 0);
checkSleepBar.Name = "checkSleepBar";
checkSleepBar.Padding = new Padding(15, 2, 6, 2);
checkSleepBar.Size = new Size(231, 41);
@@ -719,8 +723,8 @@ namespace GHelper
// checkShutdownBar
//
checkShutdownBar.Dock = DockStyle.Fill;
checkShutdownBar.Location = new Point(482, 180);
checkShutdownBar.Margin = new Padding(4, 2, 4, 2);
checkShutdownBar.Location = new Point(482, 166);
checkShutdownBar.Margin = new Padding(4, 0, 4, 0);
checkShutdownBar.Name = "checkShutdownBar";
checkShutdownBar.Padding = new Padding(15, 2, 6, 2);
checkShutdownBar.Size = new Size(231, 41);
@@ -743,8 +747,8 @@ namespace GHelper
// checkAwakeLid
//
checkAwakeLid.Dock = DockStyle.Fill;
checkAwakeLid.Location = new Point(721, 45);
checkAwakeLid.Margin = new Padding(4, 2, 4, 2);
checkAwakeLid.Location = new Point(721, 43);
checkAwakeLid.Margin = new Padding(4, 0, 4, 0);
checkAwakeLid.Name = "checkAwakeLid";
checkAwakeLid.Padding = new Padding(15, 2, 6, 2);
checkAwakeLid.Size = new Size(233, 41);
@@ -755,8 +759,8 @@ namespace GHelper
// checkBootLid
//
checkBootLid.Dock = DockStyle.Fill;
checkBootLid.Location = new Point(721, 90);
checkBootLid.Margin = new Padding(4, 2, 4, 2);
checkBootLid.Location = new Point(721, 84);
checkBootLid.Margin = new Padding(4, 0, 4, 0);
checkBootLid.Name = "checkBootLid";
checkBootLid.Padding = new Padding(15, 2, 6, 2);
checkBootLid.Size = new Size(233, 41);
@@ -767,8 +771,8 @@ namespace GHelper
// checkSleepLid
//
checkSleepLid.Dock = DockStyle.Fill;
checkSleepLid.Location = new Point(721, 135);
checkSleepLid.Margin = new Padding(4, 2, 4, 2);
checkSleepLid.Location = new Point(721, 125);
checkSleepLid.Margin = new Padding(4, 0, 4, 0);
checkSleepLid.Name = "checkSleepLid";
checkSleepLid.Padding = new Padding(15, 2, 6, 2);
checkSleepLid.Size = new Size(233, 41);
@@ -779,8 +783,8 @@ namespace GHelper
// checkShutdownLid
//
checkShutdownLid.Dock = DockStyle.Fill;
checkShutdownLid.Location = new Point(721, 180);
checkShutdownLid.Margin = new Padding(4, 2, 4, 2);
checkShutdownLid.Location = new Point(721, 166);
checkShutdownLid.Margin = new Padding(4, 0, 4, 0);
checkShutdownLid.Name = "checkShutdownLid";
checkShutdownLid.Padding = new Padding(15, 2, 6, 2);
checkShutdownLid.Size = new Size(233, 41);
@@ -800,7 +804,7 @@ namespace GHelper
groupOther.Controls.Add(checkGpuApps);
groupOther.Controls.Add(checkFnLock);
groupOther.Dock = DockStyle.Top;
groupOther.Location = new Point(9, 908);
groupOther.Location = new Point(9, 880);
groupOther.Margin = new Padding(4, 2, 4, 2);
groupOther.Name = "groupOther";
groupOther.Padding = new Padding(20, 2, 4, 10);
@@ -894,13 +898,51 @@ namespace GHelper
checkFnLock.Text = "Process Fn+F hotkeys without Fn";
checkFnLock.UseVisualStyleBackColor = true;
//
// panelServices
//
panelServices.Controls.Add(labelServices);
panelServices.Controls.Add(buttonServices);
panelServices.Dock = DockStyle.Top;
panelServices.Location = new Point(9, 1176);
panelServices.Name = "panelServices";
panelServices.Size = new Size(966, 72);
panelServices.TabIndex = 3;
//
// labelServices
//
labelServices.AutoSize = true;
labelServices.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelServices.Location = new Point(23, 19);
labelServices.Name = "labelServices";
labelServices.Size = new Size(273, 32);
labelServices.TabIndex = 20;
labelServices.Text = "Asus Services Running";
//
// buttonServices
//
buttonServices.Activated = false;
buttonServices.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
buttonServices.BackColor = SystemColors.ControlLight;
buttonServices.BorderColor = Color.Transparent;
buttonServices.BorderRadius = 2;
buttonServices.FlatStyle = FlatStyle.Flat;
buttonServices.Location = new Point(695, 14);
buttonServices.Margin = new Padding(4, 2, 4, 2);
buttonServices.Name = "buttonServices";
buttonServices.Secondary = true;
buttonServices.Size = new Size(250, 44);
buttonServices.TabIndex = 19;
buttonServices.Text = "Start Services";
buttonServices.UseVisualStyleBackColor = false;
//
// Extra
//
AutoScaleDimensions = new SizeF(13F, 32F);
AutoScaleMode = AutoScaleMode.Font;
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
ClientSize = new Size(984, 1244);
ClientSize = new Size(984, 1262);
Controls.Add(panelServices);
Controls.Add(groupOther);
Controls.Add(groupLight);
Controls.Add(groupBindings);
@@ -931,6 +973,8 @@ namespace GHelper
tableBacklight.ResumeLayout(false);
groupOther.ResumeLayout(false);
groupOther.PerformLayout();
panelServices.ResumeLayout(false);
panelServices.PerformLayout();
ResumeLayout(false);
PerformLayout();
}
@@ -999,5 +1043,8 @@ namespace GHelper
private RComboBox comboFNC;
private TextBox textFNC;
private CheckBox checkVariBright;
private Panel panelServices;
private RButton buttonServices;
private Label labelServices;
}
}

View File

@@ -1,6 +1,5 @@
using CustomControls;
using GHelper.Gpu;
using Microsoft.VisualBasic.Devices;
using System.Diagnostics;
namespace GHelper
@@ -19,6 +18,8 @@ namespace GHelper
{"screen", Properties.Strings.ToggleScreen},
{"miniled", Properties.Strings.ToggleMiniled},
{"fnlock", Properties.Strings.ToggleFnLock},
{"brightness_down", Properties.Strings.BrightnessDown},
{"brightness_up", Properties.Strings.BrightnessUp},
{"custom", Properties.Strings.Custom}
};
@@ -229,7 +230,60 @@ namespace GHelper
pictureHelp.Click += PictureHelp_Click;
buttonServices.Click += ButtonServices_Click;
InitVariBright();
InitServices();
}
private void InitServices()
{
if (OptimizationService.IsRunning()) buttonServices.Text = Properties.Strings.Stop;
else buttonServices.Text = Properties.Strings.Start;
labelServices.Text = Properties.Strings.AsusServicesRunning + ": " + OptimizationService.GetRunningCount();
buttonServices.Enabled = true;
}
public void ServiesToggle()
{
buttonServices.Enabled = false;
if (OptimizationService.IsRunning())
{
labelServices.Text = Properties.Strings.StoppingServices + " ...";
Task.Run(() =>
{
OptimizationService.StopAsusServices();
BeginInvoke(delegate
{
InitServices();
});
Program.inputDispatcher.Init();
});
}
else
{
labelServices.Text = Properties.Strings.StartingServices + " ...";
Task.Run(() =>
{
OptimizationService.StartAsusServices();
BeginInvoke(delegate
{
InitServices();
});
});
}
}
private void ButtonServices_Click(object? sender, EventArgs e)
{
if (ProcessHelper.IsUserAdministrator())
ServiesToggle();
else
ProcessHelper.RunAsAdmin("services");
}
private void InitVariBright()

View File

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

View File

@@ -91,43 +91,6 @@ public class NvidiaGpuControl : IGpuControl
}
private static void RunCMD(string name, string args)
{
var cmd = new Process();
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.FileName = name;
cmd.StartInfo.Arguments = args;
cmd.Start();
Logger.WriteLine(cmd.StandardOutput.ReadToEnd());
cmd.WaitForExit();
}
public bool RestartGPUPnP()
{
if (!IsValid) return false;
try
{
PhysicalGPU internalGpu = _internalGpu!;
var pnpDeviceId = internalGpu.BusInformation.PCIIdentifiers.ToString();
Logger.WriteLine("Device ID:" + pnpDeviceId);
RunCMD("pnputil", $"/disable-device /deviceid \"{pnpDeviceId}\"");
Thread.Sleep(3000);
RunCMD("pnputil", $"/enable-device /deviceid \"{pnpDeviceId}\"");
Thread.Sleep(2000);
return true;
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
return false;
}
}
public bool RestartGPU()
{
@@ -135,7 +98,7 @@ public class NvidiaGpuControl : IGpuControl
{
string script = @"$device = Get-PnpDevice | Where-Object { $_.FriendlyName -imatch 'NVIDIA' -and $_.Class -eq 'Display' }; Disable-PnpDevice $device.InstanceId -Confirm:$false; Start-Sleep -Seconds 3; Enable-PnpDevice $device.InstanceId -Confirm:$false";
Logger.WriteLine(script);
RunCMD("powershell", script);
ProcessHelper.RunCMD("powershell", script);
//Thread.Sleep(2000);
return true;
}

View File

@@ -115,6 +115,8 @@ namespace GHelper
if (!OptimizationService.IsRunning())
listener = new KeyboardListener(HandleEvent);
else
Logger.WriteLine("Optimization service is running");
InitBacklightTimer();
}
@@ -195,7 +197,7 @@ namespace GHelper
KeyProcess("m3");
return;
case Keys.F11:
OptimizationEvent(199);
HandleEvent(199);
return;
}
}
@@ -223,10 +225,10 @@ namespace GHelper
KeyboardHook.KeyPress(Keys.VolumeMute);
break;
case Keys.F2:
OptimizationEvent(197);
HandleEvent(197);
break;
case Keys.F3:
OptimizationEvent(196);
HandleEvent(196);
break;
case Keys.F4:
KeyProcess("fnf4");
@@ -240,21 +242,21 @@ namespace GHelper
case Keys.F7:
if (AppConfig.ContainsModel("TUF"))
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, ScreenBrightness.Adjust(-10) + "%", ToastIcon.BrightnessDown);
OptimizationEvent(16);
HandleEvent(16);
break;
case Keys.F8:
if (AppConfig.ContainsModel("TUF"))
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, ScreenBrightness.Adjust(+10) + "%", ToastIcon.BrightnessUp);
OptimizationEvent(32);
HandleEvent(32);
break;
case Keys.F9:
KeyboardHook.KeyWinPress(Keys.P);
break;
case Keys.F10:
OptimizationEvent(107);
HandleEvent(107);
break;
case Keys.F11:
OptimizationEvent(108);
HandleEvent(108);
break;
case Keys.F12:
KeyboardHook.KeyWinPress(Keys.A);
@@ -339,6 +341,12 @@ namespace GHelper
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, muteStatus ? "Muted" : "Unmuted", muteStatus ? ToastIcon.MicrophoneMute : ToastIcon.Microphone);
}
break;
case "brightness_up":
HandleEvent(32);
break;
case "brightness_down":
HandleEvent(16);
break;
case "custom":
CustomKey(name);
break;
@@ -406,9 +414,45 @@ namespace GHelper
case 189: // Tablet mode
TabletMode();
return;
case 197: // FN+F2
SetBacklight(-1);
break;
case 196: // FN+F3
SetBacklight(1);
break;
case 199: // ON Z13 - FN+F11 - cycles backlight
SetBacklight(4);
break;
}
if (OptimizationService.IsRunning()) return;
// Asus Optimization service Events
switch (EventID)
{
case 16: // FN+F7
Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Brightness_Down, "Brightness");
break;
case 32: // FN+F8
Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Brightness_Up, "Brightness");
break;
case 107: // FN+F10
bool touchpadState = GetTouchpadState();
AsusUSB.TouchpadToggle();
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, touchpadState ? "Off" : "On", ToastIcon.Touchpad);
break;
case 108: // FN+F11
Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.KB_Sleep, "Sleep");
break;
case 106: // Zephyrus DUO special key for turning on/off second display.
//Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.KB_DUO_SecondDisplay, "SecondDisplay");
break;
case 75: // Zephyrus DUO special key for changing between arrows and pgup/pgdn
//Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.KB_DUO_PgUpDn, "PgUpDown");
break;
}
if (!OptimizationService.IsRunning()) OptimizationEvent(EventID);
}
@@ -430,7 +474,8 @@ namespace GHelper
{
if (init) AsusUSB.Init();
if (!OptimizationService.IsRunning()) AsusUSB.ApplyBrightness(GetBacklight(), "Auto");
//if (!OptimizationService.IsRunning())
AsusUSB.ApplyBrightness(GetBacklight(), "Auto");
}
public static void SetBacklight(int delta)
@@ -451,47 +496,14 @@ namespace GHelper
else
AppConfig.setConfig("keyboard_brightness", backlight);
AsusUSB.ApplyBrightness(backlight, "HotKey");
string[] backlightNames = new string[] { "Off", "Low", "Mid", "Max" };
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, backlightNames[backlight], delta > 0 ? ToastIcon.BacklightUp : ToastIcon.BacklightDown);
}
static void OptimizationEvent(int EventID)
{
// Asus Optimization service Events
switch (EventID)
if (!OptimizationService.IsRunning())
{
case 197: // FN+F2
SetBacklight(-1);
break;
case 196: // FN+F3
SetBacklight(1);
break;
case 199: // ON Z13 - FN+F11 - cycles backlight
SetBacklight(4);
break;
case 16: // FN+F7
Program.acpi.DeviceSet(AsusACPI.UniversalControl, 0x10, "Brightness");
break;
case 32: // FN+F8
Program.acpi.DeviceSet(AsusACPI.UniversalControl, 0x20, "Brightness");
break;
case 107: // FN+F10
bool touchpadState = GetTouchpadState();
AsusUSB.TouchpadToggle();
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, touchpadState ? "Off" : "On", ToastIcon.Touchpad);
break;
case 108: // FN+F11
Program.acpi.DeviceSet(AsusACPI.UniversalControl, 0x6c, "Sleep");
//NativeMethods.SetSuspendState(false, true, true);
break;
AsusUSB.ApplyBrightness(backlight, "HotKey");
string[] backlightNames = new string[] { "Off", "Low", "Mid", "Max" };
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, backlightNames[backlight], delta > 0 ? ToastIcon.BacklightUp : ToastIcon.BacklightDown);
}
}
}
static void LaunchProcess(string command = "")
{

View File

@@ -1,13 +1,27 @@
using System.Text.RegularExpressions;
using System.Text;
using Microsoft.Win32;
using System.Diagnostics;
using Microsoft.Win32;
using System.Text;
using System.Text.RegularExpressions;
namespace GHelper
{
public static class OptimizationService
{
public static void SetChargeLimit (int newValue)
static List<string> services = new() {
"AsusAppService",
"ASUSLinkNear",
"ASUSLinkRemote",
"ASUSSoftwareManager",
"ASUSSwitch",
"ASUSSystemAnalysis",
"ASUSSystemDiagnosis",
"ArmouryCrateControlInterface",
"AsusCertService",
"ASUSOptimization"
};
public static void SetChargeLimit(int newValue)
{
// Set the path to the .ini file
string path = @"C:\ProgramData\ASUS\ASUS System Control Interface\ASUSOptimization\Customization.ini";
@@ -41,8 +55,18 @@ namespace GHelper
return (Process.GetProcessesByName("AsusOptimization").Count() > 0);
}
public static int GetRunningCount()
{
int count = 0;
foreach (string service in services)
{
if (Process.GetProcessesByName(service).Count() > 0) count++;
}
return count;
}
public static void SetBacklightOffDelay(int value = 60)
public static void SetBacklightOffDelay(int value = 60)
{
try
{
@@ -60,6 +84,23 @@ namespace GHelper
}
public static void StopAsusServices()
{
foreach (string service in services)
{
ProcessHelper.StopDisableService(service);
}
}
public static void StartAsusServices()
{
foreach (string service in services)
{
ProcessHelper.StartEnableService(service);
}
}
}
}

View File

@@ -92,6 +92,48 @@ namespace GHelper
}
}
public static void StopDisableService(string serviceName)
{
try
{
string script = $"Set-Service -Name \"{serviceName}\" -Status stopped -StartupType disabled";
Logger.WriteLine(script);
RunCMD("powershell", script);
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
}
}
public static void StartEnableService(string serviceName)
{
try
{
string script = $"Set-Service -Name \"{serviceName}\" -Status running -StartupType Automatic";
Logger.WriteLine(script);
RunCMD("powershell", script);
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
}
}
public static void RunCMD(string name, string args)
{
var cmd = new Process();
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
cmd.StartInfo.FileName = name;
cmd.StartInfo.Arguments = args;
cmd.Start();
Logger.WriteLine(cmd.StandardOutput.ReadToEnd());
cmd.WaitForExit();
}
}
}

View File

@@ -3,6 +3,7 @@ using System.Diagnostics;
using System.Globalization;
using System.Reflection;
using System.Security.Principal;
using System.Windows.Forms;
using static NativeMethods;
namespace GHelper
@@ -135,7 +136,7 @@ namespace GHelper
public static void SetAutoModes()
public static void SetAutoModes(bool powerChanged = false)
{
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastAuto) < 3000) return;
@@ -147,7 +148,7 @@ namespace GHelper
inputDispatcher.Init();
settingsForm.SetBatteryChargeLimit(AppConfig.getConfig("charge_limit"));
settingsForm.AutoPerformance();
settingsForm.AutoPerformance(powerChanged);
bool switched = settingsForm.AutoGPUMode();
@@ -163,11 +164,9 @@ namespace GHelper
private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
if (SystemInformation.PowerStatus.PowerLineStatus == isPlugged) return;
Logger.WriteLine("Power Mode Changed");
SetAutoModes();
SetAutoModes(true);
}
@@ -190,6 +189,11 @@ namespace GHelper
case "gpurestart":
settingsForm.RestartGPU(false);
break;
case "services":
settingsForm.keyb = new Extra();
settingsForm.keyb.Show();
settingsForm.keyb.ServiesToggle();
break;
}
}
}

View File

@@ -130,6 +130,16 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap icons8_charged_battery_96 {
get {
object obj = ResourceManager.GetObject("icons8_charged_battery_96", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@@ -140,6 +150,16 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap icons8_electrical_96 {
get {
object obj = ResourceManager.GetObject("icons8_electrical_96", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>

View File

@@ -238,4 +238,10 @@
<data name="icons8-software-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-software-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_charged_battery_96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-charged-battery-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_electrical_96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-electrical-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@@ -177,6 +177,15 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Asus Services Running.
/// </summary>
internal static string AsusServicesRunning {
get {
return ResourceManager.GetString("AsusServicesRunning", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Breathe.
/// </summary>
@@ -339,6 +348,24 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Brightness Down.
/// </summary>
internal static string BrightnessDown {
get {
return ResourceManager.GetString("BrightnessDown", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Brightness Up.
/// </summary>
internal static string BrightnessUp {
get {
return ResourceManager.GetString("BrightnessUp", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Color.
/// </summary>
@@ -1023,6 +1050,24 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Start.
/// </summary>
internal static string Start {
get {
return ResourceManager.GetString("Start", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Starting Services.
/// </summary>
internal static string StartingServices {
get {
return ResourceManager.GetString("StartingServices", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Startup Error.
/// </summary>
@@ -1032,6 +1077,24 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Stop.
/// </summary>
internal static string Stop {
get {
return ResourceManager.GetString("Stop", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Stopping Services.
/// </summary>
internal static string StoppingServices {
get {
return ResourceManager.GetString("StoppingServices", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Toggle Aura.
/// </summary>

View File

@@ -156,6 +156,9 @@
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Auto-ajustar plan de energía Windows</value>
</data>
<data name="AsusServicesRunning" xml:space="preserve">
<value>Servicios de Asus en ejecución</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Respiración</value>
</data>
@@ -201,12 +204,21 @@
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Límite de carga</value>
</data>
<data name="BiosAndDriverUpdates" xml:space="preserve">
<value>Actualizaciones de BIOS y Drivers</value>
</data>
<data name="Boot" xml:space="preserve">
<value>Al arrancar</value>
</data>
<data name="Brightness" xml:space="preserve">
<value>Brillo</value>
</data>
<data name="BrightnessDown" xml:space="preserve">
<value>Bajar brillo</value>
</data>
<data name="BrightnessUp" xml:space="preserve">
<value>Subir brillo</value>
</data>
<data name="Color" xml:space="preserve">
<value>Color</value>
</data>
@@ -228,6 +240,9 @@
<data name="DownloadUpdate" xml:space="preserve">
<value>Descargar actualización</value>
</data>
<data name="DriverAndSoftware" xml:space="preserve">
<value>Drivers y Software</value>
</data>
<data name="EcoGPUTooltip" xml:space="preserve">
<value>Deshabilita la dGPU para ahorrar batería</value>
</data>
@@ -432,9 +447,21 @@
<data name="StandardMode" xml:space="preserve">
<value>Estándar</value>
</data>
<data name="Start" xml:space="preserve">
<value>Iniciar</value>
</data>
<data name="StartingServices" xml:space="preserve">
<value>Iniciando servicios</value>
</data>
<data name="StartupError" xml:space="preserve">
<value>Error de inicio</value>
</data>
<data name="Stop" xml:space="preserve">
<value>Detener</value>
</data>
<data name="StoppingServices" xml:space="preserve">
<value>Deteniendo servicios</value>
</data>
<data name="ToggleAura" xml:space="preserve">
<value>Alternar Aura</value>
</data>
@@ -462,6 +489,9 @@
<data name="UltimateMode" xml:space="preserve">
<value>Ultimate</value>
</data>
<data name="Updates" xml:space="preserve">
<value>Actualización</value>
</data>
<data name="VersionLabel" xml:space="preserve">
<value>Versión</value>
</data>

View File

@@ -0,0 +1,510 @@
<?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>ASUS ACPI에 연결할 수 없어 응용 프로그램이 작동하지 않습니다. Asus System Control Interface를 먼저 설치하십시오.</value>
</data>
<data name="AlertDGPU" xml:space="preserve">
<value>GPU 사용량이 높습니다. 비활성화 하시겠습니까?</value>
</data>
<data name="AlertDGPUTitle" xml:space="preserve">
<value>Eco 모드</value>
</data>
<data name="AlertUltimateOff" xml:space="preserve">
<value>Ultimate 모드를 끄기 위해서는 다시 시작해야 합니다.</value>
</data>
<data name="AlertUltimateOn" xml:space="preserve">
<value>Ultimate 모드를 켜기 위해서는 다시 시작해야 합니다.</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>Anime Matrix</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="ApplyWindowsPowerPlan" xml:space="preserve">
<value>윈도우 전원 모드 자동조절</value>
</data>
<data name="AsusServicesRunning" xml:space="preserve">
<value>실행중인 Asus 서비스</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Breathe</value>
</data>
<data name="AuraColorCycle" xml:space="preserve">
<value>Color Cycle</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>Rainbow</value>
</data>
<data name="AuraSlow" xml:space="preserve">
<value>느리게</value>
</data>
<data name="AuraStatic" xml:space="preserve">
<value>Static</value>
</data>
<data name="AuraStrobe" xml:space="preserve">
<value>Strobe</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>Awake</value>
</data>
<data name="BacklightTimeout" xml:space="preserve">
<value>배터리 사용 중 백라이트 자동 꺼짐</value>
</data>
<data name="BacklightTimeoutPlugged" xml:space="preserve">
<value>전원 연결 시 백라이트 자동 꺼짐 (0 - 항상 켜짐)</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>균형</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>배터리 충전 제한</value>
</data>
<data name="BiosAndDriverUpdates" xml:space="preserve">
<value>바이오스/드라이버 업데이트</value>
</data>
<data name="Boot" xml:space="preserve">
<value>Boot</value>
</data>
<data name="Brightness" xml:space="preserve">
<value>밝기</value>
</data>
<data name="BrightnessDown" xml:space="preserve">
<value>밝기 감소</value>
</data>
<data name="BrightnessUp" 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="DriverAndSoftware" xml:space="preserve">
<value>드라이버와 소프트웨어</value>
</data>
<data name="EcoGPUTooltip" xml:space="preserve">
<value>배터리 절약을 위해 dGPU 비활성화</value>
</data>
<data name="EcoMode" xml:space="preserve">
<value>Eco</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="FanSpeed" xml:space="preserve">
<value>팬: </value>
</data>
<data name="FansPower" xml:space="preserve">
<value>팬 + 전력</value>
</data>
<data name="FnLock" xml:space="preserve">
<value>Fn 키를 누르지 않고 Fn+F 핫키 작동</value>
</data>
<data name="GPUBoost" xml:space="preserve">
<value>다이나믹 부스트</value>
</data>
<data name="GPUChanging" xml:space="preserve">
<value>충전 중</value>
</data>
<data name="GPUCoreClockOffset" xml:space="preserve">
<value>코어 클럭 오프셋</value>
</data>
<data name="GPUMemoryClockOffset" xml:space="preserve">
<value>메모리 클럭 오프셋</value>
</data>
<data name="GPUMode" xml:space="preserve">
<value>GPU 모드</value>
</data>
<data name="GPUModeEco" xml:space="preserve">
<value>iGPU만 사용</value>
</data>
<data name="GPUModeStandard" xml:space="preserve">
<value>iGPU + dGPU</value>
</data>
<data name="GPUModeUltimate" xml:space="preserve">
<value>dGPU만 사용</value>
</data>
<data name="GPUSettings" xml:space="preserve">
<value>GPU 설정</value>
</data>
<data name="GPUTempTarget" 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="KillGpuApps" xml:space="preserve">
<value>Eco 모드로 전환 시 GPU를 사용하는 모든 앱 중지</value>
</data>
<data name="LaptopBacklight" 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="Lid" xml:space="preserve">
<value>덮개</value>
</data>
<data name="Lightbar" xml:space="preserve">
<value>라이트바</value>
</data>
<data name="Logo" xml:space="preserve">
<value>로고</value>
</data>
<data name="MatrixAudio" xml:space="preserve">
<value>오디오 비주얼라이저</value>
</data>
<data name="MatrixBanner" xml:space="preserve">
<value>Binary Banner</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 로고</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="MuteMic" 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>배터리 사용 중에만 Eco 모드 설정</value>
</data>
<data name="OptimizedUSBC" xml:space="preserve">
<value>최적화 모드에서 PD 충전 시 GPU 비활성화</value>
</data>
<data name="Other" xml:space="preserve">
<value>기타 설정</value>
</data>
<data name="Overdrive" xml:space="preserve">
<value>오버드라이브</value>
</data>
<data name="PerformanceMode" xml:space="preserve">
<value>성능 모드</value>
</data>
<data name="PictureGif" xml:space="preserve">
<value>사진 / Gif</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>PrintScreen</value>
</data>
<data name="Quit" xml:space="preserve">
<value>종료</value>
</data>
<data name="RestartGPU" xml:space="preserve">
<value>dGPU가 사용중이기 때문에 Eco 모드로 전환할 수 없습니다. 장치 관리자에서 dGPU를 재시작하시겠습니까?</value>
</data>
<data name="RPM" xml:space="preserve">
<value>RPM</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>Sleep</value>
</data>
<data name="StandardGPUTooltip" xml:space="preserve">
<value>Standard 모드에서 dGPU 켜기</value>
</data>
<data name="StandardMode" xml:space="preserve">
<value>Standard</value>
</data>
<data name="Start" xml:space="preserve">
<value>시작</value>
</data>
<data name="StartingServices" xml:space="preserve">
<value>서비스 시작 중</value>
</data>
<data name="StartupError" xml:space="preserve">
<value>시작 오류</value>
</data>
<data name="Stop" xml:space="preserve">
<value>중지</value>
</data>
<data name="StoppingServices" xml:space="preserve">
<value>서비스 중지 중</value>
</data>
<data name="ToggleAura" xml:space="preserve">
<value>Aura 토글 키</value>
</data>
<data name="ToggleFnLock" xml:space="preserve">
<value>Fn-Lock 토글 키</value>
</data>
<data name="ToggleMiniled" xml:space="preserve">
<value>Miniled 토글 키 (지원하는 기기만)</value>
</data>
<data name="ToggleScreen" xml:space="preserve">
<value>화면 토글 키</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>노트북 화면을 dGPU와 연결, FPS 최대화</value>
</data>
<data name="UltimateMode" xml:space="preserve">
<value>Ultimate</value>
</data>
<data name="Updates" xml:space="preserve">
<value>업데이트</value>
</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>
</data>
</root>

View File

@@ -156,6 +156,9 @@
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Auto adjust Windows Power Modes</value>
</data>
<data name="AsusServicesRunning" xml:space="preserve">
<value>Asus Services Running</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Breathe</value>
</data>
@@ -210,6 +213,12 @@
<data name="Brightness" xml:space="preserve">
<value>Brightness</value>
</data>
<data name="BrightnessDown" xml:space="preserve">
<value>Brightness Down</value>
</data>
<data name="BrightnessUp" xml:space="preserve">
<value>Brightness Up</value>
</data>
<data name="Color" xml:space="preserve">
<value>Color</value>
</data>
@@ -438,9 +447,21 @@
<data name="StandardMode" xml:space="preserve">
<value>Standard</value>
</data>
<data name="Start" xml:space="preserve">
<value>Start</value>
</data>
<data name="StartingServices" xml:space="preserve">
<value>Starting Services</value>
</data>
<data name="StartupError" xml:space="preserve">
<value>Startup Error</value>
</data>
<data name="Stop" xml:space="preserve">
<value>Stop</value>
</data>
<data name="StoppingServices" xml:space="preserve">
<value>Stopping Services</value>
</data>
<data name="ToggleAura" xml:space="preserve">
<value>Toggle Aura</value>
</data>

Binary file not shown.

After

Width:  |  Height:  |  Size: 406 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1000 B

View File

@@ -135,7 +135,7 @@ namespace GHelper
panelMatrix.Controls.Add(panelMatrixTitle);
panelMatrix.Controls.Add(checkMatrix);
panelMatrix.Dock = DockStyle.Top;
panelMatrix.Location = new Point(10, 783);
panelMatrix.Location = new Point(10, 891);
panelMatrix.Margin = new Padding(0);
panelMatrix.Name = "panelMatrix";
panelMatrix.Padding = new Padding(20, 20, 20, 10);
@@ -264,7 +264,7 @@ namespace GHelper
panelBattery.Controls.Add(sliderBattery);
panelBattery.Controls.Add(panelBatteryTitle);
panelBattery.Dock = DockStyle.Top;
panelBattery.Location = new Point(10, 954);
panelBattery.Location = new Point(10, 1062);
panelBattery.Margin = new Padding(0);
panelBattery.Name = "panelBattery";
panelBattery.Padding = new Padding(20);
@@ -335,7 +335,7 @@ namespace GHelper
panelFooter.Controls.Add(buttonQuit);
panelFooter.Controls.Add(checkStartup);
panelFooter.Dock = DockStyle.Top;
panelFooter.Location = new Point(10, 1136);
panelFooter.Location = new Point(10, 1244);
panelFooter.Margin = new Padding(0);
panelFooter.Name = "panelFooter";
panelFooter.Padding = new Padding(20);
@@ -570,14 +570,14 @@ namespace GHelper
panelGPU.Margin = new Padding(0);
panelGPU.Name = "panelGPU";
panelGPU.Padding = new Padding(20, 20, 20, 0);
panelGPU.Size = new Size(810, 243);
panelGPU.Size = new Size(810, 351);
panelGPU.TabIndex = 37;
//
// labelTipGPU
//
labelTipGPU.Dock = DockStyle.Top;
labelTipGPU.ForeColor = SystemColors.GrayText;
labelTipGPU.Location = new Point(20, 207);
labelTipGPU.Location = new Point(20, 315);
labelTipGPU.Margin = new Padding(4, 0, 4, 0);
labelTipGPU.Name = "labelTipGPU";
labelTipGPU.Size = new Size(770, 36);
@@ -603,8 +603,8 @@ namespace GHelper
tableGPU.Name = "tableGPU";
tableGPU.RowCount = 1;
tableGPU.RowStyles.Add(new RowStyle(SizeType.Absolute, 128F));
tableGPU.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
tableGPU.Size = new Size(770, 148);
tableGPU.RowStyles.Add(new RowStyle(SizeType.Absolute, 128F));
tableGPU.Size = new Size(770, 256);
tableGPU.TabIndex = 16;
//
// buttonEco
@@ -668,7 +668,7 @@ namespace GHelper
buttonXGM.Margin = new Padding(4);
buttonXGM.Name = "buttonXGM";
buttonXGM.Secondary = false;
buttonXGM.Size = new Size(184, 12);
buttonXGM.Size = new Size(184, 120);
buttonXGM.TabIndex = 2;
buttonXGM.Text = "XG Mobile";
buttonXGM.TextImageRelation = TextImageRelation.ImageAboveText;
@@ -771,7 +771,7 @@ namespace GHelper
panelScreen.Controls.Add(tableScreen);
panelScreen.Controls.Add(panelScreenTitle);
panelScreen.Dock = DockStyle.Top;
panelScreen.Location = new Point(10, 460);
panelScreen.Location = new Point(10, 568);
panelScreen.Margin = new Padding(0);
panelScreen.Name = "panelScreen";
panelScreen.Padding = new Padding(20, 20, 20, 10);
@@ -939,7 +939,7 @@ namespace GHelper
panelKeyboard.Controls.Add(tableLayoutKeyboard);
panelKeyboard.Controls.Add(panelKeyboardTitle);
panelKeyboard.Dock = DockStyle.Top;
panelKeyboard.Location = new Point(10, 645);
panelKeyboard.Location = new Point(10, 753);
panelKeyboard.Margin = new Padding(0);
panelKeyboard.Name = "panelKeyboard";
panelKeyboard.Padding = new Padding(20);
@@ -1113,7 +1113,7 @@ namespace GHelper
panelVersion.Controls.Add(labelVersion);
panelVersion.Controls.Add(labelModel);
panelVersion.Dock = DockStyle.Top;
panelVersion.Location = new Point(10, 1079);
panelVersion.Location = new Point(10, 1187);
panelVersion.Name = "panelVersion";
panelVersion.Size = new Size(810, 57);
panelVersion.TabIndex = 41;

View File

@@ -176,7 +176,7 @@ namespace GHelper
labelModel.Text = model + (ProcessHelper.IsUserAdministrator() ? "." : "");
TopMost = AppConfig.getConfig("topmost") == 1;
TopMost = AppConfig.isConfig("topmost");
SetContextMenu();
@@ -247,8 +247,9 @@ namespace GHelper
public void SetContextMenu()
{
contextMenuStrip.Items.Clear();
var mode = AppConfig.getConfig("performance_mode");
contextMenuStrip.Items.Clear();
Padding padding = new Padding(15, 5, 5, 5);
var title = new ToolStripMenuItem(Properties.Strings.PerformanceMode);
@@ -259,17 +260,19 @@ namespace GHelper
menuSilent = new ToolStripMenuItem(Properties.Strings.Silent);
menuSilent.Click += ButtonSilent_Click;
menuSilent.Margin = padding;
menuSilent.Checked = (mode == AsusACPI.PerformanceSilent);
contextMenuStrip.Items.Add(menuSilent);
menuBalanced = new ToolStripMenuItem(Properties.Strings.Balanced);
menuBalanced.Click += ButtonBalanced_Click;
menuBalanced.Margin = padding;
menuBalanced.Checked = (mode == AsusACPI.PerformanceBalanced);
contextMenuStrip.Items.Add(menuBalanced);
menuTurbo = new ToolStripMenuItem(Properties.Strings.Turbo);
menuTurbo.Click += ButtonTurbo_Click;
menuTurbo.Checked = true;
menuTurbo.Margin = padding;
menuTurbo.Checked = (mode == AsusACPI.PerformanceTurbo);
contextMenuStrip.Items.Add(menuTurbo);
contextMenuStrip.Items.Add("-");
@@ -351,6 +354,8 @@ namespace GHelper
else
{
Program.acpi.DeviceSet(AsusACPI.GPUXG, 1, "GPU XGM");
AsusUSB.ApplyXGMLight(AppConfig.isConfig("xmg_light"));
await Task.Delay(TimeSpan.FromSeconds(15));
if (AppConfig.isConfigPerf("auto_apply"))
@@ -1190,13 +1195,13 @@ namespace GHelper
private static bool isManualModeRequired()
{
if (!AppConfig.isConfigPerf("auto_apply_power"))
if (!AppConfig.isConfigPerf("auto_apply_power"))
return false;
return
AppConfig.isConfig("manual_mode") ||
AppConfig.ContainsModel("GU604") ||
AppConfig.ContainsModel("FX517") ||
AppConfig.ContainsModel("GU604") ||
AppConfig.ContainsModel("FX517") ||
AppConfig.ContainsModel("G733");
}
@@ -1256,28 +1261,33 @@ namespace GHelper
buttonBalanced.Activated = false;
buttonTurbo.Activated = false;
menuSilent.Checked = false;
menuBalanced.Checked = false;
menuTurbo.Checked = false;
switch (PerformanceMode)
{
case AsusACPI.PerformanceSilent:
buttonSilent.Activated = true;
menuSilent.Checked = true;
perfName = Properties.Strings.Silent;
break;
case AsusACPI.PerformanceTurbo:
buttonTurbo.Activated = true;
menuTurbo.Checked = true;
perfName = Properties.Strings.Turbo;
break;
default:
buttonBalanced.Activated = true;
PerformanceMode = AsusACPI.PerformanceBalanced;
menuBalanced.Checked = true;
perfName = Properties.Strings.Balanced;
PerformanceMode = AsusACPI.PerformanceBalanced;
break;
}
menuSilent.Checked = buttonSilent.Activated;
menuBalanced.Checked = buttonBalanced.Activated;
menuTurbo.Checked = buttonTurbo.Activated;
var powerStatus = SystemInformation.PowerStatus.PowerLineStatus;
AppConfig.setConfig("performance_" + (int)SystemInformation.PowerStatus.PowerLineStatus, PerformanceMode);
AppConfig.setConfig("performance_" + (int)powerStatus, PerformanceMode);
AppConfig.setConfig("performance_mode", PerformanceMode);
if (isManualModeRequired())
@@ -1287,11 +1297,11 @@ namespace GHelper
if (AppConfig.isConfig("xgm_fan") && Program.acpi.IsXGConnected()) AsusUSB.ResetXGM();
if (notify && (oldMode != PerformanceMode))
if (notify)
{
try
{
toast.RunToast(perfName);
toast.RunToast(perfName, powerStatus == PowerLineStatus.Online ? ToastIcon.Charger : ToastIcon.Battery);
}
catch
{
@@ -1348,17 +1358,21 @@ namespace GHelper
public void AutoKeyboard()
{
InputDispatcher.SetBacklightAuto(true);
if (Program.acpi.IsXGConnected())
AsusUSB.ApplyXGMLight(AppConfig.isConfig("xmg_light"));
if (AppConfig.ContainsModel("X16") || AppConfig.ContainsModel("X13")) InputDispatcher.TabletMode();
}
public void AutoPerformance()
public void AutoPerformance(bool powerChanged = false)
{
var Plugged = SystemInformation.PowerStatus.PowerLineStatus;
int mode = AppConfig.getConfig("performance_" + (int)Plugged);
if (mode != -1)
SetPerformanceMode(mode, true);
SetPerformanceMode(mode, powerChanged);
else
SetPerformanceMode(AppConfig.getConfig("performance_mode"));
}
@@ -1724,10 +1738,13 @@ namespace GHelper
break;
}
menuEco.Checked = buttonEco.Activated;
menuStandard.Checked = buttonStandard.Activated;
menuUltimate.Checked = buttonUltimate.Activated;
menuOptimized.Checked = buttonOptimized.Activated;
if (isGpuSection)
{
menuEco.Checked = buttonEco.Activated;
menuStandard.Checked = buttonStandard.Activated;
menuUltimate.Checked = buttonUltimate.Activated;
menuOptimized.Checked = buttonOptimized.Activated;
}
}

View File

@@ -52,7 +52,9 @@ namespace GHelper
Touchpad,
Microphone,
MicrophoneMute,
FnLock
FnLock,
Battery,
Charger
}
public class ToastForm : OSDNativeForm
@@ -107,6 +109,12 @@ namespace GHelper
case ToastIcon.FnLock:
icon = Properties.Resources.icons8_function;
break;
case ToastIcon.Battery:
icon = Properties.Resources.icons8_charged_battery_96;
break;
case ToastIcon.Charger:
icon = Properties.Resources.icons8_electrical_96;
break;
}

View File

@@ -1,21 +1,36 @@
using CustomControls;
using HidSharp;
using System.Diagnostics;
using System.Management;
using System.Net;
using System.Text.Json;
namespace GHelper
{
struct DriverDownload
{
public string categoryName;
public string title;
public string version;
public string downloadUrl;
public JsonElement hardwares;
}
public partial class Updates : RForm
{
//static int rowCount = 0;
static string model = AppConfig.GetModelShort();
static string model;
static string bios;
public Updates()
{
InitializeComponent();
InitTheme();
Text = Properties.Strings.BiosAndDriverUpdates + ": " + model + " " + GetBiosVersion();
InitBiosAndModel();
Text = Properties.Strings.BiosAndDriverUpdates + ": " + model + " " + bios;
labelBIOS.Text = "BIOS";
labelDrivers.Text = Properties.Strings.DriverAndSoftware;
@@ -30,7 +45,7 @@ namespace GHelper
Task.Run(async () =>
{
DriversAsync($"https://rog.asus.com/support/webapi/product/GetPDDrivers?website=global&model={model}&osid=52", 0, tableDrivers);
DriversAsync($"https://rog.asus.com/support/webapi/product/GetPDDrivers?website=global&model={model}&cpu={model}&osid=52", 0, tableDrivers);
});
Shown += Updates_Shown;
@@ -61,7 +76,7 @@ namespace GHelper
}
}
private string GetBiosVersion()
private string InitBiosAndModel()
{
using (ManagementObjectSearcher objSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS"))
{
@@ -70,10 +85,15 @@ namespace GHelper
foreach (ManagementObject obj in objCollection)
if (obj["SMBIOSBIOSVersion"] is not null)
{
var bios = obj["SMBIOSBIOSVersion"].ToString();
int trim = bios.LastIndexOf(".");
if (trim > 0) return bios.Substring(trim + 1);
else return bios;
string[] results = obj["SMBIOSBIOSVersion"].ToString().Split(".");
if (results.Length > 1)
{
model = results[0];
bios = results[1];
} else
{
model = obj["SMBIOSBIOSVersion"].ToString();
}
}
return "";
@@ -86,23 +106,20 @@ namespace GHelper
try
{
Dictionary<string, string> devices = new();
string biosVersion = "";
if (type == 0) devices = GetDeviceVersions();
else biosVersion = GetBiosVersion();
//Debug.WriteLine(biosVersion);
using (var httpClient = new HttpClient())
using (var httpClient = new HttpClient(new HttpClientHandler
{
AutomaticDecompression = DecompressionMethods.All
}))
{
httpClient.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate, br");
httpClient.DefaultRequestHeaders.Add("User-Agent", "C# App");
var json = await httpClient.GetStringAsync(url);
var data = JsonSerializer.Deserialize<JsonElement>(json);
var groups = data.GetProperty("Result").GetProperty("Obj");
List<string> skipList = new() { "Armoury Crate & Aura Creator Installer", "MyASUS", "ASUS Smart Display Control", "Aura Wallpaper" };
List<string> skipList = new() { "Armoury Crate & Aura Creator Installer", "MyASUS", "ASUS Smart Display Control", "Aura Wallpaper", "Virtual Pet","ROG Font V1.5" };
List<DriverDownload> drivers = new();
for (int i = 0; i < groups.GetArrayLength(); i++)
{
@@ -116,62 +133,43 @@ namespace GHelper
var file = files[j];
var title = file.GetProperty("Title").ToString();
var version = file.GetProperty("Version").ToString().Replace("V", "");
var downloadUrl = file.GetProperty("DownloadUrl").GetProperty("Global").ToString();
//Debug.WriteLine(" - " + title + " " + version + " " + downloadUrl);
if (oldTitle != title && !skipList.Contains(title))
{
JsonElement hardwares = file.GetProperty("HardwareInfoList");
bool newer = false;
if (type == 0 && hardwares.ToString().Length > 0)
for (int k = 0; k < hardwares.GetArrayLength(); k++)
{
var deviceID = hardwares[k].GetProperty("hardwareid").ToString();
var localVersion = devices.Where(p => p.Key.Contains(deviceID)).Select(p => p.Value).FirstOrDefault();
if (localVersion is not null)
{
newer = (new Version(version).CompareTo(new Version(localVersion)) > 0);
break;
}
}
if (type == 1)
{
newer = Int32.Parse(version) > Int32.Parse(biosVersion);
}
var driver = new DriverDownload();
driver.categoryName = categoryName;
driver.title = title;
driver.version = file.GetProperty("Version").ToString().Replace("V", "");
driver.downloadUrl = file.GetProperty("DownloadUrl").GetProperty("Global").ToString();
driver.hardwares = file.GetProperty("HardwareInfoList");
drivers.Add(driver);
BeginInvoke(delegate
{
string versionText = version.Replace("latest version at the ", "");
Label versionLabel = new Label { Text = versionText, Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Height = 50 };
string versionText = driver.version.Replace("latest version at the ", "");
Label versionLabel = new Label { Text = versionText, Anchor = AnchorStyles.Left, AutoSize = true };
versionLabel.Cursor = Cursors.Hand;
versionLabel.Font = new Font(versionLabel.Font, newer ? FontStyle.Underline | FontStyle.Bold : FontStyle.Underline);
versionLabel.ForeColor = newer ? colorTurbo : colorEco;
versionLabel.Font = new Font(versionLabel.Font, FontStyle.Underline);
versionLabel.ForeColor = colorEco;
versionLabel.Padding = new Padding(5, 5, 5, 5);
versionLabel.Click += delegate
{
Process.Start(new ProcessStartInfo(downloadUrl) { UseShellExecute = true });
Process.Start(new ProcessStartInfo(driver.downloadUrl) { UseShellExecute = true });
};
table.RowStyles.Add(new RowStyle(SizeType.AutoSize));
table.Controls.Add(new Label { Text = categoryName, Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Padding = new Padding(5, 5, 5, 5) }, 0, table.RowCount);
table.Controls.Add(new Label { Text = title, Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Padding = new Padding(5, 5, 5, 5) }, 1, table.RowCount);
table.Controls.Add(new Label { Text = driver.categoryName, Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Padding = new Padding(5, 5, 5, 5) }, 0, table.RowCount);
table.Controls.Add(new Label { Text = driver.title, Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Padding = new Padding(5, 5, 5, 5) }, 1, table.RowCount);
table.Controls.Add(versionLabel, 2, table.RowCount);
table.RowCount++;
});
}
oldTitle = title;
}
}
BeginInvoke(delegate
{
table.Visible = true;
@@ -179,11 +177,51 @@ namespace GHelper
PerformLayout();
});
Dictionary<string, string> devices = new();
if (type == 0) devices = GetDeviceVersions();
//Debug.WriteLine(biosVersion);
int count = 0;
foreach (var driver in drivers)
{
int newer = -2;
if (type == 0 && driver.hardwares.ToString().Length > 0)
for (int k = 0; k < driver.hardwares.GetArrayLength(); k++)
{
var deviceID = driver.hardwares[k].GetProperty("hardwareid").ToString();
var localVersion = devices.Where(p => p.Key.Contains(deviceID)).Select(p => p.Value).FirstOrDefault();
if (localVersion is not null)
{
newer = new Version(driver.version).CompareTo(new Version(localVersion));
break;
}
}
if (type == 1)
newer = Int32.Parse(driver.version) > Int32.Parse(bios) ? 1 : -1;
if (newer > 0)
{
var label = table.GetControlFromPosition(2, count) as Label;
if (label != null)
{
BeginInvoke(delegate
{
label.Font = new Font(label.Font, FontStyle.Underline | FontStyle.Bold);
label.ForeColor = colorTurbo;
});
}
}
count++;
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
Logger.WriteLine(ex.ToString());
}

View File

@@ -15,7 +15,8 @@ Lightweight Armoury Crate alternative for Asus laptops. A small utility that all
2. All performance modes can be fully customized (with fan curves and PPTs)
3. Very lightweight and consumes almost no resources, doesn't install any services. Just a single exe to run
4. Simple and clean native UI with easy access to all settings
5. Doesn't need administrator privileges to run!
5. FN-Lock
6. Doesn't need administrator privileges to run (*)
## [:floppy_disk: Download App](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
@@ -32,7 +33,7 @@ _If you post about the app - please include a link. Thanks._
2. **GPU modes**: Eco - Standard - Ultimate - Optimized
3. Laptop screen refresh rate 60hz or 120hz (144hz, etc) with display overdrive (OD) and miniled multizone switch
4. Custom fan curve editor, power limits (PPT) and turbo boost selection for every performance mode
5. Anime matrix control thanks to [Starlight](https://github.com/vddCore/Starlight) + some tweaks from my side including animated GIFs, clock and autio visualizer
5. Anime matrix control thanks to [Starlight](https://github.com/vddCore/Starlight) + some tweaks from my side including animated GIFs, clock and audio visualizer
6. Keyboard backlit animation and colors (including sleep animation and support for TUF models)
7. All basic and custom Keyboard hotkeys (M-keys, FN+X keys)
8. Monitor CPU / GPU temperature, fan speeds and battery discharge rate
@@ -73,16 +74,15 @@ _PPTs are shown for G14 2022, for other models PPTs will be different as they ar
#### 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?
Ultimate mode is supported (by hardware) only on G14 2022 (and possibly other models from 2022+)
Ultimate mode is supported (by hardware) only on 2022+ models
#### I can't set Eco mode (disable dGPU) on my G14 2020
Unfortunately 2020 model doesn't support that on hardware level
#### I don't see GPU modes section
Some older models (for example G14 2020) don't support disabling GPU on hardware level, therefore GPU section makes no sense for them and will be hidden
#### Should I apply custom PPTs and fan profiles?
#### Should I apply custom power limits (PPT) 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?
@@ -97,11 +97,11 @@ Most probably either you are using Eco / Optimized mode and your dGPU is simply
#### 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 crash or doesn't work properly what should I do ?
#### App crash or doesn't work properly 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.
#### Battery charge limiter is not working
Open application log.text from ``%AppData%\GHelper`` . If you see something like ``BatteryLimit = 60 : OK`` there (with your selected limit). App has done everything it could to set a limit. It could be that MyASUS or other Asus services are overwriting this limit after. You may want to right click and save this [debloat.bat](https://raw.githubusercontent.com/seerge/g-helper/main/debloat.bat) and then right-click Run it As Admin. It will stop not mandatory asus services.
Open application log.text from ``%AppData%\GHelper``. If you see something like ``BatteryLimit = 60 : OK`` there with your selected limit - App has done everything it could to set a limit. It could be that MyASUS or other Asus services are overwriting this limit after. You may want to stop them by clicking "Stop" in Asus Services section (under Extra).
#### Can I use MyASUS app along with G-Helper?
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.
@@ -112,15 +112,20 @@ If you have Asus Optimization Service running, it's controlled by that service (
#### 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)
#### Can I overclock Nvidia GPU core / memory?
Make sure that your dGPU is enabled (i.e. it's not in Eco mode). Open Fans + Power section and adjust core / memory clock offsets. They work same as in armoury's manual mode. Please keep in mind that (unfortunately) you need admin permissions for that, and app will ask you for them.
#### Can I overclock Nvidia GPU core / memory?
Make sure that your dGPU is enabled (i.e. it's not in Eco mode). Open Fans + Power section and adjust core / memory clock offsets. They work same as in armoury's manual mode. Please keep in mind that (unfortunately) you need admin permissions for that, and app will ask you for them. (*)
#### Windows defender marks app download as malware / virus
False positives from Windows Defender (or any other similar system that uses machine learning for detection) is possible as application is not digitally signed with a certificate. You can always download a version below or compile app by yourself. All application sources are open and can be monitored from A to Z :)
#### Where can I find app settings or logs ?
You can find them under ``%AppData%\GHelper`` folder. Please include them when posting a new bug-report or issue.
#### 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.
G-Helper is 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.
-----------------------------
@@ -136,47 +141,45 @@ It's a lightweight Armoury Crate alternative for Asus laptops. A small utility t
### How to install
1. Download latest release from [**Releases Page**](https://github.com/seerge/g-helper/releases)
2. Unzip to a folder of your choice
2. Unzip to a folder of your choice _(don't run exe from zip directly, as windows will put it into temp folder and delete after)_
3. Run **GHelper.exe**
### 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.
- [Microsoft .NET7](https://dotnet.microsoft.com/en-us/download). Most probably you already have it. Otherwise [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
- [Asus System Control Interface v3+](https://dlcdnets.asus.com/pub/ASUS/nb/Image/CustomComponent/ASUSSystemControlInterfaceV3/ASUSSystemControlInterfaceV3.exe). This "driver" from asus should be installed automatically by windows update or along other asus apps. If it's not the case by some reason - you can download and install it manually.
### Recommendations (optional)
- You can disable / remove unnecessary services. Ruight click and save [debloat.bat](https://raw.githubusercontent.com/seerge/g-helper/main/debloat.bat). Then right click and Run it as Admin. To restore services - save and run [bloat.bat](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 AC 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.
- 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.
- 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.
- 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.
- You can stop / disable unnecessary services: Go to **Extra** in the app, and press "Stop" in Asus Services section (former **[debloat.bat](https://raw.githubusercontent.com/seerge/g-helper/main/debloat.bat)**). To start / enable services back - click "Start" instead (former **[bloat.bat](https://raw.githubusercontent.com/seerge/g-helper/main/bloat.bat)**)
- 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)
- It is **strongly recommended** to run app with windows default "balanced" power plan
![Screenshot 2023-06-09 153453](https://github.com/seerge/g-helper/assets/5920850/d1d05c53-a0bd-4207-b23a-244653f3e7df)
-------------------------------
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.
_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._
I don't have a Microsoft certificate to sign the app yet, so if you get a warning from Windows Defender on launch (Windows Protected your PC), click More Info -> Run anyway. Alternatively you can compile and run project by yourself using Visual Studio :)
Settings file is stored at ``%AppData%\GHelper``
------------------
Debloating helps to save your battery and keep laptop a bit cooler
![Helps to save your battery](https://raw.githubusercontent.com/seerge/g-helper/main/docs/screenshots/screen-5w.png)
---------
## Power user settings
### Manual app language setting
By default app will use your windows language setting. But you can set language manually (if it supported of course)
Add following line to ``%AppData%\GHelper\config.json`` : ``"language" : "en"`` (by replacing "en" with language of your choice)
### 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 ``%AppData%\GHelper\config.json`` 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" ``
@@ -214,6 +217,7 @@ To enable this custom workaround you need to add an extra line in config.json (u
By default app will toggle performance modes with Ctr+Shift+F5. You can change this binding by adding ``"keybind_profile": 116`` in config.json (under ``%AppData%\GHelper``), where 116 is [numerical code for desired key](https://www.oreilly.com/library/view/javascript-dhtml/9780596514082/apb.html). Put 0 to completely disable this binding.
------------
**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.