Compare commits

...

22 Commits
v0.76 ... v0.79

Author SHA1 Message Date
Serge
678f4b0eb7 UI tweaks 2023-06-05 22:32:50 +02:00
Serge
4bbfbd0382 Driver Updates 2023-06-05 17:31:59 +02:00
Serge
4c8291c74b S15 fix 2023-06-05 11:49:56 +02:00
Serge
e9060ad8c0 Update README.md 2023-06-04 23:29:42 +02:00
Serge
f26585e73c Version bump 2023-06-04 23:21:29 +02:00
Serge
9f7da4c20a GPU Section UI fixes 2023-06-04 23:20:37 +02:00
Serge
eff45c1485 Curve editor fix 2023-06-04 23:09:56 +02:00
Serge
be6e5e8f23 Varibright control 2023-06-04 17:21:31 +02:00
Serge
17083eef21 Check for optimization service before setting backlight 2023-06-04 12:18:51 +02:00
Serge
d5b098335b Kill GPU apps for AMD, Optimus fix 2023-06-04 01:25:39 +02:00
Serge
acb2efdd00 Merge branch 'main' of https://github.com/seerge/g-helper 2023-06-03 22:17:48 +02:00
Serge
92fa210898 UI tweaks 2023-06-03 22:17:46 +02:00
Serge
6dd4e07efe Merge pull request #527 from marcelomijas/main
Update Spanish translation
2023-06-03 18:07:41 +02:00
Marcelo Moreno
ae6972db76 Update Spanish translation
- Translation for the new Fn+F without Fn feature.
- Translation for the Fn-Lock toggle.
- Update backlight timeout translation.
2023-06-03 18:03:42 +02:00
Serge
b3f7b1027f Merge pull request #524 from lswlc33/patch-3
upadte translate
2023-06-03 14:31:22 +02:00
雪中明月
8929daa604 upadte translate 2023-06-03 20:24:13 +08:00
Serge
eb522214f0 UI Tweaks 2023-06-02 21:25:18 +02:00
Serge
1222377c33 Update README.zh-CN.md 2023-06-02 21:14:32 +02:00
Serge
933f07d666 Update README.md 2023-06-02 21:14:02 +02:00
Serge
8f95f6a1bb Update README.md 2023-06-02 21:13:12 +02:00
Serge
f2c32b2e9a Add files via upload 2023-06-02 21:11:05 +02:00
Serge
ddb591b79a Backlight fixes 2023-06-02 14:06:12 +02:00
37 changed files with 1972 additions and 728 deletions

View File

@@ -61,8 +61,25 @@ public static class AppConfig
GetModel();
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()
{
config = new Dictionary<string, object>();

View File

@@ -1,5 +1,4 @@
using GHelper;
using System.Management;
using System.Management;
using System.Runtime.InteropServices;
public enum AsusFan
@@ -93,6 +92,7 @@ public class AsusACPI
public const int PerformanceBalanced = 0;
public const int PerformanceTurbo = 1;
public const int PerformanceSilent = 2;
public const int PerformanceManual = 4;
public const int GPUModeEco = 0;
public const int GPUModeStandard = 1;
@@ -420,6 +420,24 @@ public class AsusACPI
return DeviceGet(PPT_CPUB0) >= 0 && DeviceGet(PPT_GPUC0) < 0;
}
public void ScanRange()
{
int value;
string appPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\GHelper";
string logFile = appPath + "\\scan.txt";
for (uint i = 0x00000000; i <= 0x00160000; i++)
{
value = DeviceGet(i);
if (value >= 0)
using (StreamWriter w = File.AppendText(logFile))
{
w.WriteLine(i.ToString("X8") + ": " + value.ToString("X4") + " (" + value + ")");
w.Close();
}
}
}
public void TUFKeyboardBrightness(int brightness)
{
int param = 0x80 | (brightness & 0x7F);

View File

@@ -124,7 +124,7 @@ namespace GHelper
_modes.Remove(3);
}
if (AppConfig.ContainsModel("G513")) {
if (AppConfig.ContainsModel("G513QY")) {
return _modes;
}

458
app/Extra.Designer.cs generated
View File

@@ -86,12 +86,13 @@ namespace GHelper
checkSleepLid = new CheckBox();
checkShutdownLid = new CheckBox();
groupOther = new GroupBox();
checkFnLock = new CheckBox();
checkGpuApps = new CheckBox();
checkAutoApplyWindowsPowerMode = new CheckBox();
checkUSBC = new CheckBox();
checkNoOverdrive = new CheckBox();
checkTopmost = new CheckBox();
checkNoOverdrive = new CheckBox();
checkUSBC = new CheckBox();
checkVariBright = new CheckBox();
checkGpuApps = new CheckBox();
checkFnLock = new CheckBox();
groupBindings.SuspendLayout();
tableKeys.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureHelp).BeginInit();
@@ -107,13 +108,15 @@ namespace GHelper
//
// groupBindings
//
groupBindings.AutoSizeMode = AutoSizeMode.GrowAndShrink;
groupBindings.AutoSize = true;
groupBindings.Controls.Add(tableKeys);
groupBindings.Controls.Add(pictureHelp);
groupBindings.Dock = DockStyle.Top;
groupBindings.Location = new Point(10, 10);
groupBindings.Location = new Point(9, 11);
groupBindings.Margin = new Padding(4, 2, 4, 2);
groupBindings.Name = "groupBindings";
groupBindings.Size = new Size(954, 360);
groupBindings.Padding = new Padding(4, 2, 50, 2);
groupBindings.Size = new Size(966, 343);
groupBindings.TabIndex = 0;
groupBindings.TabStop = false;
groupBindings.Text = "Key Bindings";
@@ -142,23 +145,26 @@ namespace GHelper
tableKeys.Controls.Add(textFNF4, 2, 4);
tableKeys.Controls.Add(comboFNC, 1, 5);
tableKeys.Controls.Add(textFNC, 2, 5);
tableKeys.Location = new Point(13, 38);
tableKeys.Dock = DockStyle.Top;
tableKeys.Location = new Point(4, 34);
tableKeys.Margin = new Padding(4, 2, 4, 2);
tableKeys.Name = "tableKeys";
tableKeys.Padding = new Padding(10);
tableKeys.Padding = new Padding(9, 11, 0, 11);
tableKeys.RowCount = 6;
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 48F));
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 22F));
tableKeys.Size = new Size(900, 308);
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 49F));
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 49F));
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 49F));
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 49F));
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 47F));
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 21F));
tableKeys.Size = new Size(912, 307);
tableKeys.TabIndex = 10;
//
// labelFNC
//
labelFNC.AutoSize = true;
labelFNC.Location = new Point(13, 258);
labelFNC.Location = new Point(13, 254);
labelFNC.Margin = new Padding(4, 0, 4, 0);
labelFNC.Name = "labelFNC";
labelFNC.Size = new Size(80, 32);
labelFNC.TabIndex = 15;
@@ -166,35 +172,42 @@ namespace GHelper
//
// textM2
//
textM2.Location = new Point(541, 63);
textM2.Dock = DockStyle.Top;
textM2.Location = new Point(554, 62);
textM2.Margin = new Padding(4, 2, 4, 2);
textM2.Name = "textM2";
textM2.PlaceholderText = "action";
textM2.Size = new Size(346, 39);
textM2.Size = new Size(354, 39);
textM2.TabIndex = 14;
//
// textM1
//
textM1.Location = new Point(541, 13);
textM1.Dock = DockStyle.Top;
textM1.Location = new Point(554, 13);
textM1.Margin = new Padding(4, 2, 4, 2);
textM1.Name = "textM1";
textM1.PlaceholderText = "action";
textM1.Size = new Size(346, 39);
textM1.Size = new Size(354, 39);
textM1.TabIndex = 13;
//
// comboM1
//
comboM1.BorderColor = Color.White;
comboM1.ButtonColor = Color.FromArgb(255, 255, 255);
comboM1.Dock = DockStyle.Top;
comboM1.FormattingEnabled = true;
comboM1.Items.AddRange(new object[] { Strings.Default, Strings.VolumeMute, Strings.PlayPause, Strings.PrintScreen, Strings.ToggleAura, Strings.Custom });
comboM1.Location = new Point(189, 13);
comboM1.Location = new Point(193, 13);
comboM1.Margin = new Padding(4, 2, 4, 2);
comboM1.Name = "comboM1";
comboM1.Size = new Size(312, 40);
comboM1.Size = new Size(353, 40);
comboM1.TabIndex = 11;
//
// labelM1
//
labelM1.AutoSize = true;
labelM1.Location = new Point(13, 10);
labelM1.Location = new Point(13, 11);
labelM1.Margin = new Padding(4, 0, 4, 0);
labelM1.Name = "labelM1";
labelM1.Size = new Size(54, 32);
labelM1.TabIndex = 9;
@@ -204,44 +217,53 @@ namespace GHelper
//
comboM4.BorderColor = Color.White;
comboM4.ButtonColor = Color.FromArgb(255, 255, 255);
comboM4.Dock = DockStyle.Top;
comboM4.FormattingEnabled = true;
comboM4.Items.AddRange(new object[] { Strings.PerformanceMode, Strings.OpenGHelper, Strings.Custom });
comboM4.Location = new Point(189, 163);
comboM4.Location = new Point(193, 160);
comboM4.Margin = new Padding(4, 2, 4, 2);
comboM4.Name = "comboM4";
comboM4.Size = new Size(312, 40);
comboM4.Size = new Size(353, 40);
comboM4.TabIndex = 3;
//
// comboM3
//
comboM3.BorderColor = Color.White;
comboM3.ButtonColor = Color.FromArgb(255, 255, 255);
comboM3.Dock = DockStyle.Top;
comboM3.FormattingEnabled = true;
comboM3.Items.AddRange(new object[] { Strings.Default, Strings.VolumeMute, Strings.PlayPause, Strings.PrintScreen, Strings.ToggleAura, Strings.Custom });
comboM3.Location = new Point(189, 113);
comboM3.Location = new Point(193, 111);
comboM3.Margin = new Padding(4, 2, 4, 2);
comboM3.Name = "comboM3";
comboM3.Size = new Size(312, 40);
comboM3.Size = new Size(353, 40);
comboM3.TabIndex = 1;
//
// textM4
//
textM4.Location = new Point(541, 163);
textM4.Dock = DockStyle.Top;
textM4.Location = new Point(554, 160);
textM4.Margin = new Padding(4, 2, 4, 2);
textM4.Name = "textM4";
textM4.PlaceholderText = "action";
textM4.Size = new Size(346, 39);
textM4.Size = new Size(354, 39);
textM4.TabIndex = 5;
//
// textM3
//
textM3.Location = new Point(541, 113);
textM3.Dock = DockStyle.Top;
textM3.Location = new Point(554, 111);
textM3.Margin = new Padding(4, 2, 4, 2);
textM3.Name = "textM3";
textM3.PlaceholderText = "action";
textM3.Size = new Size(346, 39);
textM3.Size = new Size(354, 39);
textM3.TabIndex = 4;
//
// labelM4
//
labelM4.AutoSize = true;
labelM4.Location = new Point(13, 160);
labelM4.Location = new Point(13, 158);
labelM4.Margin = new Padding(4, 0, 4, 0);
labelM4.Name = "labelM4";
labelM4.Size = new Size(54, 32);
labelM4.TabIndex = 2;
@@ -250,7 +272,8 @@ namespace GHelper
// labelM3
//
labelM3.AutoSize = true;
labelM3.Location = new Point(13, 110);
labelM3.Location = new Point(13, 109);
labelM3.Margin = new Padding(4, 0, 4, 0);
labelM3.Name = "labelM3";
labelM3.Size = new Size(54, 32);
labelM3.TabIndex = 0;
@@ -260,6 +283,7 @@ namespace GHelper
//
labelM2.AutoSize = true;
labelM2.Location = new Point(13, 60);
labelM2.Margin = new Padding(4, 0, 4, 0);
labelM2.Name = "labelM2";
labelM2.Size = new Size(54, 32);
labelM2.TabIndex = 10;
@@ -269,17 +293,20 @@ namespace GHelper
//
comboM2.BorderColor = Color.White;
comboM2.ButtonColor = Color.FromArgb(255, 255, 255);
comboM2.Dock = DockStyle.Top;
comboM2.FormattingEnabled = true;
comboM2.Items.AddRange(new object[] { Strings.Default, Strings.VolumeMute, Strings.PlayPause, Strings.PrintScreen, Strings.ToggleAura, Strings.Custom });
comboM2.Location = new Point(189, 63);
comboM2.Location = new Point(193, 62);
comboM2.Margin = new Padding(4, 2, 4, 2);
comboM2.Name = "comboM2";
comboM2.Size = new Size(312, 40);
comboM2.Size = new Size(353, 40);
comboM2.TabIndex = 12;
//
// labelFNF4
//
labelFNF4.AutoSize = true;
labelFNF4.Location = new Point(13, 210);
labelFNF4.Location = new Point(13, 207);
labelFNF4.Margin = new Padding(4, 0, 4, 0);
labelFNF4.Name = "labelFNF4";
labelFNF4.Size = new Size(90, 32);
labelFNF4.TabIndex = 6;
@@ -289,36 +316,44 @@ namespace GHelper
//
comboFNF4.BorderColor = Color.White;
comboFNF4.ButtonColor = Color.FromArgb(255, 255, 255);
comboFNF4.Dock = DockStyle.Top;
comboFNF4.FormattingEnabled = true;
comboFNF4.Location = new Point(189, 213);
comboFNF4.Location = new Point(193, 209);
comboFNF4.Margin = new Padding(4, 2, 4, 2);
comboFNF4.Name = "comboFNF4";
comboFNF4.Size = new Size(312, 40);
comboFNF4.Size = new Size(353, 40);
comboFNF4.TabIndex = 7;
//
// textFNF4
//
textFNF4.Location = new Point(541, 213);
textFNF4.Dock = DockStyle.Top;
textFNF4.Location = new Point(554, 209);
textFNF4.Margin = new Padding(4, 2, 4, 2);
textFNF4.Name = "textFNF4";
textFNF4.PlaceholderText = "action";
textFNF4.Size = new Size(346, 39);
textFNF4.Size = new Size(354, 39);
textFNF4.TabIndex = 8;
//
// comboFNC
//
comboFNC.BorderColor = Color.White;
comboFNC.ButtonColor = Color.FromArgb(255, 255, 255);
comboFNC.Dock = DockStyle.Top;
comboFNC.FormattingEnabled = true;
comboFNC.Location = new Point(189, 261);
comboFNC.Location = new Point(193, 256);
comboFNC.Margin = new Padding(4, 2, 4, 2);
comboFNC.Name = "comboFNC";
comboFNC.Size = new Size(312, 40);
comboFNC.Size = new Size(353, 40);
comboFNC.TabIndex = 16;
//
// textFNC
//
textFNC.Location = new Point(541, 261);
textFNC.Dock = DockStyle.Top;
textFNC.Location = new Point(554, 256);
textFNC.Margin = new Padding(4, 2, 4, 2);
textFNC.Name = "textFNC";
textFNC.PlaceholderText = "action";
textFNC.Size = new Size(346, 39);
textFNC.Size = new Size(354, 39);
textFNC.TabIndex = 17;
//
// pictureHelp
@@ -326,7 +361,8 @@ namespace GHelper
pictureHelp.BackgroundImage = Resources.icons8_help_64;
pictureHelp.BackgroundImageLayout = ImageLayout.Zoom;
pictureHelp.Cursor = Cursors.Hand;
pictureHelp.Location = new Point(912, 51);
pictureHelp.Location = new Point(921, 51);
pictureHelp.Margin = new Padding(4, 2, 4, 2);
pictureHelp.Name = "pictureHelp";
pictureHelp.Size = new Size(32, 32);
pictureHelp.TabIndex = 9;
@@ -335,19 +371,24 @@ namespace GHelper
// groupLight
//
groupLight.AutoSize = true;
groupLight.AutoSizeMode = AutoSizeMode.GrowAndShrink;
groupLight.Controls.Add(panelBacklightExtra);
groupLight.Controls.Add(panelXMG);
groupLight.Controls.Add(tableBacklight);
groupLight.Dock = DockStyle.Top;
groupLight.Location = new Point(10, 370);
groupLight.Location = new Point(9, 354);
groupLight.Margin = new Padding(4, 2, 4, 2);
groupLight.Name = "groupLight";
groupLight.Size = new Size(954, 563);
groupLight.Padding = new Padding(4, 2, 4, 11);
groupLight.Size = new Size(966, 554);
groupLight.TabIndex = 1;
groupLight.TabStop = false;
groupLight.Text = "Keyboard Backlight";
//
// panelBacklightExtra
//
panelBacklightExtra.AutoSize = true;
panelBacklightExtra.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelBacklightExtra.Controls.Add(numericBacklightPluggedTime);
panelBacklightExtra.Controls.Add(labelBacklightTimeoutPlugged);
panelBacklightExtra.Controls.Add(numericBacklightTime);
@@ -357,46 +398,52 @@ namespace GHelper
panelBacklightExtra.Controls.Add(labelSpeed);
panelBacklightExtra.Controls.Add(comboKeyboardSpeed);
panelBacklightExtra.Dock = DockStyle.Top;
panelBacklightExtra.Location = new Point(3, 319);
panelBacklightExtra.Location = new Point(4, 315);
panelBacklightExtra.Margin = new Padding(4, 2, 4, 2);
panelBacklightExtra.Name = "panelBacklightExtra";
panelBacklightExtra.Size = new Size(948, 241);
panelBacklightExtra.Size = new Size(958, 228);
panelBacklightExtra.TabIndex = 43;
//
// numericBacklightPluggedTime
//
numericBacklightPluggedTime.Location = new Point(655, 181);
numericBacklightPluggedTime.Location = new Point(702, 181);
numericBacklightPluggedTime.Margin = new Padding(4, 2, 4, 2);
numericBacklightPluggedTime.Maximum = new decimal(new int[] { 3600, 0, 0, 0 });
numericBacklightPluggedTime.Name = "numericBacklightPluggedTime";
numericBacklightPluggedTime.Size = new Size(240, 39);
numericBacklightPluggedTime.Size = new Size(193, 39);
numericBacklightPluggedTime.TabIndex = 49;
//
// labelBacklightTimeoutPlugged
//
labelBacklightTimeoutPlugged.Location = new Point(13, 183);
labelBacklightTimeoutPlugged.Margin = new Padding(4, 0, 4, 0);
labelBacklightTimeoutPlugged.Name = "labelBacklightTimeoutPlugged";
labelBacklightTimeoutPlugged.Size = new Size(636, 45);
labelBacklightTimeoutPlugged.Size = new Size(683, 45);
labelBacklightTimeoutPlugged.TabIndex = 48;
labelBacklightTimeoutPlugged.Text = "Seconds to turn off backlight when plugged";
//
// numericBacklightTime
//
numericBacklightTime.Location = new Point(655, 133);
numericBacklightTime.Location = new Point(702, 132);
numericBacklightTime.Margin = new Padding(4, 2, 4, 2);
numericBacklightTime.Maximum = new decimal(new int[] { 3600, 0, 0, 0 });
numericBacklightTime.Name = "numericBacklightTime";
numericBacklightTime.Size = new Size(240, 39);
numericBacklightTime.Size = new Size(193, 39);
numericBacklightTime.TabIndex = 47;
//
// labelBacklightTimeout
//
labelBacklightTimeout.Location = new Point(13, 135);
labelBacklightTimeout.Location = new Point(13, 134);
labelBacklightTimeout.Margin = new Padding(4, 0, 4, 0);
labelBacklightTimeout.Name = "labelBacklightTimeout";
labelBacklightTimeout.Size = new Size(636, 45);
labelBacklightTimeout.Size = new Size(683, 45);
labelBacklightTimeout.TabIndex = 46;
labelBacklightTimeout.Text = "Seconds to turn off backlight on battery";
//
// labelBrightness
//
labelBrightness.Location = new Point(13, 75);
labelBrightness.Margin = new Padding(4, 0, 4, 0);
labelBrightness.Name = "labelBrightness";
labelBrightness.Size = new Size(336, 43);
labelBrightness.TabIndex = 41;
@@ -406,17 +453,19 @@ namespace GHelper
//
trackBrightness.LargeChange = 1;
trackBrightness.Location = new Point(355, 60);
trackBrightness.Margin = new Padding(4, 2, 4, 2);
trackBrightness.Maximum = 3;
trackBrightness.Name = "trackBrightness";
trackBrightness.Size = new Size(558, 90);
trackBrightness.Size = new Size(557, 90);
trackBrightness.TabIndex = 42;
trackBrightness.TickStyle = TickStyle.TopLeft;
//
// labelSpeed
//
labelSpeed.Location = new Point(13, 15);
labelSpeed.Margin = new Padding(4, 0, 4, 0);
labelSpeed.Name = "labelSpeed";
labelSpeed.Size = new Size(538, 40);
labelSpeed.Size = new Size(539, 41);
labelSpeed.TabIndex = 44;
labelSpeed.Text = "Animation Speed";
//
@@ -430,9 +479,9 @@ namespace GHelper
comboKeyboardSpeed.ItemHeight = 32;
comboKeyboardSpeed.Items.AddRange(new object[] { "Slow", "Normal", "Fast" });
comboKeyboardSpeed.Location = new Point(607, 15);
comboKeyboardSpeed.Margin = new Padding(4, 10, 4, 8);
comboKeyboardSpeed.Margin = new Padding(4, 11, 4, 9);
comboKeyboardSpeed.Name = "comboKeyboardSpeed";
comboKeyboardSpeed.Size = new Size(291, 40);
comboKeyboardSpeed.Size = new Size(292, 40);
comboKeyboardSpeed.TabIndex = 43;
comboKeyboardSpeed.TabStop = false;
//
@@ -440,18 +489,20 @@ namespace GHelper
//
panelXMG.Controls.Add(checkXMG);
panelXMG.Dock = DockStyle.Top;
panelXMG.Location = new Point(3, 261);
panelXMG.Location = new Point(4, 257);
panelXMG.Margin = new Padding(4, 2, 4, 2);
panelXMG.Name = "panelXMG";
panelXMG.Size = new Size(948, 58);
panelXMG.Size = new Size(958, 58);
panelXMG.TabIndex = 42;
//
// checkXMG
//
checkXMG.AutoSize = true;
checkXMG.Location = new Point(3, 10);
checkXMG.Location = new Point(4, 11);
checkXMG.Margin = new Padding(4, 2, 4, 2);
checkXMG.Name = "checkXMG";
checkXMG.Padding = new Padding(15, 2, 5, 2);
checkXMG.Size = new Size(178, 40);
checkXMG.Padding = new Padding(15, 2, 6, 2);
checkXMG.Size = new Size(179, 40);
checkXMG.TabIndex = 2;
checkXMG.Text = "XG Mobile";
checkXMG.UseVisualStyleBackColor = true;
@@ -485,7 +536,7 @@ namespace GHelper
tableBacklight.Controls.Add(checkSleepLid, 3, 3);
tableBacklight.Controls.Add(checkShutdownLid, 3, 4);
tableBacklight.Dock = DockStyle.Top;
tableBacklight.Location = new Point(3, 35);
tableBacklight.Location = new Point(4, 34);
tableBacklight.Margin = new Padding(0);
tableBacklight.Name = "tableBacklight";
tableBacklight.RowCount = 5;
@@ -494,27 +545,29 @@ namespace GHelper
tableBacklight.RowStyles.Add(new RowStyle());
tableBacklight.RowStyles.Add(new RowStyle());
tableBacklight.RowStyles.Add(new RowStyle());
tableBacklight.Size = new Size(948, 226);
tableBacklight.Size = new Size(958, 223);
tableBacklight.TabIndex = 41;
//
// labelBacklight
//
labelBacklight.Dock = DockStyle.Fill;
labelBacklight.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelBacklight.Location = new Point(3, 0);
labelBacklight.Location = new Point(4, 0);
labelBacklight.Margin = new Padding(4, 0, 4, 0);
labelBacklight.Name = "labelBacklight";
labelBacklight.Padding = new Padding(10, 5, 5, 5);
labelBacklight.Size = new Size(231, 42);
labelBacklight.Padding = new Padding(9, 4, 6, 4);
labelBacklight.Size = new Size(231, 43);
labelBacklight.TabIndex = 6;
labelBacklight.Text = "Keyboard";
//
// checkAwake
//
checkAwake.Dock = DockStyle.Fill;
checkAwake.Location = new Point(3, 45);
checkAwake.Location = new Point(4, 45);
checkAwake.Margin = new Padding(4, 2, 4, 2);
checkAwake.Name = "checkAwake";
checkAwake.Padding = new Padding(15, 2, 5, 2);
checkAwake.Size = new Size(231, 40);
checkAwake.Padding = new Padding(15, 2, 6, 2);
checkAwake.Size = new Size(231, 41);
checkAwake.TabIndex = 1;
checkAwake.Text = Strings.Awake;
checkAwake.UseVisualStyleBackColor = true;
@@ -522,10 +575,11 @@ namespace GHelper
// checkBoot
//
checkBoot.Dock = DockStyle.Fill;
checkBoot.Location = new Point(3, 91);
checkBoot.Location = new Point(4, 90);
checkBoot.Margin = new Padding(4, 2, 4, 2);
checkBoot.Name = "checkBoot";
checkBoot.Padding = new Padding(15, 2, 5, 2);
checkBoot.Size = new Size(231, 40);
checkBoot.Padding = new Padding(15, 2, 6, 2);
checkBoot.Size = new Size(231, 41);
checkBoot.TabIndex = 2;
checkBoot.Text = Strings.Boot;
checkBoot.UseVisualStyleBackColor = true;
@@ -533,10 +587,11 @@ namespace GHelper
// checkSleep
//
checkSleep.Dock = DockStyle.Fill;
checkSleep.Location = new Point(3, 137);
checkSleep.Location = new Point(4, 135);
checkSleep.Margin = new Padding(4, 2, 4, 2);
checkSleep.Name = "checkSleep";
checkSleep.Padding = new Padding(15, 2, 5, 2);
checkSleep.Size = new Size(231, 40);
checkSleep.Padding = new Padding(15, 2, 6, 2);
checkSleep.Size = new Size(231, 41);
checkSleep.TabIndex = 3;
checkSleep.Text = "Sleep";
checkSleep.UseVisualStyleBackColor = true;
@@ -544,10 +599,11 @@ namespace GHelper
// checkShutdown
//
checkShutdown.Dock = DockStyle.Fill;
checkShutdown.Location = new Point(3, 183);
checkShutdown.Location = new Point(4, 180);
checkShutdown.Margin = new Padding(4, 2, 4, 2);
checkShutdown.Name = "checkShutdown";
checkShutdown.Padding = new Padding(15, 2, 5, 2);
checkShutdown.Size = new Size(231, 40);
checkShutdown.Padding = new Padding(15, 2, 6, 2);
checkShutdown.Size = new Size(231, 41);
checkShutdown.TabIndex = 4;
checkShutdown.Text = Strings.Shutdown;
checkShutdown.UseVisualStyleBackColor = true;
@@ -556,20 +612,22 @@ namespace GHelper
//
labelBacklightLogo.Dock = DockStyle.Fill;
labelBacklightLogo.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelBacklightLogo.Location = new Point(240, 0);
labelBacklightLogo.Location = new Point(243, 0);
labelBacklightLogo.Margin = new Padding(4, 0, 4, 0);
labelBacklightLogo.Name = "labelBacklightLogo";
labelBacklightLogo.Padding = new Padding(10, 5, 5, 5);
labelBacklightLogo.Size = new Size(231, 42);
labelBacklightLogo.Padding = new Padding(9, 4, 6, 4);
labelBacklightLogo.Size = new Size(231, 43);
labelBacklightLogo.TabIndex = 21;
labelBacklightLogo.Text = "Logo";
//
// checkAwakeLogo
//
checkAwakeLogo.Dock = DockStyle.Fill;
checkAwakeLogo.Location = new Point(240, 45);
checkAwakeLogo.Location = new Point(243, 45);
checkAwakeLogo.Margin = new Padding(4, 2, 4, 2);
checkAwakeLogo.Name = "checkAwakeLogo";
checkAwakeLogo.Padding = new Padding(15, 2, 5, 2);
checkAwakeLogo.Size = new Size(231, 40);
checkAwakeLogo.Padding = new Padding(15, 2, 6, 2);
checkAwakeLogo.Size = new Size(231, 41);
checkAwakeLogo.TabIndex = 17;
checkAwakeLogo.Text = Strings.Awake;
checkAwakeLogo.UseVisualStyleBackColor = true;
@@ -577,10 +635,11 @@ namespace GHelper
// checkBootLogo
//
checkBootLogo.Dock = DockStyle.Fill;
checkBootLogo.Location = new Point(240, 91);
checkBootLogo.Location = new Point(243, 90);
checkBootLogo.Margin = new Padding(4, 2, 4, 2);
checkBootLogo.Name = "checkBootLogo";
checkBootLogo.Padding = new Padding(15, 2, 5, 2);
checkBootLogo.Size = new Size(231, 40);
checkBootLogo.Padding = new Padding(15, 2, 6, 2);
checkBootLogo.Size = new Size(231, 41);
checkBootLogo.TabIndex = 18;
checkBootLogo.Text = Strings.Boot;
checkBootLogo.UseVisualStyleBackColor = true;
@@ -588,10 +647,11 @@ namespace GHelper
// checkSleepLogo
//
checkSleepLogo.Dock = DockStyle.Fill;
checkSleepLogo.Location = new Point(240, 137);
checkSleepLogo.Location = new Point(243, 135);
checkSleepLogo.Margin = new Padding(4, 2, 4, 2);
checkSleepLogo.Name = "checkSleepLogo";
checkSleepLogo.Padding = new Padding(15, 2, 5, 2);
checkSleepLogo.Size = new Size(231, 40);
checkSleepLogo.Padding = new Padding(15, 2, 6, 2);
checkSleepLogo.Size = new Size(231, 41);
checkSleepLogo.TabIndex = 19;
checkSleepLogo.Text = Strings.Sleep;
checkSleepLogo.UseVisualStyleBackColor = true;
@@ -599,10 +659,11 @@ namespace GHelper
// checkShutdownLogo
//
checkShutdownLogo.Dock = DockStyle.Fill;
checkShutdownLogo.Location = new Point(240, 183);
checkShutdownLogo.Location = new Point(243, 180);
checkShutdownLogo.Margin = new Padding(4, 2, 4, 2);
checkShutdownLogo.Name = "checkShutdownLogo";
checkShutdownLogo.Padding = new Padding(15, 2, 5, 2);
checkShutdownLogo.Size = new Size(231, 40);
checkShutdownLogo.Padding = new Padding(15, 2, 6, 2);
checkShutdownLogo.Size = new Size(231, 41);
checkShutdownLogo.TabIndex = 20;
checkShutdownLogo.Text = Strings.Shutdown;
checkShutdownLogo.UseVisualStyleBackColor = true;
@@ -611,20 +672,22 @@ namespace GHelper
//
labelBacklightBar.Dock = DockStyle.Fill;
labelBacklightBar.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelBacklightBar.Location = new Point(477, 0);
labelBacklightBar.Location = new Point(482, 0);
labelBacklightBar.Margin = new Padding(4, 0, 4, 0);
labelBacklightBar.Name = "labelBacklightBar";
labelBacklightBar.Padding = new Padding(10, 5, 5, 5);
labelBacklightBar.Size = new Size(231, 42);
labelBacklightBar.Padding = new Padding(9, 4, 6, 4);
labelBacklightBar.Size = new Size(231, 43);
labelBacklightBar.TabIndex = 11;
labelBacklightBar.Text = "Lightbar";
//
// checkAwakeBar
//
checkAwakeBar.Dock = DockStyle.Fill;
checkAwakeBar.Location = new Point(477, 45);
checkAwakeBar.Location = new Point(482, 45);
checkAwakeBar.Margin = new Padding(4, 2, 4, 2);
checkAwakeBar.Name = "checkAwakeBar";
checkAwakeBar.Padding = new Padding(15, 2, 5, 2);
checkAwakeBar.Size = new Size(231, 40);
checkAwakeBar.Padding = new Padding(15, 2, 6, 2);
checkAwakeBar.Size = new Size(231, 41);
checkAwakeBar.TabIndex = 7;
checkAwakeBar.Text = Strings.Awake;
checkAwakeBar.UseVisualStyleBackColor = true;
@@ -632,10 +695,11 @@ namespace GHelper
// checkBootBar
//
checkBootBar.Dock = DockStyle.Fill;
checkBootBar.Location = new Point(477, 91);
checkBootBar.Location = new Point(482, 90);
checkBootBar.Margin = new Padding(4, 2, 4, 2);
checkBootBar.Name = "checkBootBar";
checkBootBar.Padding = new Padding(15, 2, 5, 2);
checkBootBar.Size = new Size(231, 40);
checkBootBar.Padding = new Padding(15, 2, 6, 2);
checkBootBar.Size = new Size(231, 41);
checkBootBar.TabIndex = 8;
checkBootBar.Text = Strings.Boot;
checkBootBar.UseVisualStyleBackColor = true;
@@ -643,10 +707,11 @@ namespace GHelper
// checkSleepBar
//
checkSleepBar.Dock = DockStyle.Fill;
checkSleepBar.Location = new Point(477, 137);
checkSleepBar.Location = new Point(482, 135);
checkSleepBar.Margin = new Padding(4, 2, 4, 2);
checkSleepBar.Name = "checkSleepBar";
checkSleepBar.Padding = new Padding(15, 2, 5, 2);
checkSleepBar.Size = new Size(231, 40);
checkSleepBar.Padding = new Padding(15, 2, 6, 2);
checkSleepBar.Size = new Size(231, 41);
checkSleepBar.TabIndex = 9;
checkSleepBar.Text = Strings.Sleep;
checkSleepBar.UseVisualStyleBackColor = true;
@@ -654,10 +719,11 @@ namespace GHelper
// checkShutdownBar
//
checkShutdownBar.Dock = DockStyle.Fill;
checkShutdownBar.Location = new Point(477, 183);
checkShutdownBar.Location = new Point(482, 180);
checkShutdownBar.Margin = new Padding(4, 2, 4, 2);
checkShutdownBar.Name = "checkShutdownBar";
checkShutdownBar.Padding = new Padding(15, 2, 5, 2);
checkShutdownBar.Size = new Size(231, 40);
checkShutdownBar.Padding = new Padding(15, 2, 6, 2);
checkShutdownBar.Size = new Size(231, 41);
checkShutdownBar.TabIndex = 10;
checkShutdownBar.Text = Strings.Shutdown;
checkShutdownBar.UseVisualStyleBackColor = true;
@@ -666,20 +732,22 @@ namespace GHelper
//
labelBacklightLid.Dock = DockStyle.Fill;
labelBacklightLid.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelBacklightLid.Location = new Point(714, 0);
labelBacklightLid.Location = new Point(721, 0);
labelBacklightLid.Margin = new Padding(4, 0, 4, 0);
labelBacklightLid.Name = "labelBacklightLid";
labelBacklightLid.Padding = new Padding(10, 5, 5, 5);
labelBacklightLid.Size = new Size(231, 42);
labelBacklightLid.Padding = new Padding(9, 4, 6, 4);
labelBacklightLid.Size = new Size(233, 43);
labelBacklightLid.TabIndex = 16;
labelBacklightLid.Text = "Lid";
//
// checkAwakeLid
//
checkAwakeLid.Dock = DockStyle.Fill;
checkAwakeLid.Location = new Point(714, 45);
checkAwakeLid.Location = new Point(721, 45);
checkAwakeLid.Margin = new Padding(4, 2, 4, 2);
checkAwakeLid.Name = "checkAwakeLid";
checkAwakeLid.Padding = new Padding(15, 2, 5, 2);
checkAwakeLid.Size = new Size(231, 40);
checkAwakeLid.Padding = new Padding(15, 2, 6, 2);
checkAwakeLid.Size = new Size(233, 41);
checkAwakeLid.TabIndex = 12;
checkAwakeLid.Text = Strings.Awake;
checkAwakeLid.UseVisualStyleBackColor = true;
@@ -687,10 +755,11 @@ namespace GHelper
// checkBootLid
//
checkBootLid.Dock = DockStyle.Fill;
checkBootLid.Location = new Point(714, 91);
checkBootLid.Location = new Point(721, 90);
checkBootLid.Margin = new Padding(4, 2, 4, 2);
checkBootLid.Name = "checkBootLid";
checkBootLid.Padding = new Padding(15, 2, 5, 2);
checkBootLid.Size = new Size(231, 40);
checkBootLid.Padding = new Padding(15, 2, 6, 2);
checkBootLid.Size = new Size(233, 41);
checkBootLid.TabIndex = 13;
checkBootLid.Text = Strings.Boot;
checkBootLid.UseVisualStyleBackColor = true;
@@ -698,10 +767,11 @@ namespace GHelper
// checkSleepLid
//
checkSleepLid.Dock = DockStyle.Fill;
checkSleepLid.Location = new Point(714, 137);
checkSleepLid.Location = new Point(721, 135);
checkSleepLid.Margin = new Padding(4, 2, 4, 2);
checkSleepLid.Name = "checkSleepLid";
checkSleepLid.Padding = new Padding(15, 2, 5, 2);
checkSleepLid.Size = new Size(231, 40);
checkSleepLid.Padding = new Padding(15, 2, 6, 2);
checkSleepLid.Size = new Size(233, 41);
checkSleepLid.TabIndex = 14;
checkSleepLid.Text = Strings.Sleep;
checkSleepLid.UseVisualStyleBackColor = true;
@@ -709,90 +779,120 @@ namespace GHelper
// checkShutdownLid
//
checkShutdownLid.Dock = DockStyle.Fill;
checkShutdownLid.Location = new Point(714, 183);
checkShutdownLid.Location = new Point(721, 180);
checkShutdownLid.Margin = new Padding(4, 2, 4, 2);
checkShutdownLid.Name = "checkShutdownLid";
checkShutdownLid.Padding = new Padding(15, 2, 5, 2);
checkShutdownLid.Size = new Size(231, 40);
checkShutdownLid.Padding = new Padding(15, 2, 6, 2);
checkShutdownLid.Size = new Size(233, 41);
checkShutdownLid.TabIndex = 15;
checkShutdownLid.Text = Strings.Shutdown;
checkShutdownLid.UseVisualStyleBackColor = true;
//
// groupOther
//
groupOther.Controls.Add(checkFnLock);
groupOther.Controls.Add(checkGpuApps);
groupOther.AutoSize = true;
groupOther.AutoSizeMode = AutoSizeMode.GrowAndShrink;
groupOther.Controls.Add(checkAutoApplyWindowsPowerMode);
groupOther.Controls.Add(checkUSBC);
groupOther.Controls.Add(checkNoOverdrive);
groupOther.Controls.Add(checkTopmost);
groupOther.Controls.Add(checkNoOverdrive);
groupOther.Controls.Add(checkUSBC);
groupOther.Controls.Add(checkVariBright);
groupOther.Controls.Add(checkGpuApps);
groupOther.Controls.Add(checkFnLock);
groupOther.Dock = DockStyle.Top;
groupOther.Location = new Point(10, 933);
groupOther.Location = new Point(9, 908);
groupOther.Margin = new Padding(4, 2, 4, 2);
groupOther.Name = "groupOther";
groupOther.Size = new Size(954, 300);
groupOther.Padding = new Padding(20, 2, 4, 10);
groupOther.Size = new Size(966, 296);
groupOther.TabIndex = 2;
groupOther.TabStop = false;
groupOther.Text = "Other";
//
// checkFnLock
//
checkFnLock.AutoSize = true;
checkFnLock.Location = new Point(25, 44);
checkFnLock.MaximumSize = new Size(780, 0);
checkFnLock.Name = "checkFnLock";
checkFnLock.Size = new Size(397, 36);
checkFnLock.TabIndex = 49;
checkFnLock.Text = "Process Fn+F hotkeys without Fn";
checkFnLock.UseVisualStyleBackColor = true;
//
// checkGpuApps
//
checkGpuApps.AutoSize = true;
checkGpuApps.Location = new Point(25, 83);
checkGpuApps.Name = "checkGpuApps";
checkGpuApps.Size = new Size(544, 36);
checkGpuApps.TabIndex = 48;
checkGpuApps.Text = "Stop all apps using GPU when switching to Eco";
checkGpuApps.UseVisualStyleBackColor = true;
//
// checkAutoApplyWindowsPowerMode
//
checkAutoApplyWindowsPowerMode.AutoSize = true;
checkAutoApplyWindowsPowerMode.Location = new Point(25, 251);
checkAutoApplyWindowsPowerMode.Dock = DockStyle.Top;
checkAutoApplyWindowsPowerMode.Location = new Point(20, 250);
checkAutoApplyWindowsPowerMode.Margin = new Padding(4, 2, 4, 2);
checkAutoApplyWindowsPowerMode.Name = "checkAutoApplyWindowsPowerMode";
checkAutoApplyWindowsPowerMode.Size = new Size(416, 36);
checkAutoApplyWindowsPowerMode.Size = new Size(942, 36);
checkAutoApplyWindowsPowerMode.TabIndex = 47;
checkAutoApplyWindowsPowerMode.Text = "Auto Adjust Windows Power Mode";
checkAutoApplyWindowsPowerMode.UseVisualStyleBackColor = true;
//
// checkUSBC
// checkTopmost
//
checkUSBC.AutoSize = true;
checkUSBC.Location = new Point(25, 125);
checkUSBC.Name = "checkUSBC";
checkUSBC.Size = new Size(659, 36);
checkUSBC.TabIndex = 4;
checkUSBC.Text = "Keep GPU disabled on USB-C charger in Optimized mode";
checkUSBC.UseVisualStyleBackColor = true;
checkTopmost.AutoSize = true;
checkTopmost.Dock = DockStyle.Top;
checkTopmost.Location = new Point(20, 214);
checkTopmost.Margin = new Padding(4, 2, 4, 2);
checkTopmost.Name = "checkTopmost";
checkTopmost.Size = new Size(942, 36);
checkTopmost.TabIndex = 1;
checkTopmost.Text = Strings.WindowTop;
checkTopmost.UseVisualStyleBackColor = true;
//
// checkNoOverdrive
//
checkNoOverdrive.AutoSize = true;
checkNoOverdrive.Location = new Point(25, 167);
checkNoOverdrive.Dock = DockStyle.Top;
checkNoOverdrive.Location = new Point(20, 178);
checkNoOverdrive.Margin = new Padding(4, 2, 4, 2);
checkNoOverdrive.Name = "checkNoOverdrive";
checkNoOverdrive.Size = new Size(307, 36);
checkNoOverdrive.Size = new Size(942, 36);
checkNoOverdrive.TabIndex = 3;
checkNoOverdrive.Text = Strings.DisableOverdrive;
checkNoOverdrive.UseVisualStyleBackColor = true;
//
// checkTopmost
// checkUSBC
//
checkTopmost.AutoSize = true;
checkTopmost.Location = new Point(25, 209);
checkTopmost.Name = "checkTopmost";
checkTopmost.Size = new Size(390, 36);
checkTopmost.TabIndex = 1;
checkTopmost.Text = Strings.WindowTop;
checkTopmost.UseVisualStyleBackColor = true;
checkUSBC.AutoSize = true;
checkUSBC.Dock = DockStyle.Top;
checkUSBC.Location = new Point(20, 142);
checkUSBC.Margin = new Padding(4, 2, 4, 2);
checkUSBC.Name = "checkUSBC";
checkUSBC.Size = new Size(942, 36);
checkUSBC.TabIndex = 4;
checkUSBC.Text = "Keep GPU disabled on USB-C charger in Optimized mode";
checkUSBC.UseVisualStyleBackColor = true;
//
// checkVariBright
//
checkVariBright.AutoSize = true;
checkVariBright.Dock = DockStyle.Top;
checkVariBright.Location = new Point(20, 106);
checkVariBright.Margin = new Padding(4, 2, 4, 2);
checkVariBright.Name = "checkVariBright";
checkVariBright.Size = new Size(942, 36);
checkVariBright.TabIndex = 50;
checkVariBright.Text = "AMD Display VariBright";
checkVariBright.UseVisualStyleBackColor = true;
//
// checkGpuApps
//
checkGpuApps.AutoSize = true;
checkGpuApps.Dock = DockStyle.Top;
checkGpuApps.Location = new Point(20, 70);
checkGpuApps.Margin = new Padding(4, 2, 4, 2);
checkGpuApps.Name = "checkGpuApps";
checkGpuApps.Size = new Size(942, 36);
checkGpuApps.TabIndex = 48;
checkGpuApps.Text = "Stop all apps using GPU when switching to Eco";
checkGpuApps.UseVisualStyleBackColor = true;
//
// checkFnLock
//
checkFnLock.AutoSize = true;
checkFnLock.Dock = DockStyle.Top;
checkFnLock.Location = new Point(20, 34);
checkFnLock.Margin = new Padding(4, 2, 4, 2);
checkFnLock.MaximumSize = new Size(780, 0);
checkFnLock.Name = "checkFnLock";
checkFnLock.Size = new Size(780, 36);
checkFnLock.TabIndex = 49;
checkFnLock.Text = "Process Fn+F hotkeys without Fn";
checkFnLock.UseVisualStyleBackColor = true;
//
// Extra
//
@@ -800,17 +900,18 @@ namespace GHelper
AutoScaleMode = AutoScaleMode.Font;
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
ClientSize = new Size(974, 1247);
ClientSize = new Size(984, 1244);
Controls.Add(groupOther);
Controls.Add(groupLight);
Controls.Add(groupBindings);
FormBorderStyle = FormBorderStyle.FixedSingle;
Margin = new Padding(4, 2, 4, 2);
MaximizeBox = false;
MdiChildrenMinimizedAnchorBottom = false;
MinimizeBox = false;
MinimumSize = new Size(1000, 0);
MinimumSize = new Size(1010, 71);
Name = "Extra";
Padding = new Padding(10);
Padding = new Padding(9, 11, 9, 11);
ShowIcon = false;
ShowInTaskbar = false;
Text = "Extra Settings";
@@ -897,5 +998,6 @@ namespace GHelper
private Label labelFNC;
private RComboBox comboFNC;
private TextBox textFNC;
private CheckBox checkVariBright;
}
}

View File

@@ -1,4 +1,5 @@
using CustomControls;
using GHelper.Gpu;
using Microsoft.VisualBasic.Devices;
using System.Diagnostics;
@@ -227,6 +228,44 @@ namespace GHelper
checkFnLock.CheckedChanged += CheckFnLock_CheckedChanged; ;
pictureHelp.Click += PictureHelp_Click;
InitVariBright();
}
private void InitVariBright()
{
try
{
using (var amdControl = new AmdGpuControl())
{
int variBrightSupported = 0, VariBrightEnabled;
if (amdControl.GetVariBright(out variBrightSupported, out VariBrightEnabled))
{
Logger.WriteLine("Varibright: " + variBrightSupported + "," + VariBrightEnabled);
checkVariBright.Checked = (VariBrightEnabled == 3);
}
checkVariBright.Visible = (variBrightSupported > 0);
checkVariBright.CheckedChanged += CheckVariBright_CheckedChanged;
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
checkVariBright.Visible = false;
}
}
private void CheckVariBright_CheckedChanged(object? sender, EventArgs e)
{
using (var amdControl = new AmdGpuControl())
{
amdControl.SetVariBright(checkVariBright.Checked ? 1 : 0);
ProcessHelper.KillByName("RadeonSoftware");
}
}
private void CheckFnLock_CheckedChanged(object? sender, EventArgs e)

49
app/Fans.Designer.cs generated
View File

@@ -31,14 +31,14 @@ namespace GHelper
/// </summary>
private void InitializeComponent()
{
ChartArea chartArea5 = new ChartArea();
Title title5 = new Title();
ChartArea chartArea6 = new ChartArea();
Title title6 = new Title();
ChartArea chartArea7 = new ChartArea();
Title title7 = new Title();
ChartArea chartArea8 = new ChartArea();
Title title8 = new Title();
ChartArea chartArea1 = new ChartArea();
Title title1 = new Title();
ChartArea chartArea2 = new ChartArea();
Title title2 = new Title();
ChartArea chartArea3 = new ChartArea();
Title title3 = new Title();
ChartArea chartArea4 = new ChartArea();
Title title4 = new Title();
panelFans = new Panel();
labelTip = new Label();
tableFanCharts = new TableLayoutPanel();
@@ -181,8 +181,8 @@ namespace GHelper
//
// chartGPU
//
chartArea5.Name = "ChartArea1";
chartGPU.ChartAreas.Add(chartArea5);
chartArea1.Name = "ChartArea1";
chartGPU.ChartAreas.Add(chartArea1);
chartGPU.Dock = DockStyle.Fill;
chartGPU.Location = new Point(12, 289);
chartGPU.Margin = new Padding(2, 10, 2, 10);
@@ -190,13 +190,13 @@ namespace GHelper
chartGPU.Size = new Size(781, 259);
chartGPU.TabIndex = 17;
chartGPU.Text = "chartGPU";
title5.Name = "Title1";
chartGPU.Titles.Add(title5);
title1.Name = "Title1";
chartGPU.Titles.Add(title1);
//
// chartCPU
//
chartArea6.Name = "ChartArea1";
chartCPU.ChartAreas.Add(chartArea6);
chartArea2.Name = "ChartArea1";
chartCPU.ChartAreas.Add(chartArea2);
chartCPU.Dock = DockStyle.Fill;
chartCPU.Location = new Point(12, 10);
chartCPU.Margin = new Padding(2, 10, 2, 10);
@@ -204,13 +204,13 @@ namespace GHelper
chartCPU.Size = new Size(781, 259);
chartCPU.TabIndex = 14;
chartCPU.Text = "chartCPU";
title6.Name = "Title1";
chartCPU.Titles.Add(title6);
title2.Name = "Title1";
chartCPU.Titles.Add(title2);
//
// chartXGM
//
chartArea7.Name = "ChartAreaXGM";
chartXGM.ChartAreas.Add(chartArea7);
chartArea3.Name = "ChartAreaXGM";
chartXGM.ChartAreas.Add(chartArea3);
chartXGM.Dock = DockStyle.Fill;
chartXGM.Location = new Point(12, 847);
chartXGM.Margin = new Padding(2, 10, 2, 10);
@@ -218,14 +218,14 @@ namespace GHelper
chartXGM.Size = new Size(781, 261);
chartXGM.TabIndex = 14;
chartXGM.Text = "chartXGM";
title7.Name = "Title4";
chartXGM.Titles.Add(title7);
title3.Name = "Title4";
chartXGM.Titles.Add(title3);
chartXGM.Visible = false;
//
// chartMid
//
chartArea8.Name = "ChartArea3";
chartMid.ChartAreas.Add(chartArea8);
chartArea4.Name = "ChartArea3";
chartMid.ChartAreas.Add(chartArea4);
chartMid.Dock = DockStyle.Fill;
chartMid.Location = new Point(12, 568);
chartMid.Margin = new Padding(2, 10, 2, 10);
@@ -233,8 +233,8 @@ namespace GHelper
chartMid.Size = new Size(781, 259);
chartMid.TabIndex = 14;
chartMid.Text = "chartMid";
title8.Name = "Title3";
chartMid.Titles.Add(title8);
title4.Name = "Title3";
chartMid.Titles.Add(title4);
chartMid.Visible = false;
//
// panelTitleFans
@@ -847,7 +847,6 @@ namespace GHelper
Controls.Add(panelSliders);
Margin = new Padding(4, 2, 4, 2);
MaximizeBox = false;
MdiChildrenMinimizedAnchorBottom = false;
MinimizeBox = false;
MinimumSize = new Size(0, 1200);
Name = "Fans";

View File

@@ -1,5 +1,6 @@
using CustomControls;
using GHelper.Gpu;
using System;
using System.Diagnostics;
using System.Windows.Forms.DataVisualization.Charting;
@@ -8,7 +9,9 @@ namespace GHelper
public partial class Fans : RForm
{
int curIndex = -1;
DataPoint curPoint = null;
Series seriesCPU;
Series seriesGPU;
Series seriesMid;
@@ -639,6 +642,8 @@ namespace GHelper
private void ChartCPU_MouseUp(object? sender, MouseEventArgs e)
{
curPoint = null;
curIndex = -1;
labelTip.Visible = false;
SaveProfile(seriesCPU, AsusFan.CPU);
@@ -668,9 +673,12 @@ namespace GHelper
bool tip = false;
HitTestResult hit = chart.HitTest(e.X, e.Y);
Series series = chart.Series[0];
if (hit.Series is not null && hit.PointIndex >= 0)
{
curPoint = hit.Series.Points[hit.PointIndex];
curIndex = hit.PointIndex;
curPoint = hit.Series.Points[curIndex];
tip = true;
}
@@ -697,11 +705,18 @@ namespace GHelper
if (e.Button.HasFlag(MouseButtons.Left))
{
curPoint.XValue = dx;
curPoint.YValues[0] = dy;
double deltaY = dy - curPoint.YValues[0];
double deltaX = dx - curPoint.XValue;
if (hit.Series is not null)
AdjustAllLevels(hit.PointIndex, dx, dy, hit.Series);
curPoint.XValue = dx;
if (Control.ModifierKeys == Keys.Shift)
AdjustAll(0, deltaY, series);
else
{
curPoint.YValues[0] = dy;
AdjustAllLevels(curIndex, dx, dy, series);
}
tip = true;
}
@@ -724,6 +739,15 @@ namespace GHelper
}
private void AdjustAll(double deltaX, double deltaY, Series series)
{
for (int i = 0; i < series.Points.Count; i++)
{
series.Points[i].XValue = Math.Max(20, Math.Min(100, series.Points[i].XValue + deltaX));
series.Points[i].YValues[0] = Math.Max(0, Math.Min(100, series.Points[i].YValues[0]+deltaY));
}
}
private void AdjustAllLevels(int index, double curXVal, double curYVal, Series series)
{

View File

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

View File

@@ -1,10 +1,37 @@
using System.Diagnostics;
using System.Runtime.InteropServices;
using static AmdAdl2.Adl2.NativeMethods;
namespace AmdAdl2;
#region Export Struct
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ADLSGApplicationInfo
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string strFileName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string strFilePath;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
public string strVersion;
public long timeStamp;
public uint iProfileExists;
public uint iGPUAffinity;
public ADLBdf GPUBdf;
}
[StructLayout(LayoutKind.Sequential)]
public struct ADLBdf
{
public int iBus;
public int iDevice;
public int iFunction;
}
[StructLayout(LayoutKind.Sequential)]
public struct ADLSingleSensorData {
public int Supported;
@@ -481,5 +508,71 @@ public class Adl2 {
[DllImport(Atiadlxx_FileName)]
public static extern int ADL2_Adapter_ASICFamilyType_Get(IntPtr adlContextHandle, int adapterIndex, out ADLAsicFamilyType asicFamilyType, out int asicFamilyTypeValids);
[DllImport(Atiadlxx_FileName)]
public static extern int ADL2_SwitchableGraphics_Applications_Get(
IntPtr context,
int iListType,
out int lpNumApps,
out IntPtr lppAppList);
[DllImport(Atiadlxx_FileName)]
public static extern int ADL2_Adapter_VariBright_Caps(
IntPtr context,
int iAdapterIndex,
out int iSupported,
out int iEnabled,
out int iVersion);
[DllImport(Atiadlxx_FileName)]
public static extern int ADL2_Adapter_VariBrightEnable_Set(
IntPtr context,
int iAdapterIndex,
int iEnabled);
// Clocks
[StructLayout(LayoutKind.Sequential)]
public struct ADLODNPerformanceLevel
{
public int iClock;
public int iVddc;
public int iEnabled;
}
[StructLayout(LayoutKind.Sequential)]
public struct ADLODNPerformanceLevels
{
public int iSize;
public int iMode;
public int iNumberOfPerformanceLevels;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1)]
public ADLODNPerformanceLevel[] aLevels;
}
[DllImport(Atiadlxx_FileName)]
public static extern int ADL2_OverdriveN_SystemClocks_Get(
IntPtr context,
int adapterIndex,
ref ADLODNPerformanceLevels performanceLevels);
[DllImport(Atiadlxx_FileName)]
public static extern int ADL2_OverdriveN_SystemClocks_Set(
IntPtr context,
int adapterIndex,
ref ADLODNPerformanceLevels performanceLevels);
[DllImport(Atiadlxx_FileName)]
public static extern int ADL2_OverdriveN_MemoryClocks_Get(
IntPtr context,
int adapterIndex,
ref ADLODNPerformanceLevels performanceLevels);
[DllImport(Atiadlxx_FileName)]
public static extern int ADL2_OverdriveN_MemoryClocks_Set(
IntPtr context,
int adapterIndex,
ref ADLODNPerformanceLevels performanceLevels);
}
}

View File

@@ -1,10 +1,12 @@
using System.Runtime.InteropServices;
using AmdAdl2;
using System.Runtime.InteropServices;
using static AmdAdl2.Adl2.NativeMethods;
namespace GHelper.Gpu;
// Reference: https://github.com/GPUOpen-LibrariesAndSDKs/display-library/blob/master/Sample-Managed/Program.cs
public class AmdGpuControl : IGpuControl {
public class AmdGpuControl : IGpuControl
{
private bool _isReady;
private IntPtr _adlContextHandle;
private readonly ADLAdapterInfo _internalDiscreteAdapter;
@@ -12,64 +14,79 @@ public class AmdGpuControl : IGpuControl {
public bool IsNvidia => false;
public string FullName => _internalDiscreteAdapter!.AdapterName;
public AmdGpuControl() {
private ADLAdapterInfo? FindByType(ADLAsicFamilyType type = ADLAsicFamilyType.Discrete)
{
ADL2_Adapter_NumberOfAdapters_Get(_adlContextHandle, out int numberOfAdapters);
if (numberOfAdapters <= 0)
return null;
ADLAdapterInfoArray osAdapterInfoData = new();
int osAdapterInfoDataSize = Marshal.SizeOf(osAdapterInfoData);
IntPtr AdapterBuffer = Marshal.AllocCoTaskMem(osAdapterInfoDataSize);
Marshal.StructureToPtr(osAdapterInfoData, AdapterBuffer, false);
if (ADL2_Adapter_AdapterInfo_Get(_adlContextHandle, AdapterBuffer, osAdapterInfoDataSize) != Adl2.ADL_SUCCESS)
return null;
osAdapterInfoData = (ADLAdapterInfoArray)Marshal.PtrToStructure(AdapterBuffer, osAdapterInfoData.GetType())!;
const int amdVendorId = 1002;
// Determine which GPU is internal discrete AMD GPU
ADLAdapterInfo internalDiscreteAdapter =
osAdapterInfoData.ADLAdapterInfo
.FirstOrDefault(adapter =>
{
if (adapter.Exist == 0 || adapter.Present == 0)
return false;
if (adapter.VendorID != amdVendorId)
return false;
if (ADL2_Adapter_ASICFamilyType_Get(_adlContextHandle, adapter.AdapterIndex, out ADLAsicFamilyType asicFamilyType, out int asicFamilyTypeValids) != Adl2.ADL_SUCCESS)
return false;
asicFamilyType = (ADLAsicFamilyType)((int)asicFamilyType & asicFamilyTypeValids);
return (asicFamilyType & type) != 0;
});
if (internalDiscreteAdapter.Exist == 0)
return null;
return internalDiscreteAdapter;
}
public AmdGpuControl()
{
if (!Adl2.Load())
return;
if (Adl2.ADL2_Main_Control_Create(1, out _adlContextHandle) != Adl2.ADL_SUCCESS)
return;
Adl2.NativeMethods.ADL2_Adapter_NumberOfAdapters_Get(_adlContextHandle, out int numberOfAdapters);
if (numberOfAdapters <= 0)
return;
ADLAdapterInfo? internalDiscreteAdapter = FindByType(ADLAsicFamilyType.Discrete);
ADLAdapterInfoArray osAdapterInfoData = new();
int osAdapterInfoDataSize = Marshal.SizeOf(osAdapterInfoData);
IntPtr AdapterBuffer = Marshal.AllocCoTaskMem(osAdapterInfoDataSize);
Marshal.StructureToPtr(osAdapterInfoData, AdapterBuffer, false);
if (Adl2.NativeMethods.ADL2_Adapter_AdapterInfo_Get(_adlContextHandle, AdapterBuffer, osAdapterInfoDataSize) != Adl2.ADL_SUCCESS)
return;
if (internalDiscreteAdapter is not null)
{
_internalDiscreteAdapter = (ADLAdapterInfo)internalDiscreteAdapter;
_isReady = true;
}
osAdapterInfoData = (ADLAdapterInfoArray) Marshal.PtrToStructure(AdapterBuffer, osAdapterInfoData.GetType())!;
const int amdVendorId = 1002;
// Determine which GPU is internal discrete AMD GPU
ADLAdapterInfo internalDiscreteAdapter =
osAdapterInfoData.ADLAdapterInfo
.FirstOrDefault(adapter => {
if (adapter.Exist == 0 || adapter.Present == 0)
return false;
if (adapter.VendorID != amdVendorId)
return false;
if (Adl2.NativeMethods.ADL2_Adapter_ASICFamilyType_Get(_adlContextHandle, adapter.AdapterIndex, out ADLAsicFamilyType asicFamilyType, out int asicFamilyTypeValids) != Adl2.ADL_SUCCESS)
return false;
asicFamilyType = (ADLAsicFamilyType) ((int) asicFamilyType & asicFamilyTypeValids);
// FIXME: is this correct for G14 2022?
return (asicFamilyType & ADLAsicFamilyType.Discrete) != 0;
});
if (internalDiscreteAdapter.Exist == 0)
return;
_internalDiscreteAdapter = internalDiscreteAdapter;
_isReady = true;
}
public bool IsValid => _isReady && _adlContextHandle != IntPtr.Zero;
public int? GetCurrentTemperature() {
public int? GetCurrentTemperature()
{
if (!IsValid)
return null;
if (Adl2.NativeMethods.ADL2_New_QueryPMLogData_Get(_adlContextHandle, _internalDiscreteAdapter.AdapterIndex, out ADLPMLogDataOutput adlpmLogDataOutput) != Adl2.ADL_SUCCESS)
if (ADL2_New_QueryPMLogData_Get(_adlContextHandle, _internalDiscreteAdapter.AdapterIndex, out ADLPMLogDataOutput adlpmLogDataOutput) != Adl2.ADL_SUCCESS)
return null;
ADLSingleSensorData temperatureSensor = adlpmLogDataOutput.Sensors[(int) ADLSensorType.PMLOG_TEMPERATURE_EDGE];
ADLSingleSensorData temperatureSensor = adlpmLogDataOutput.Sensors[(int)ADLSensorType.PMLOG_TEMPERATURE_EDGE];
if (temperatureSensor.Supported == 0)
return null;
@@ -79,10 +96,9 @@ public class AmdGpuControl : IGpuControl {
public int? GetGpuUse()
{
if (!IsValid)
return null;
if (!IsValid) return null;
if (Adl2.NativeMethods.ADL2_New_QueryPMLogData_Get(_adlContextHandle, _internalDiscreteAdapter.AdapterIndex, out ADLPMLogDataOutput adlpmLogDataOutput) != Adl2.ADL_SUCCESS)
if (ADL2_New_QueryPMLogData_Get(_adlContextHandle, _internalDiscreteAdapter.AdapterIndex, out ADLPMLogDataOutput adlpmLogDataOutput) != Adl2.ADL_SUCCESS)
return null;
ADLSingleSensorData gpuUsage = adlpmLogDataOutput.Sensors[(int)ADLSensorType.PMLOG_INFO_ACTIVITY_GFX];
@@ -94,20 +110,125 @@ public class AmdGpuControl : IGpuControl {
}
private void ReleaseUnmanagedResources() {
if (_adlContextHandle != IntPtr.Zero) {
Adl2.NativeMethods.ADL2_Main_Control_Destroy(_adlContextHandle);
public bool SetVariBright(int enabled)
{
if (_adlContextHandle == IntPtr.Zero) return false;
ADLAdapterInfo? iGPU = FindByType(ADLAsicFamilyType.Integrated);
if (iGPU is null) return false;
return ADL2_Adapter_VariBrightEnable_Set(_adlContextHandle, ((ADLAdapterInfo)iGPU).AdapterIndex, enabled) == Adl2.ADL_SUCCESS;
}
public bool GetVariBright(out int supported, out int enabled)
{
supported = enabled = -1;
if (_adlContextHandle == IntPtr.Zero) return false;
ADLAdapterInfo? iGPU = FindByType(ADLAsicFamilyType.Integrated);
if (iGPU is null) return false;
if (ADL2_Adapter_VariBright_Caps(_adlContextHandle, ((ADLAdapterInfo)iGPU).AdapterIndex, out int supportedOut, out int enabledOut, out int version) != Adl2.ADL_SUCCESS)
return false;
supported = supportedOut;
enabled = enabledOut;
return true;
}
public ADLODNPerformanceLevels? GetGPUClocks()
{
if (!IsValid) return null;
ADLODNPerformanceLevels performanceLevels = new();
ADL2_OverdriveN_SystemClocks_Get(_adlContextHandle, _internalDiscreteAdapter.AdapterIndex, ref performanceLevels);
return performanceLevels;
}
public void KillGPUApps()
{
if (!IsValid) return;
IntPtr appInfoPtr = IntPtr.Zero;
int appCount = 0;
try
{
// Get switchable graphics applications information
var result = ADL2_SwitchableGraphics_Applications_Get(_adlContextHandle, 2, out appCount, out appInfoPtr);
if (result != 0)
{
throw new Exception("Failed to get switchable graphics applications. Error code: " + result);
}
// Convert the application data pointers to an array of structs
var appInfoArray = new ADLSGApplicationInfo[appCount];
IntPtr currentPtr = appInfoPtr;
for (int i = 0; i < appCount; i++)
{
appInfoArray[i] = Marshal.PtrToStructure<ADLSGApplicationInfo>(currentPtr);
currentPtr = IntPtr.Add(currentPtr, Marshal.SizeOf<ADLSGApplicationInfo>());
}
var appNames = new List<string>();
for (int i = 0; i < appCount; i++)
{
if (appInfoArray[i].iGPUAffinity == 1)
{
Logger.WriteLine(appInfoArray[i].strFileName + ":" + appInfoArray[i].iGPUAffinity + "(" + appInfoArray[i].timeStamp + ")");
appNames.Add(Path.GetFileNameWithoutExtension(appInfoArray[i].strFileName));
}
}
List<string> immune = new() { "svchost", "system", "ntoskrnl", "csrss", "winlogon", "wininit", "smss" };
foreach (string kill in appNames)
if (!immune.Contains(kill.ToLower()))
ProcessHelper.KillByName(kill);
}
catch (Exception ex)
{
Logger.WriteLine(ex.Message);
}
finally
{
// Clean up resources
if (appInfoPtr != IntPtr.Zero)
{
Marshal.FreeCoTaskMem(appInfoPtr);
}
}
}
private void ReleaseUnmanagedResources()
{
if (_adlContextHandle != IntPtr.Zero)
{
ADL2_Main_Control_Destroy(_adlContextHandle);
_adlContextHandle = IntPtr.Zero;
_isReady = false;
}
}
public void Dispose() {
public void Dispose()
{
ReleaseUnmanagedResources();
GC.SuppressFinalize(this);
}
~AmdGpuControl() {
~AmdGpuControl()
{
ReleaseUnmanagedResources();
}
}

View File

@@ -6,4 +6,6 @@ public interface IGpuControl : IDisposable {
public string FullName { get; }
int? GetCurrentTemperature();
int? GetGpuUse();
void KillGPUApps();
}

View File

@@ -55,26 +55,13 @@ public class NvidiaGpuControl : IGpuControl
try
{
Process[] processes = internalGpu.GetActiveApplications();
foreach (Process process in processes)
{
try
{
process?.Kill();
Logger.WriteLine("Stopped: " + process.ProcessName);
}
catch (Exception ex)
{
Logger.WriteLine(ex.Message);
}
}
foreach (Process process in processes) ProcessHelper.KillByProcess(process);
}
catch (Exception ex)
{
Logger.WriteLine(ex.Message);
}
//NVIDIA.RestartDisplayDriver();
}

View File

@@ -31,7 +31,7 @@ public static class HardwareControl
{
AppConfig.setConfig("fan_max", fan);
}
private static string FormatFan(int fan)
public static string FormatFan(int fan)
{
// fix for old models
if (fan < 0)
@@ -187,7 +187,7 @@ public static class HardwareControl
public static void KillGPUApps()
{
List<string> tokill = new() { "EADesktop", "RadeonSoftware", "epicgameslauncher" };
List<string> tokill = new() { "EADesktop", "RadeonSoftware", "epicgameslauncher", "ASUSSmartDisplayControl" };
if (AppConfig.isConfig("kill_gpu_apps"))
{
@@ -196,24 +196,11 @@ public static class HardwareControl
tokill.Add("nvcplui");
}
foreach (string kill in tokill)
foreach (var process in Process.GetProcessesByName(kill))
{
try
{
process.Kill();
Logger.WriteLine($"Stopped: {process.ProcessName}");
}
catch (Exception ex)
{
Logger.WriteLine($"Failed to stop: {process.ProcessName} {ex.Message}");
}
}
foreach (string kill in tokill) ProcessHelper.KillByName(kill);
if (AppConfig.isConfig("kill_gpu_apps") && GpuControl is not null && GpuControl.IsNvidia)
if (AppConfig.isConfig("kill_gpu_apps") && GpuControl is not null)
{
NvidiaGpuControl nvControl = (NvidiaGpuControl)GpuControl;
nvControl.KillGPUApps();
GpuControl.KillGPUApps();
}
}
}

View File

@@ -101,7 +101,7 @@ namespace GHelper
if (!backlightActivity && iddle.TotalSeconds < kb_timeout)
{
backlightActivity = true;
SetBacklight();
SetBacklightAuto();
}
//Debug.WriteLine(iddle.TotalSeconds);
@@ -369,7 +369,7 @@ namespace GHelper
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, "Fn-Lock "+(fnLock==1?"On":"Off"), ToastIcon.FnLock);
}
static void TabletMode()
public static void TabletMode()
{
bool touchpadState = GetTouchpadState();
bool tabletState = Program.acpi.DeviceGet(AsusACPI.TabletState) > 0;
@@ -412,7 +412,7 @@ namespace GHelper
}
public static int GetBacklight(bool auto = false)
public static int GetBacklight()
{
int backlight_power = AppConfig.getConfig("keyboard_brightness", 1);
int backlight_battery = AppConfig.getConfig("keyboard_brightness_ac", 1);
@@ -420,18 +420,17 @@ namespace GHelper
int backlight;
if (auto)
backlight = onBattery ? Math.Min(backlight_battery, backlight_power) : Math.Max(backlight_battery, backlight_power);
else
backlight = onBattery ? backlight_battery : backlight_power;
//backlight = onBattery ? Math.Min(backlight_battery, backlight_power) : Math.Max(backlight_battery, backlight_power);
backlight = onBattery ? backlight_battery : backlight_power;
return Math.Max(Math.Min(3, backlight), 0);
}
public static void SetBacklight(bool auto = false)
public static void SetBacklightAuto(bool init = false)
{
if (auto) AsusUSB.Init();
AsusUSB.ApplyBrightness(GetBacklight(auto), "Auto");
if (init) AsusUSB.Init();
if (!OptimizationService.IsRunning()) AsusUSB.ApplyBrightness(GetBacklight(), "Auto");
}
public static void SetBacklight(int delta)

View File

@@ -30,7 +30,7 @@ public static class Logger
try
{
var file = File.ReadAllLines(logFile);
int skip = Math.Max(0, file.Count() - 500);
int skip = Math.Max(0, file.Count() - 1000);
File.WriteAllLines(logFile, file.Skip(skip).ToArray());
}
catch { }

View File

@@ -327,6 +327,8 @@ public class NativeMethods
}
[DllImport("User32.dll")]
public static extern bool SetForegroundWindow(IntPtr handle);
private const int WM_SYSCOMMAND = 0x0112;
private const int SC_MONITORPOWER = 0xF170;
@@ -478,6 +480,17 @@ public class NativeMethods
);
[DllImport("powrprof.dll")]
static extern uint PowerReadACValue(
IntPtr RootPowerKey,
Guid SchemeGuid,
Guid SubGroupOfPowerSettingGuid,
Guid PowerSettingGuid,
ref int Type,
ref IntPtr Buffer,
ref uint BufferSize
);
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerSetActiveScheme(IntPtr RootPowerKey,
@@ -489,6 +502,9 @@ public class NativeMethods
static readonly Guid GUID_CPU = new Guid("54533251-82be-4824-96c1-47b60b740d00");
static readonly Guid GUID_BOOST = new Guid("be337238-0d82-4146-a960-4f3749d470c7");
private static Guid GUID_SLEEP_SUBGROUP = new Guid("238c9fa8-0aad-41ed-83f4-97be242c8f20");
private static Guid GUID_HIBERNATEIDLE = new Guid("9d7815a6-7ee4-497e-8888-515a05f02364");
[DllImportAttribute("powrprof.dll", EntryPoint = "PowerGetActualOverlayScheme")]
public static extern uint PowerGetActualOverlayScheme(out Guid ActualOverlayGuid);
@@ -584,16 +600,19 @@ public class NativeMethods
var devices = GetAllDevices().ToArray();
int count = 0, displayNum = -1;
string internalName = AppConfig.getConfigString("internal_display");
foreach (var device in devices)
{
if (device.outputTechnology == DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL ||
device.outputTechnology == DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED)
device.outputTechnology == DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED ||
device.monitorFriendlyDeviceName == internalName)
{
displayNum = count;
AppConfig.setConfig("internal_display", device.monitorFriendlyDeviceName);
}
count++;
//Logger.WriteLine(device.outputTechnology.ToString());
//Logger.WriteLine(device.monitorFriendlyDeviceName);
//Logger.WriteLine(device.monitorFriendlyDeviceName + ":" + device.outputTechnology.ToString());
}
var screens = Screen.AllScreens;
@@ -676,6 +695,20 @@ public class NativeMethods
}
public static nint GetHuibernateAfter()
{
Guid activePolicyGuid = GetActiveScheme();
var type = 0;
nint value = 0;
var valueSize = 4u;
PowerReadACValue(IntPtr.Zero, activePolicyGuid,
GUID_SLEEP_SUBGROUP, GUID_HIBERNATEIDLE,
ref type, ref value, ref valueSize);
return value;
}
static Guid GetActiveScheme()
{
IntPtr pActiveSchemeGuid;

97
app/ProcessHelper.cs Normal file
View File

@@ -0,0 +1,97 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
namespace GHelper
{
public static class ProcessHelper
{
private static long lastAdmin;
public static void CheckAlreadyRunning()
{
Process currentProcess = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(currentProcess.ProcessName);
if (processes.Length > 1)
{
foreach (Process process in processes)
if (process.Id != currentProcess.Id)
try
{
process.Kill();
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
MessageBox.Show(Properties.Strings.AppAlreadyRunningText, Properties.Strings.AppAlreadyRunning, MessageBoxButtons.OK);
Application.Exit();
return;
}
}
}
public static bool IsUserAdministrator()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
public static void RunAsAdmin(string? param = null)
{
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastAdmin) < 2000) return;
lastAdmin = DateTimeOffset.Now.ToUnixTimeMilliseconds();
// Check if the current user is an administrator
if (!IsUserAdministrator())
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = Environment.CurrentDirectory;
startInfo.FileName = Application.ExecutablePath;
startInfo.Arguments = param;
startInfo.Verb = "runas";
Process.Start(startInfo);
Application.Exit();
}
}
public static void KillByName(string name)
{
foreach (var process in Process.GetProcessesByName(name))
{
try
{
process.Kill();
Logger.WriteLine($"Stopped: {process.ProcessName}");
}
catch (Exception ex)
{
Logger.WriteLine($"Failed to stop: {process.ProcessName} {ex.Message}");
}
}
}
public static void KillByProcess(Process process)
{
try
{
process.Kill();
Logger.WriteLine($"Stopped: {process.ProcessName}");
}
catch (Exception ex)
{
Logger.WriteLine($"Failed to stop: {process.ProcessName} {ex.Message}");
}
}
}
}

View File

@@ -25,7 +25,6 @@ namespace GHelper
private static long lastAuto;
private static long lastTheme;
private static long lastAdmin;
public static InputDispatcher inputDispatcher;
@@ -48,7 +47,7 @@ namespace GHelper
Debug.WriteLine(CultureInfo.CurrentUICulture);
//Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr");
CheckProcesses();
ProcessHelper.CheckAlreadyRunning();
try
{
@@ -67,7 +66,7 @@ namespace GHelper
}
Logger.WriteLine("------------");
Logger.WriteLine("App launched: " + AppConfig.GetModel() + " :" + Assembly.GetExecutingAssembly().GetName().Version.ToString() + CultureInfo.CurrentUICulture + (IsUserAdministrator() ? "." : ""));
Logger.WriteLine("App launched: " + AppConfig.GetModel() + " :" + Assembly.GetExecutingAssembly().GetName().Version.ToString() + CultureInfo.CurrentUICulture + (ProcessHelper.IsUserAdministrator() ? "." : ""));
Application.EnableVisualStyles();
@@ -100,8 +99,6 @@ namespace GHelper
SettingsToggle(action);
}
Application.Run();
}
@@ -129,6 +126,9 @@ namespace GHelper
if (settingsForm.keyb is not null && settingsForm.keyb.Text != "")
settingsForm.keyb.InitTheme();
if (settingsForm.updates is not null && settingsForm.updates.Text != "")
settingsForm.updates.InitTheme();
break;
}
}
@@ -174,8 +174,7 @@ namespace GHelper
public static void SettingsToggle(string action = "")
{
if (settingsForm.Visible)
settingsForm.Hide();
if (settingsForm.Visible) settingsForm.HideAll();
else
{
settingsForm.Show();
@@ -214,55 +213,6 @@ namespace GHelper
}
static void CheckProcesses()
{
Process currentProcess = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(currentProcess.ProcessName);
if (processes.Length > 1)
{
foreach (Process process in processes)
if (process.Id != currentProcess.Id)
try
{
process.Kill();
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
MessageBox.Show(Properties.Strings.AppAlreadyRunningText, Properties.Strings.AppAlreadyRunning, MessageBoxButtons.OK);
Application.Exit();
return;
}
}
}
public static bool IsUserAdministrator()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
public static void RunAsAdmin(string? param = null)
{
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastAdmin) < 2000) return;
lastAdmin = DateTimeOffset.Now.ToUnixTimeMilliseconds();
// Check if the current user is an administrator
if (!IsUserAdministrator())
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = Environment.CurrentDirectory;
startInfo.FileName = Application.ExecutablePath;
startInfo.Arguments = param;
startInfo.Verb = "runas";
Process.Start(startInfo);
Application.Exit();
}
}
}
}

View File

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

View File

@@ -118,6 +118,9 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="brightness_up" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\brightness-up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-leaf-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-leaf-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@@ -133,11 +136,17 @@
<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_microphone_96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-microphone-96.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>
<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 name="icons8_touchpad_96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-touchpad-96.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>
@@ -145,8 +154,8 @@
<data name="icons8-processor-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-processor-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-spa-flower-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-spa-flower-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<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-spa-flower-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-spa-flower-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@@ -157,9 +166,15 @@
<data name="icons8-keyboard-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-keyboard-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="brightness_down" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\brightness-down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-fan-speed-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-fan-speed-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<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>
<data name="icons8-speed-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-speed-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@@ -169,12 +184,24 @@
<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-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-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="backlight_up" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\backlight-up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-spa-flower-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-spa-flower-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>
</data>
<data name="icons8_function" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-function-mac-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-balance-symbol-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-balance-symbol-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@@ -184,55 +211,31 @@
<data name="icons8-matrix-desktop-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-matrix-desktop-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_mute_unmute_96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-mute-unmute-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-xbox-controller-96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-xbox-controller-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-project-management-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-project-management-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_video_48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-video-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-leaf-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-leaf-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<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 name="backlight_down" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\backlight-down.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="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>
<data name="icons8_video_48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-video-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_microphone_96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-microphone-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_touchpad_96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-touchpad-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="backlight_down" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\backlight-down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="backlight_up" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\backlight-up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="brightness_down" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\brightness-down.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="brightness_up" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\brightness-up.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_mute_unmute_96" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-mute-unmute-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_function" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-function-mac-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<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>
</root>

View File

@@ -312,6 +312,15 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to BIOS and Driver Updates.
/// </summary>
internal static string BiosAndDriverUpdates {
get {
return ResourceManager.GetString("BiosAndDriverUpdates", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Boot.
/// </summary>
@@ -393,6 +402,15 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Drivers and Software.
/// </summary>
internal static string DriverAndSoftware {
get {
return ResourceManager.GetString("DriverAndSoftware", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Disables dGPU for battery savings.
/// </summary>
@@ -1095,6 +1113,15 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Updates.
/// </summary>
internal static string Updates {
get {
return ResourceManager.GetString("Updates", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Version.
/// </summary>

View File

@@ -190,7 +190,7 @@
<value>Encendida</value>
</data>
<data name="BacklightTimeout" xml:space="preserve">
<value>Apagar con batería tras (segundos)</value>
<value>Apagar con batería tras (0 - nunca)</value>
</data>
<data name="BacklightTimeoutPlugged" xml:space="preserve">
<value>Apagar cuando está enchufado tras (0 - nunca)</value>
@@ -267,6 +267,9 @@
<data name="FansPower" xml:space="preserve">
<value>Ventiladores + Energía</value>
</data>
<data name="FnLock" xml:space="preserve">
<value>Usar teclas de acceso rápido (Fn+F) sin pulsar Fn</value>
</data>
<data name="GPUBoost" xml:space="preserve">
<value>Dynamic Boost</value>
</data>
@@ -435,6 +438,9 @@
<data name="ToggleAura" xml:space="preserve">
<value>Alternar Aura</value>
</data>
<data name="ToggleFnLock" xml:space="preserve">
<value>Alternar Fn-Lock</value>
</data>
<data name="ToggleMiniled" xml:space="preserve">
<value>Alternar Miniled (si comp.)</value>
</data>

View File

@@ -201,6 +201,9 @@
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Battery Charge Limit</value>
</data>
<data name="BiosAndDriverUpdates" xml:space="preserve">
<value>BIOS and Driver Updates</value>
</data>
<data name="Boot" xml:space="preserve">
<value>Boot</value>
</data>
@@ -228,6 +231,9 @@
<data name="DownloadUpdate" xml:space="preserve">
<value>Download Update</value>
</data>
<data name="DriverAndSoftware" xml:space="preserve">
<value>Drivers and Software</value>
</data>
<data name="EcoGPUTooltip" xml:space="preserve">
<value>Disables dGPU for battery savings</value>
</data>
@@ -462,6 +468,9 @@
<data name="UltimateMode" xml:space="preserve">
<value>Ultimate</value>
</data>
<data name="Updates" xml:space="preserve">
<value>Updates</value>
</data>
<data name="VersionLabel" xml:space="preserve">
<value>Version</value>
</data>

View File

@@ -154,7 +154,7 @@
<value>Güç Sınırlarını Uygula</value>
</data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Auto adjust Windows Power Mode</value>
<value>Windows Güç Modunu otomatik ayarla</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Nefes</value>
@@ -189,6 +189,12 @@
<data name="Awake" xml:space="preserve">
<value>Uyanık</value>
</data>
<data name="BacklightTimeout" xml:space="preserve">
<value>Pildeyken klavye ışığının kapanma süresi</value>
</data>
<data name="BacklightTimeoutPlugged" xml:space="preserve">
<value>Şarjdayken klavye ışığının kapanma süresi (0 her zaman açık)</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>Dengeli</value>
</data>
@@ -258,6 +264,9 @@
<data name="FansPower" xml:space="preserve">
<value>Fanlar + Güç</value>
</data>
<data name="FnLock" xml:space="preserve">
<value>Fn+F kısayol tuşlarını FN tuşuna basmadan çalıştır</value>
</data>
<data name="GPUChanging" xml:space="preserve">
<value>Değiştiriliyor</value>
</data>
@@ -282,6 +291,9 @@
<data name="KeyboardAuto" xml:space="preserve">
<value>Pille çalışırken klavye aydınlatmasını kıs, şarjdayken eski haline dön</value>
</data>
<data name="KillGpuApps" xml:space="preserve">
<value>Eco'ya geçerken dGPU kullanan tüm uygulamaları durdur</value>
</data>
<data name="LaptopBacklight" xml:space="preserve">
<value>Aydınlatması</value>
</data>
@@ -333,6 +345,9 @@
<data name="OptimizedGPUTooltip" xml:space="preserve">
<value>Pille çalışırken Eko moda ve şarjdayken Standart moda geçiş yapın</value>
</data>
<data name="OptimizedUSBC" xml:space="preserve">
<value>Optimize edilmiş modda USB-c şarj cihazında GPU'yu devre dışı bırak</value>
</data>
<data name="Other" xml:space="preserve">
<value>Diğer</value>
</data>

View File

@@ -264,6 +264,9 @@
<data name="FansPower" xml:space="preserve">
<value>Кулери та Потужність</value>
</data>
<data name="FnLock" xml:space="preserve">
<value>Гарячі клавіші Fn+F працюють без натискання Fn</value>
</data>
<data name="GPUChanging" xml:space="preserve">
<value>Зміна</value>
</data>

View File

@@ -265,7 +265,7 @@
<value>风扇与电源设置</value>
</data>
<data name="FnLock" xml:space="preserve">
<value>无需FN处理 Fn+F 热键</value>
<value>打开FnLock (无需按下FN使用FN+(F1-F12)热键)</value>
</data>
<data name="GPUChanging" xml:space="preserve">
<value>切换中...</value>
@@ -292,7 +292,7 @@
<value>电池模式下降低键盘亮度以省电,并在插上电源时恢复</value>
</data>
<data name="KillGpuApps" xml:space="preserve">
<value>当切换到集显模式时,停止所有正在使用dGPU的应用</value>
<value>当切换到集显模式时,停止所有正在使用独显的应用</value>
</data>
<data name="LaptopBacklight" xml:space="preserve">
<value>背光</value>
@@ -349,7 +349,7 @@
<value>使用电池时切换到集显模式,并在插上电源后重新启用标准模式</value>
</data>
<data name="OptimizedUSBC" xml:space="preserve">
<value>在自动切换模式下使用USB-C充电器时禁用GPU</value>
<value>在自动切换模式下使用USB-C为笔记本供电时禁用GPU</value>
</data>
<data name="Other" xml:space="preserve">
<value>其他</value>

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 645 B

664
app/Settings.Designer.cs generated

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,6 @@ using System.Net;
using System.Reflection;
using System.Text.Json;
using System.Timers;
using Tools;
namespace GHelper
{
@@ -29,12 +28,15 @@ namespace GHelper
public AniMatrix matrix;
public Fans fans;
public Extra keyb;
public Updates updates;
static long lastRefresh;
private bool customFans = false;
private int customPower = 0;
bool isGpuSection = true;
public SettingsForm()
{
@@ -70,6 +72,7 @@ namespace GHelper
buttonMatrix.Text = Properties.Strings.PictureGif;
buttonQuit.Text = Properties.Strings.Quit;
buttonUpdates.Text = Properties.Strings.Updates;
FormClosing += SettingsForm_FormClosing;
@@ -156,6 +159,8 @@ namespace GHelper
button120Hz.MouseMove += Button120Hz_MouseHover;
button120Hz.MouseLeave += ButtonScreen_MouseLeave;
buttonUpdates.Click += ButtonUpdates_Click;
sliderBattery.ValueChanged += SliderBattery_ValueChanged;
Program.trayIcon.MouseMove += TrayIcon_MouseMove;
@@ -169,7 +174,7 @@ namespace GHelper
int trim = model.LastIndexOf("_");
if (trim > 0) model = model.Substring(0, trim);
labelModel.Text = model + (Program.IsUserAdministrator() ? "." : "");
labelModel.Text = model + (ProcessHelper.IsUserAdministrator() ? "." : "");
TopMost = AppConfig.getConfig("topmost") == 1;
@@ -181,13 +186,19 @@ namespace GHelper
CheckForUpdatesAsync();
});
Activated += SettingsForm_Activated;
}
private void SettingsForm_Activated(object? sender, EventArgs e)
private void ButtonUpdates_Click(object? sender, EventArgs e)
{
if (fans != null && fans.Text != "") fans.BringToFront();
if (updates == null || updates.Text == "")
{
updates = new Updates();
updates.Show();
}
else
{
updates.Close();
}
}
protected override void WndProc(ref Message m)
@@ -263,32 +274,36 @@ namespace GHelper
contextMenuStrip.Items.Add("-");
var titleGPU = new ToolStripMenuItem(Properties.Strings.GPUMode);
titleGPU.Margin = padding;
titleGPU.Enabled = false;
contextMenuStrip.Items.Add(titleGPU);
if (isGpuSection)
{
var titleGPU = new ToolStripMenuItem(Properties.Strings.GPUMode);
titleGPU.Margin = padding;
titleGPU.Enabled = false;
contextMenuStrip.Items.Add(titleGPU);
menuEco = new ToolStripMenuItem(Properties.Strings.EcoMode);
menuEco.Click += ButtonEco_Click;
menuEco.Margin = padding;
contextMenuStrip.Items.Add(menuEco);
menuEco = new ToolStripMenuItem(Properties.Strings.EcoMode);
menuEco.Click += ButtonEco_Click;
menuEco.Margin = padding;
contextMenuStrip.Items.Add(menuEco);
menuStandard = new ToolStripMenuItem(Properties.Strings.StandardMode);
menuStandard.Click += ButtonStandard_Click;
menuStandard.Margin = padding;
contextMenuStrip.Items.Add(menuStandard);
menuStandard = new ToolStripMenuItem(Properties.Strings.StandardMode);
menuStandard.Click += ButtonStandard_Click;
menuStandard.Margin = padding;
contextMenuStrip.Items.Add(menuStandard);
menuUltimate = new ToolStripMenuItem(Properties.Strings.UltimateMode);
menuUltimate.Click += ButtonUltimate_Click;
menuUltimate.Margin = padding;
contextMenuStrip.Items.Add(menuUltimate);
menuUltimate = new ToolStripMenuItem(Properties.Strings.UltimateMode);
menuUltimate.Click += ButtonUltimate_Click;
menuUltimate.Margin = padding;
contextMenuStrip.Items.Add(menuUltimate);
menuOptimized = new ToolStripMenuItem(Properties.Strings.Optimized);
menuOptimized.Click += ButtonOptimized_Click;
menuOptimized.Margin = padding;
contextMenuStrip.Items.Add(menuOptimized);
menuOptimized = new ToolStripMenuItem(Properties.Strings.Optimized);
menuOptimized.Click += ButtonOptimized_Click;
menuOptimized.Margin = padding;
contextMenuStrip.Items.Add(menuOptimized);
contextMenuStrip.Items.Add("-");
}
contextMenuStrip.Items.Add("-");
var quit = new ToolStripMenuItem(Properties.Strings.Quit);
quit.Click += ButtonQuit_Click;
@@ -374,7 +389,8 @@ namespace GHelper
string url = null;
for (int i = 0; i < assets.GetArrayLength(); i++) {
for (int i = 0; i < assets.GetArrayLength(); i++)
{
if (assets[i].GetProperty("browser_download_url").ToString().Contains(".zip"))
url = assets[i].GetProperty("browser_download_url").ToString();
}
@@ -912,12 +928,23 @@ namespace GHelper
Application.Exit();
}
public void HideAll()
{
this.Hide();
if (fans != null && fans.Text != "") fans.Close();
if (keyb != null && keyb.Text != "") keyb.Close();
}
public void CloseOthers()
{
}
private void SettingsForm_FormClosing(object? sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true;
Hide();
HideAll();
}
}
@@ -1070,7 +1097,7 @@ namespace GHelper
}
int setStatus = nvControl.SetClocks(gpu_core, gpu_memory);
if (launchAsAdmin && setStatus == -1) Program.RunAsAdmin("gpu");
if (launchAsAdmin && setStatus == -1) ProcessHelper.RunAsAdmin("gpu");
}
catch (Exception ex)
@@ -1176,6 +1203,8 @@ namespace GHelper
bool applyPower = AppConfig.getConfigPerf("auto_apply_power") == 1;
bool applyGPU = true;
//if (applyPower) Program.acpi.DeviceSet(AsusACPI.PerformanceMode, AsusACPI.PerformanceManual, "CustomMode");
if (delay > 0)
{
var timer = new System.Timers.Timer(delay);
@@ -1295,7 +1324,9 @@ namespace GHelper
public void AutoKeyboard()
{
InputDispatcher.SetBacklight(true);
InputDispatcher.SetBacklightAuto(true);
if (AppConfig.ContainsModel("X16") || AppConfig.ContainsModel("X13")) InputDispatcher.TabletMode();
}
public void AutoPerformance()
@@ -1461,10 +1492,11 @@ namespace GHelper
UltimateUI(mux == 1);
if (eco < 0)
if (eco < 0 && mux < 0)
{
tableGPU.Visible = false;
if (Program.acpi.DeviceGet(AsusACPI.GPU_Fan) < 0) panelGPU.Visible = false;
isGpuSection = tableGPU.Visible = false;
SetContextMenu();
if (HardwareControl.FormatFan(Program.acpi.DeviceGet(AsusACPI.GPU_Fan)) is null) panelGPU.Visible = false;
}
}
@@ -1495,9 +1527,9 @@ namespace GHelper
if (dialogResult == DialogResult.No) return;
}
Program.RunAsAdmin("gpurestart");
ProcessHelper.RunAsAdmin("gpurestart");
if (!Program.IsUserAdministrator()) return;
if (!ProcessHelper.IsUserAdministrator()) return;
Logger.WriteLine("Trying to restart dGPU");

View File

@@ -16,7 +16,7 @@ public class Startup
public static void ReScheduleAdmin()
{
if (Program.IsUserAdministrator() && IsScheduled())
if (ProcessHelper.IsUserAdministrator() && IsScheduled())
{
UnSchedule();
Schedule();
@@ -38,7 +38,7 @@ public class Startup
td.Triggers.Add(new LogonTrigger { UserId = userId });
td.Actions.Add(strExeFilePath);
if (Program.IsUserAdministrator())
if (ProcessHelper.IsUserAdministrator())
td.Principal.RunLevel = TaskRunLevel.Highest;
td.Settings.StopIfGoingOnBatteries = false;
@@ -54,10 +54,10 @@ public class Startup
}
catch (Exception e)
{
if (Program.IsUserAdministrator())
if (ProcessHelper.IsUserAdministrator())
MessageBox.Show("Can't create a start up task. Try running Task Scheduler by hand and manually deleting GHelper task if it exists there.", "Scheduler Error", MessageBoxButtons.OK);
else
Program.RunAsAdmin();
else
ProcessHelper.RunAsAdmin();
}
}
@@ -73,10 +73,10 @@ public class Startup
}
catch (Exception e)
{
if (Program.IsUserAdministrator())
if (ProcessHelper.IsUserAdministrator())
MessageBox.Show("Can't remove task. Try running Task Scheduler by hand and manually deleting GHelper task if it exists there.", "Scheduler Error", MessageBoxButtons.OK);
else
Program.RunAsAdmin();
ProcessHelper.RunAsAdmin();
}
}
}

215
app/Updates.Designer.cs generated Normal file
View File

@@ -0,0 +1,215 @@
namespace GHelper
{
partial class Updates
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Updates));
tableBios = new TableLayoutPanel();
labelBIOS = new Label();
pictureBios = new PictureBox();
panelBiosTitle = new Panel();
panelBios = new Panel();
panelDrivers = new Panel();
tableDrivers = new TableLayoutPanel();
panelDriversTitle = new Panel();
labelDrivers = new Label();
pictureDrivers = new PictureBox();
((System.ComponentModel.ISupportInitialize)pictureBios).BeginInit();
panelBiosTitle.SuspendLayout();
panelBios.SuspendLayout();
panelDrivers.SuspendLayout();
panelDriversTitle.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureDrivers).BeginInit();
SuspendLayout();
//
// tableBios
//
tableBios.AutoSize = true;
tableBios.AutoSizeMode = AutoSizeMode.GrowAndShrink;
tableBios.ColumnCount = 3;
tableBios.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
tableBios.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
tableBios.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
tableBios.Dock = DockStyle.Top;
tableBios.Location = new Point(10, 10);
tableBios.Margin = new Padding(2);
tableBios.MinimumSize = new Size(550, 0);
tableBios.Name = "tableBios";
tableBios.Size = new Size(608, 0);
tableBios.TabIndex = 0;
//
// labelBIOS
//
labelBIOS.AutoSize = true;
labelBIOS.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelBIOS.Location = new Point(34, 14);
labelBIOS.Margin = new Padding(2, 0, 2, 0);
labelBIOS.Name = "labelBIOS";
labelBIOS.Size = new Size(35, 15);
labelBIOS.TabIndex = 1;
labelBIOS.Text = "BIOS";
//
// pictureBios
//
pictureBios.BackgroundImage = (Image)resources.GetObject("pictureBios.BackgroundImage");
pictureBios.BackgroundImageLayout = ImageLayout.Zoom;
pictureBios.Location = new Point(14, 14);
pictureBios.Margin = new Padding(2);
pictureBios.Name = "pictureBios";
pictureBios.Size = new Size(16, 16);
pictureBios.TabIndex = 2;
pictureBios.TabStop = false;
//
// panelBiosTitle
//
panelBiosTitle.Controls.Add(labelBIOS);
panelBiosTitle.Controls.Add(pictureBios);
panelBiosTitle.Dock = DockStyle.Top;
panelBiosTitle.Location = new Point(0, 0);
panelBiosTitle.Margin = new Padding(2);
panelBiosTitle.Name = "panelBiosTitle";
panelBiosTitle.Size = new Size(628, 31);
panelBiosTitle.TabIndex = 3;
//
// panelBios
//
panelBios.AutoSize = true;
panelBios.Controls.Add(tableBios);
panelBios.Dock = DockStyle.Top;
panelBios.Location = new Point(0, 31);
panelBios.Margin = new Padding(2);
panelBios.Name = "panelBios";
panelBios.Padding = new Padding(10);
panelBios.Size = new Size(628, 20);
panelBios.TabIndex = 4;
//
// panelDrivers
//
panelDrivers.AutoSize = true;
panelDrivers.Controls.Add(tableDrivers);
panelDrivers.Dock = DockStyle.Top;
panelDrivers.Location = new Point(0, 73);
panelDrivers.Margin = new Padding(2);
panelDrivers.Name = "panelDrivers";
panelDrivers.Padding = new Padding(10);
panelDrivers.Size = new Size(628, 20);
panelDrivers.TabIndex = 6;
//
// tableDrivers
//
tableDrivers.AutoSize = true;
tableDrivers.AutoSizeMode = AutoSizeMode.GrowAndShrink;
tableDrivers.ColumnCount = 3;
tableDrivers.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
tableDrivers.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F));
tableDrivers.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
tableDrivers.Dock = DockStyle.Top;
tableDrivers.Location = new Point(10, 10);
tableDrivers.Margin = new Padding(2);
tableDrivers.MinimumSize = new Size(550, 0);
tableDrivers.Name = "tableDrivers";
tableDrivers.Size = new Size(608, 0);
tableDrivers.TabIndex = 0;
//
// panelDriversTitle
//
panelDriversTitle.Controls.Add(labelDrivers);
panelDriversTitle.Controls.Add(pictureDrivers);
panelDriversTitle.Dock = DockStyle.Top;
panelDriversTitle.Location = new Point(0, 51);
panelDriversTitle.Margin = new Padding(2);
panelDriversTitle.Name = "panelDriversTitle";
panelDriversTitle.Size = new Size(628, 22);
panelDriversTitle.TabIndex = 5;
//
// labelDrivers
//
labelDrivers.AutoSize = true;
labelDrivers.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelDrivers.Location = new Point(34, 4);
labelDrivers.Margin = new Padding(2, 0, 2, 0);
labelDrivers.Name = "labelDrivers";
labelDrivers.Size = new Size(126, 15);
labelDrivers.TabIndex = 1;
labelDrivers.Text = "Drivers and Software";
//
// pictureDrivers
//
pictureDrivers.BackgroundImage = (Image)resources.GetObject("pictureDrivers.BackgroundImage");
pictureDrivers.BackgroundImageLayout = ImageLayout.Zoom;
pictureDrivers.Location = new Point(14, 4);
pictureDrivers.Margin = new Padding(2);
pictureDrivers.Name = "pictureDrivers";
pictureDrivers.Size = new Size(16, 16);
pictureDrivers.TabIndex = 2;
pictureDrivers.TabStop = false;
//
// Updates
//
AutoScaleDimensions = new SizeF(96F, 96F);
AutoScaleMode = AutoScaleMode.Dpi;
AutoScroll = true;
ClientSize = new Size(628, 345);
Controls.Add(panelDrivers);
Controls.Add(panelDriversTitle);
Controls.Add(panelBios);
Controls.Add(panelBiosTitle);
Margin = new Padding(2);
MinimizeBox = false;
Name = "Updates";
ShowIcon = false;
ShowInTaskbar = false;
Text = "BIOS and Driver Updates";
((System.ComponentModel.ISupportInitialize)pictureBios).EndInit();
panelBiosTitle.ResumeLayout(false);
panelBiosTitle.PerformLayout();
panelBios.ResumeLayout(false);
panelBios.PerformLayout();
panelDrivers.ResumeLayout(false);
panelDrivers.PerformLayout();
panelDriversTitle.ResumeLayout(false);
panelDriversTitle.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureDrivers).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private TableLayoutPanel tableBios;
private Label labelBIOS;
private PictureBox pictureBios;
private Panel panelBiosTitle;
private Panel panelBios;
private Panel panelDrivers;
private TableLayoutPanel tableDrivers;
private Panel panelDriversTitle;
private Label labelDrivers;
private PictureBox pictureDrivers;
}
}

185
app/Updates.cs Normal file
View File

@@ -0,0 +1,185 @@
using CustomControls;
using System.Diagnostics;
using System.Management;
using System.Text.Json;
namespace GHelper
{
public partial class Updates : RForm
{
//static int rowCount = 0;
static string model = AppConfig.GetModelShort();
public Updates()
{
InitializeComponent();
InitTheme();
Text = Properties.Strings.BiosAndDriverUpdates + ": " + model + " " + GetBiosVersion();
labelBIOS.Text = "BIOS";
labelDrivers.Text = Properties.Strings.DriverAndSoftware;
SuspendLayout();
tableBios.Visible = false;
tableDrivers.Visible = false;
Task.Run(async () =>
{
DriversAsync($"https://rog.asus.com/support/webapi/product/GetPDBIOS?website=global&model={model}&cpu=", 1, tableBios);
});
Task.Run(async () =>
{
DriversAsync($"https://rog.asus.com/support/webapi/product/GetPDDrivers?website=global&model={model}&osid=52", 0, tableDrivers);
});
Shown += Updates_Shown;
}
private void Updates_Shown(object? sender, EventArgs e)
{
Height = Program.settingsForm.Height;
Top = Program.settingsForm.Top;
Left = Program.settingsForm.Left - Width - 5;
}
private Dictionary<string, string> GetDeviceVersions()
{
ManagementObjectSearcher objSearcher = new ManagementObjectSearcher("Select * from Win32_PnPSignedDriver");
ManagementObjectCollection objCollection = objSearcher.Get();
Dictionary<string, string> list = new();
foreach (ManagementObject obj in objCollection)
{
if (obj["DeviceID"] is not null && obj["DriverVersion"] is not null)
list[obj["DeviceID"].ToString()] = obj["DriverVersion"].ToString();
}
return list;
}
private string GetBiosVersion()
{
ManagementObjectSearcher objSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
ManagementObjectCollection objCollection = objSearcher.Get();
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;
}
return "";
}
public async void DriversAsync(string url, int type, TableLayoutPanel table)
{
try
{
Dictionary<string, string> devices = new();
string biosVersion = "";
if (type == 0) devices = GetDeviceVersions();
else biosVersion = GetBiosVersion();
//Debug.WriteLine(biosVersion);
using (var httpClient = new HttpClient())
{
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" };
for (int i = 0; i < groups.GetArrayLength(); i++)
{
var categoryName = groups[i].GetProperty("Name").ToString();
var files = groups[i].GetProperty("Files");
var oldTitle = "";
for (int j = 0; j < files.GetArrayLength(); j++)
{
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);
}
BeginInvoke(delegate
{
string versionText = version.Replace("latest version at the ", "");
Label versionLabel = new Label { Text = versionText, Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Height = 50 };
versionLabel.Cursor = Cursors.Hand;
versionLabel.Font = new Font(versionLabel.Font, newer ? FontStyle.Underline | FontStyle.Bold : FontStyle.Underline);
versionLabel.ForeColor = newer ? colorTurbo : colorEco;
versionLabel.Padding = new Padding(5, 5, 5, 5);
versionLabel.Click += delegate
{
Process.Start(new ProcessStartInfo(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(versionLabel, 2, table.RowCount);
table.RowCount++;
});
}
oldTitle = title;
}
}
BeginInvoke(delegate
{
table.Visible = true;
ResumeLayout(false);
PerformLayout();
});
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.ToString());
}
}
}
}

149
app/Updates.resx Normal file
View File

@@ -0,0 +1,149 @@
<?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>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="pictureBios.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
DAAACwwBP0AiyAAAAWlJREFUaEPtmN1Kw0AQhVOkoo8q7ZUiguid9ULwZaS+g3jtnT6FCv4g2DOhA23I
LrvHzKTCfPBRkuFsT9JCyDZBEASBB7fwE960R9tcwze4aI+2sZhRfMHf9WeXDygz+exiMaOQxdQu3jOK
3ILes2ImcAYf4eaC3s7hFFaxB+9g34JjeA/3YTHHsG+hMT2BxbxADZ7C6p9wAA7gOdQeT7CYH6jBqp9u
YOS7tce3nChFQ+LYUF1SIXlCvsPBnpAFpLpkSYXk8S7nXtsjH1JdsqRCcuflIq7aIx9SXbJQISOoLlTI
CKoLFTKC6kKFjKC6UCEjqC5UyAiqCxUygupChYygulAhI6guVMgIqgsVMoLqQoWMoLr8+xeaZ6jBMzjG
RRzCC6g9ql4pL6EGd0XZaChG7vgubassYfW/QDa2juAD7FvUS9lc+/OuyOaCXbxnFLkFvWcU7Fa4xYxC
X+b7tlO8Z0EQBMFQNM0KZ46+F5QUhV4AAAAASUVORK5CYII=
</value>
</data>
<data name="pictureDrivers.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
DAAACwwBP0AiyAAAAnJJREFUaEPtmL1qlEEUhhdF8Acbo51/KGKRWhvBP7S0Ve9AvAQxuYwUFkkjioro
DdgogqJipxa2giIqamOiieZ5IQuH4ezOmf2+3R3ke+CBsLvnzJnZmfnOptfR0dHx33AYr+JtfI1f8PeG
+luv3UJ95hBWwWa8jE/xL/4Lqs8q5hJuwqlwDt+hV2CJb/AsToxteAO9Ypq4gFtxrOzBF+gVoG3xGOfw
JO7H7bgDj+Ip1HsvcdB2e4YzOBZU/FtMB13DRZzFKEfwDnoT0Zbaja2ibeOt/Ac8gaNyDN9jmvc5trqd
Bu35P6ibpAm78BGmuXUmWuE8psmtbUxiC3qTaHw76Z5Pr0ptGxVtX2vrm0i3k85Do+eEHlI2oQ6s9ryK
HcckjmN6sC/iyOhpaZPptumTTmIVr2FT7qId8wmOhHobuxr6O70q+5NQ8Rf0Qgvoik3HPYjFqOnqJ5F6
SHloEm2svOUV2rGvYDHqHG2S6xhlH97Hnxs+RD2No8yjHfsmFqP21yZRexBBxX9FGyu/od6LcAZtrL6R
YtTD2yQHMIJW3sZZ72EEfVs27jMWs4I2iRqzCNoyNs76AyPsRBu3jMX8QptE/VCEYRP4jhG0WDZOtRTz
CW2SvRhBB9bGWXXHR9BZsXEfsRj17TbJaYyg/asDa2OlzlR0EdJDrE64mCW0SUrueq2gDqz2vNTKR4sX
GsuOrVrC2MAazeIF1WQWL6gms3hBNZnFC6rJLF5QTWbxgmoyixdUk1m8oJrM4gXVZJZh3eS0DXWzD9AL
rkH9WMqibtL7SThtVZP+YxFCnWO/m/SSTVLVoJUPF9/R0dExKXq9dc3qWY2Pp0GbAAAAAElFTkSuQmCC
</value>
</data>
</root>

View File

@@ -1,6 +1,8 @@
# 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/)
[![United24](https://raw.githubusercontent.com/seerge/g-helper/main/docs/ua.png)](https://u24.gov.ua/)
Language: English | [中文](https://github.com/seerge/g-helper/blob/main/docs/README.zh-CN.md)
## Control tool for Asus laptops
@@ -197,7 +199,7 @@ App supports custom actions for M3, M4 and FN+F4 hotkeys. To set them select "Cu
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)
![Screenshot 2023-06-04 232848](https://github.com/seerge/g-helper/assets/5920850/3db6f058-af2b-4220-9ac9-3b812ab09903)
### Workaround for [bugged bios on G15](https://github.com/seerge/g-helper/issues/253) when external monitor is connected

View File

@@ -2,6 +2,8 @@
[![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/)
[![United24](https://raw.githubusercontent.com/seerge/g-helper/main/docs/ua.png)](https://u24.gov.ua/)
语言: [English](https://github.com/seerge/g-helper#readme) | 中文
## 为ASUS笔记本打造的、Armoury Crate(奥创控制中心)的轻量化替代品

BIN
docs/ua.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB