Compare commits

...

18 Commits
v0.76 ... v0.78

Author SHA1 Message Date
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
25 changed files with 882 additions and 414 deletions

View File

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

458
app/Extra.Designer.cs generated
View File

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

View File

@@ -1,4 +1,5 @@
using CustomControls; using CustomControls;
using GHelper.Gpu;
using Microsoft.VisualBasic.Devices; using Microsoft.VisualBasic.Devices;
using System.Diagnostics; using System.Diagnostics;
@@ -227,6 +228,44 @@ namespace GHelper
checkFnLock.CheckedChanged += CheckFnLock_CheckedChanged; ; checkFnLock.CheckedChanged += CheckFnLock_CheckedChanged; ;
pictureHelp.Click += PictureHelp_Click; 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) private void CheckFnLock_CheckedChanged(object? sender, EventArgs e)

49
app/Fans.Designer.cs generated
View File

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

View File

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

View File

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

View File

@@ -1,10 +1,37 @@
using System.Diagnostics; using System.Diagnostics;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using static AmdAdl2.Adl2.NativeMethods;
namespace AmdAdl2; namespace AmdAdl2;
#region Export Struct #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)] [StructLayout(LayoutKind.Sequential)]
public struct ADLSingleSensorData { public struct ADLSingleSensorData {
public int Supported; public int Supported;
@@ -481,5 +508,71 @@ public class Adl2 {
[DllImport(Atiadlxx_FileName)] [DllImport(Atiadlxx_FileName)]
public static extern int ADL2_Adapter_ASICFamilyType_Get(IntPtr adlContextHandle, int adapterIndex, out ADLAsicFamilyType asicFamilyType, out int asicFamilyTypeValids); 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 AmdAdl2;
using System.Runtime.InteropServices;
using static AmdAdl2.Adl2.NativeMethods;
namespace GHelper.Gpu; namespace GHelper.Gpu;
// Reference: https://github.com/GPUOpen-LibrariesAndSDKs/display-library/blob/master/Sample-Managed/Program.cs // 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 bool _isReady;
private IntPtr _adlContextHandle; private IntPtr _adlContextHandle;
private readonly ADLAdapterInfo _internalDiscreteAdapter; private readonly ADLAdapterInfo _internalDiscreteAdapter;
@@ -12,64 +14,79 @@ public class AmdGpuControl : IGpuControl {
public bool IsNvidia => false; public bool IsNvidia => false;
public string FullName => _internalDiscreteAdapter!.AdapterName; public string FullName => _internalDiscreteAdapter!.AdapterName;
public AmdGpuControl() {
if (!Adl2.Load())
return;
if (Adl2.ADL2_Main_Control_Create(1, out _adlContextHandle) != Adl2.ADL_SUCCESS) private ADLAdapterInfo? FindByType(ADLAsicFamilyType type = ADLAsicFamilyType.Discrete)
return; {
ADL2_Adapter_NumberOfAdapters_Get(_adlContextHandle, out int numberOfAdapters);
Adl2.NativeMethods.ADL2_Adapter_NumberOfAdapters_Get(_adlContextHandle, out int numberOfAdapters);
if (numberOfAdapters <= 0) if (numberOfAdapters <= 0)
return; return null;
ADLAdapterInfoArray osAdapterInfoData = new(); ADLAdapterInfoArray osAdapterInfoData = new();
int osAdapterInfoDataSize = Marshal.SizeOf(osAdapterInfoData); int osAdapterInfoDataSize = Marshal.SizeOf(osAdapterInfoData);
IntPtr AdapterBuffer = Marshal.AllocCoTaskMem(osAdapterInfoDataSize); IntPtr AdapterBuffer = Marshal.AllocCoTaskMem(osAdapterInfoDataSize);
Marshal.StructureToPtr(osAdapterInfoData, AdapterBuffer, false); Marshal.StructureToPtr(osAdapterInfoData, AdapterBuffer, false);
if (Adl2.NativeMethods.ADL2_Adapter_AdapterInfo_Get(_adlContextHandle, AdapterBuffer, osAdapterInfoDataSize) != Adl2.ADL_SUCCESS) if (ADL2_Adapter_AdapterInfo_Get(_adlContextHandle, AdapterBuffer, osAdapterInfoDataSize) != Adl2.ADL_SUCCESS)
return; return null;
osAdapterInfoData = (ADLAdapterInfoArray) Marshal.PtrToStructure(AdapterBuffer, osAdapterInfoData.GetType())!; osAdapterInfoData = (ADLAdapterInfoArray)Marshal.PtrToStructure(AdapterBuffer, osAdapterInfoData.GetType())!;
const int amdVendorId = 1002; const int amdVendorId = 1002;
// Determine which GPU is internal discrete AMD GPU // Determine which GPU is internal discrete AMD GPU
ADLAdapterInfo internalDiscreteAdapter = ADLAdapterInfo internalDiscreteAdapter =
osAdapterInfoData.ADLAdapterInfo osAdapterInfoData.ADLAdapterInfo
.FirstOrDefault(adapter => { .FirstOrDefault(adapter =>
{
if (adapter.Exist == 0 || adapter.Present == 0) if (adapter.Exist == 0 || adapter.Present == 0)
return false; return false;
if (adapter.VendorID != amdVendorId) if (adapter.VendorID != amdVendorId)
return false; return false;
if (Adl2.NativeMethods.ADL2_Adapter_ASICFamilyType_Get(_adlContextHandle, adapter.AdapterIndex, out ADLAsicFamilyType asicFamilyType, out int asicFamilyTypeValids) != Adl2.ADL_SUCCESS) if (ADL2_Adapter_ASICFamilyType_Get(_adlContextHandle, adapter.AdapterIndex, out ADLAsicFamilyType asicFamilyType, out int asicFamilyTypeValids) != Adl2.ADL_SUCCESS)
return false; return false;
asicFamilyType = (ADLAsicFamilyType) ((int) asicFamilyType & asicFamilyTypeValids); asicFamilyType = (ADLAsicFamilyType)((int)asicFamilyType & asicFamilyTypeValids);
// FIXME: is this correct for G14 2022? return (asicFamilyType & type) != 0;
return (asicFamilyType & ADLAsicFamilyType.Discrete) != 0;
}); });
if (internalDiscreteAdapter.Exist == 0) if (internalDiscreteAdapter.Exist == 0)
return null;
return internalDiscreteAdapter;
}
public AmdGpuControl()
{
if (!Adl2.Load())
return; return;
_internalDiscreteAdapter = internalDiscreteAdapter; if (Adl2.ADL2_Main_Control_Create(1, out _adlContextHandle) != Adl2.ADL_SUCCESS)
_isReady = true; return;
ADLAdapterInfo? internalDiscreteAdapter = FindByType(ADLAsicFamilyType.Discrete);
if (internalDiscreteAdapter is not null)
{
_internalDiscreteAdapter = (ADLAdapterInfo)internalDiscreteAdapter;
_isReady = true;
}
} }
public bool IsValid => _isReady && _adlContextHandle != IntPtr.Zero; public bool IsValid => _isReady && _adlContextHandle != IntPtr.Zero;
public int? GetCurrentTemperature() { public int? GetCurrentTemperature()
{
if (!IsValid) if (!IsValid)
return null; 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; return null;
ADLSingleSensorData temperatureSensor = adlpmLogDataOutput.Sensors[(int) ADLSensorType.PMLOG_TEMPERATURE_EDGE]; ADLSingleSensorData temperatureSensor = adlpmLogDataOutput.Sensors[(int)ADLSensorType.PMLOG_TEMPERATURE_EDGE];
if (temperatureSensor.Supported == 0) if (temperatureSensor.Supported == 0)
return null; return null;
@@ -79,10 +96,9 @@ public class AmdGpuControl : IGpuControl {
public int? GetGpuUse() public int? GetGpuUse()
{ {
if (!IsValid) if (!IsValid) return null;
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; return null;
ADLSingleSensorData gpuUsage = adlpmLogDataOutput.Sensors[(int)ADLSensorType.PMLOG_INFO_ACTIVITY_GFX]; ADLSingleSensorData gpuUsage = adlpmLogDataOutput.Sensors[(int)ADLSensorType.PMLOG_INFO_ACTIVITY_GFX];
@@ -94,20 +110,121 @@ public class AmdGpuControl : IGpuControl {
} }
private void ReleaseUnmanagedResources() { public bool SetVariBright(int enabled)
if (_adlContextHandle != IntPtr.Zero) { {
Adl2.NativeMethods.ADL2_Main_Control_Destroy(_adlContextHandle); 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));
}
}
foreach (string kill in appNames) 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; _adlContextHandle = IntPtr.Zero;
_isReady = false; _isReady = false;
} }
} }
public void Dispose() { public void Dispose()
{
ReleaseUnmanagedResources(); ReleaseUnmanagedResources();
GC.SuppressFinalize(this); GC.SuppressFinalize(this);
} }
~AmdGpuControl() { ~AmdGpuControl()
{
ReleaseUnmanagedResources(); ReleaseUnmanagedResources();
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

@@ -30,7 +30,7 @@ public static class Logger
try try
{ {
var file = File.ReadAllLines(logFile); 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()); File.WriteAllLines(logFile, file.Skip(skip).ToArray());
} }
catch { } 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 WM_SYSCOMMAND = 0x0112;
private const int SC_MONITORPOWER = 0xF170; 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)] [DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerSetActiveScheme(IntPtr RootPowerKey, 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_CPU = new Guid("54533251-82be-4824-96c1-47b60b740d00");
static readonly Guid GUID_BOOST = new Guid("be337238-0d82-4146-a960-4f3749d470c7"); 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")] [DllImportAttribute("powrprof.dll", EntryPoint = "PowerGetActualOverlayScheme")]
public static extern uint PowerGetActualOverlayScheme(out Guid ActualOverlayGuid); public static extern uint PowerGetActualOverlayScheme(out Guid ActualOverlayGuid);
@@ -584,16 +600,19 @@ public class NativeMethods
var devices = GetAllDevices().ToArray(); var devices = GetAllDevices().ToArray();
int count = 0, displayNum = -1; int count = 0, displayNum = -1;
string internalName = AppConfig.getConfigString("internal_display");
foreach (var device in devices) foreach (var device in devices)
{ {
if (device.outputTechnology == DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL || 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; displayNum = count;
AppConfig.setConfig("internal_display", device.monitorFriendlyDeviceName);
} }
count++; count++;
//Logger.WriteLine(device.outputTechnology.ToString()); //Logger.WriteLine(device.monitorFriendlyDeviceName + ":" + device.outputTechnology.ToString());
//Logger.WriteLine(device.monitorFriendlyDeviceName);
} }
var screens = Screen.AllScreens; 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() static Guid GetActiveScheme()
{ {
IntPtr pActiveSchemeGuid; 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 lastAuto;
private static long lastTheme; private static long lastTheme;
private static long lastAdmin;
public static InputDispatcher inputDispatcher; public static InputDispatcher inputDispatcher;
@@ -48,7 +47,7 @@ namespace GHelper
Debug.WriteLine(CultureInfo.CurrentUICulture); Debug.WriteLine(CultureInfo.CurrentUICulture);
//Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr"); //Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr");
CheckProcesses(); ProcessHelper.CheckAlreadyRunning();
try try
{ {
@@ -67,7 +66,7 @@ namespace GHelper
} }
Logger.WriteLine("------------"); 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(); Application.EnableVisualStyles();
@@ -100,8 +99,6 @@ namespace GHelper
SettingsToggle(action); SettingsToggle(action);
} }
Application.Run(); Application.Run();
} }
@@ -174,8 +171,7 @@ namespace GHelper
public static void SettingsToggle(string action = "") public static void SettingsToggle(string action = "")
{ {
if (settingsForm.Visible) if (settingsForm.Visible) settingsForm.HideAll();
settingsForm.Hide();
else else
{ {
settingsForm.Show(); settingsForm.Show();
@@ -214,55 +210,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

@@ -190,7 +190,7 @@
<value>Encendida</value> <value>Encendida</value>
</data> </data>
<data name="BacklightTimeout" xml:space="preserve"> <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>
<data name="BacklightTimeoutPlugged" xml:space="preserve"> <data name="BacklightTimeoutPlugged" xml:space="preserve">
<value>Apagar cuando está enchufado tras (0 - nunca)</value> <value>Apagar cuando está enchufado tras (0 - nunca)</value>
@@ -267,6 +267,9 @@
<data name="FansPower" xml:space="preserve"> <data name="FansPower" xml:space="preserve">
<value>Ventiladores + Energía</value> <value>Ventiladores + Energía</value>
</data> </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"> <data name="GPUBoost" xml:space="preserve">
<value>Dynamic Boost</value> <value>Dynamic Boost</value>
</data> </data>
@@ -435,6 +438,9 @@
<data name="ToggleAura" xml:space="preserve"> <data name="ToggleAura" xml:space="preserve">
<value>Alternar Aura</value> <value>Alternar Aura</value>
</data> </data>
<data name="ToggleFnLock" xml:space="preserve">
<value>Alternar Fn-Lock</value>
</data>
<data name="ToggleMiniled" xml:space="preserve"> <data name="ToggleMiniled" xml:space="preserve">
<value>Alternar Miniled (si comp.)</value> <value>Alternar Miniled (si comp.)</value>
</data> </data>

View File

@@ -154,7 +154,7 @@
<value>Güç Sınırlarını Uygula</value> <value>Güç Sınırlarını Uygula</value>
</data> </data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve"> <data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Auto adjust Windows Power Mode</value> <value>Windows Güç Modunu otomatik ayarla</value>
</data> </data>
<data name="AuraBreathe" xml:space="preserve"> <data name="AuraBreathe" xml:space="preserve">
<value>Nefes</value> <value>Nefes</value>
@@ -189,6 +189,12 @@
<data name="Awake" xml:space="preserve"> <data name="Awake" xml:space="preserve">
<value>Uyanık</value> <value>Uyanık</value>
</data> </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"> <data name="Balanced" xml:space="preserve">
<value>Dengeli</value> <value>Dengeli</value>
</data> </data>
@@ -258,6 +264,9 @@
<data name="FansPower" xml:space="preserve"> <data name="FansPower" xml:space="preserve">
<value>Fanlar + Güç</value> <value>Fanlar + Güç</value>
</data> </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"> <data name="GPUChanging" xml:space="preserve">
<value>Değiştiriliyor</value> <value>Değiştiriliyor</value>
</data> </data>
@@ -282,6 +291,9 @@
<data name="KeyboardAuto" xml:space="preserve"> <data name="KeyboardAuto" xml:space="preserve">
<value>Pille çalışırken klavye aydınlatmasını kıs, şarjdayken eski haline dön</value> <value>Pille çalışırken klavye aydınlatmasını kıs, şarjdayken eski haline dön</value>
</data> </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"> <data name="LaptopBacklight" xml:space="preserve">
<value>Aydınlatması</value> <value>Aydınlatması</value>
</data> </data>
@@ -333,6 +345,9 @@
<data name="OptimizedGPUTooltip" xml:space="preserve"> <data name="OptimizedGPUTooltip" xml:space="preserve">
<value>Pille çalışırken Eko moda ve şarjdayken Standart moda geçiş yapın</value> <value>Pille çalışırken Eko moda ve şarjdayken Standart moda geçiş yapın</value>
</data> </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"> <data name="Other" xml:space="preserve">
<value>Diğer</value> <value>Diğer</value>
</data> </data>

View File

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

View File

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

View File

@@ -6,7 +6,6 @@ using System.Net;
using System.Reflection; using System.Reflection;
using System.Text.Json; using System.Text.Json;
using System.Timers; using System.Timers;
using Tools;
namespace GHelper namespace GHelper
{ {
@@ -35,6 +34,8 @@ namespace GHelper
private bool customFans = false; private bool customFans = false;
private int customPower = 0; private int customPower = 0;
bool isGpuSection = true;
public SettingsForm() public SettingsForm()
{ {
@@ -169,7 +170,7 @@ namespace GHelper
int trim = model.LastIndexOf("_"); int trim = model.LastIndexOf("_");
if (trim > 0) model = model.Substring(0, trim); if (trim > 0) model = model.Substring(0, trim);
labelModel.Text = model + (Program.IsUserAdministrator() ? "." : ""); labelModel.Text = model + (ProcessHelper.IsUserAdministrator() ? "." : "");
TopMost = AppConfig.getConfig("topmost") == 1; TopMost = AppConfig.getConfig("topmost") == 1;
@@ -181,14 +182,8 @@ namespace GHelper
CheckForUpdatesAsync(); CheckForUpdatesAsync();
}); });
Activated += SettingsForm_Activated;
} }
private void SettingsForm_Activated(object? sender, EventArgs e)
{
if (fans != null && fans.Text != "") fans.BringToFront();
}
protected override void WndProc(ref Message m) protected override void WndProc(ref Message m)
{ {
@@ -263,32 +258,36 @@ namespace GHelper
contextMenuStrip.Items.Add("-"); contextMenuStrip.Items.Add("-");
var titleGPU = new ToolStripMenuItem(Properties.Strings.GPUMode); if (isGpuSection)
titleGPU.Margin = padding; {
titleGPU.Enabled = false; var titleGPU = new ToolStripMenuItem(Properties.Strings.GPUMode);
contextMenuStrip.Items.Add(titleGPU); titleGPU.Margin = padding;
titleGPU.Enabled = false;
contextMenuStrip.Items.Add(titleGPU);
menuEco = new ToolStripMenuItem(Properties.Strings.EcoMode); menuEco = new ToolStripMenuItem(Properties.Strings.EcoMode);
menuEco.Click += ButtonEco_Click; menuEco.Click += ButtonEco_Click;
menuEco.Margin = padding; menuEco.Margin = padding;
contextMenuStrip.Items.Add(menuEco); contextMenuStrip.Items.Add(menuEco);
menuStandard = new ToolStripMenuItem(Properties.Strings.StandardMode); menuStandard = new ToolStripMenuItem(Properties.Strings.StandardMode);
menuStandard.Click += ButtonStandard_Click; menuStandard.Click += ButtonStandard_Click;
menuStandard.Margin = padding; menuStandard.Margin = padding;
contextMenuStrip.Items.Add(menuStandard); contextMenuStrip.Items.Add(menuStandard);
menuUltimate = new ToolStripMenuItem(Properties.Strings.UltimateMode); menuUltimate = new ToolStripMenuItem(Properties.Strings.UltimateMode);
menuUltimate.Click += ButtonUltimate_Click; menuUltimate.Click += ButtonUltimate_Click;
menuUltimate.Margin = padding; menuUltimate.Margin = padding;
contextMenuStrip.Items.Add(menuUltimate); contextMenuStrip.Items.Add(menuUltimate);
menuOptimized = new ToolStripMenuItem(Properties.Strings.Optimized); menuOptimized = new ToolStripMenuItem(Properties.Strings.Optimized);
menuOptimized.Click += ButtonOptimized_Click; menuOptimized.Click += ButtonOptimized_Click;
menuOptimized.Margin = padding; menuOptimized.Margin = padding;
contextMenuStrip.Items.Add(menuOptimized); contextMenuStrip.Items.Add(menuOptimized);
contextMenuStrip.Items.Add("-");
}
contextMenuStrip.Items.Add("-");
var quit = new ToolStripMenuItem(Properties.Strings.Quit); var quit = new ToolStripMenuItem(Properties.Strings.Quit);
quit.Click += ButtonQuit_Click; quit.Click += ButtonQuit_Click;
@@ -374,7 +373,8 @@ namespace GHelper
string url = null; 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")) if (assets[i].GetProperty("browser_download_url").ToString().Contains(".zip"))
url = assets[i].GetProperty("browser_download_url").ToString(); url = assets[i].GetProperty("browser_download_url").ToString();
} }
@@ -912,12 +912,23 @@ namespace GHelper
Application.Exit(); 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) private void SettingsForm_FormClosing(object? sender, FormClosingEventArgs e)
{ {
if (e.CloseReason == CloseReason.UserClosing) if (e.CloseReason == CloseReason.UserClosing)
{ {
e.Cancel = true; e.Cancel = true;
Hide(); HideAll();
} }
} }
@@ -1070,7 +1081,7 @@ namespace GHelper
} }
int setStatus = nvControl.SetClocks(gpu_core, gpu_memory); 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) catch (Exception ex)
@@ -1295,7 +1306,9 @@ namespace GHelper
public void AutoKeyboard() public void AutoKeyboard()
{ {
InputDispatcher.SetBacklight(true); InputDispatcher.SetBacklightAuto(true);
if (AppConfig.ContainsModel("X16") || AppConfig.ContainsModel("X13")) InputDispatcher.TabletMode();
} }
public void AutoPerformance() public void AutoPerformance()
@@ -1463,8 +1476,9 @@ namespace GHelper
if (eco < 0) if (eco < 0)
{ {
tableGPU.Visible = false; isGpuSection = tableGPU.Visible = false;
if (Program.acpi.DeviceGet(AsusACPI.GPU_Fan) < 0) panelGPU.Visible = false; SetContextMenu();
if (HardwareControl.FormatFan(Program.acpi.DeviceGet(AsusACPI.GPU_Fan)) is null) panelGPU.Visible = false;
} }
} }
@@ -1495,9 +1509,9 @@ namespace GHelper
if (dialogResult == DialogResult.No) return; 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"); Logger.WriteLine("Trying to restart dGPU");

View File

@@ -16,7 +16,7 @@ public class Startup
public static void ReScheduleAdmin() public static void ReScheduleAdmin()
{ {
if (Program.IsUserAdministrator() && IsScheduled()) if (ProcessHelper.IsUserAdministrator() && IsScheduled())
{ {
UnSchedule(); UnSchedule();
Schedule(); Schedule();
@@ -38,7 +38,7 @@ public class Startup
td.Triggers.Add(new LogonTrigger { UserId = userId }); td.Triggers.Add(new LogonTrigger { UserId = userId });
td.Actions.Add(strExeFilePath); td.Actions.Add(strExeFilePath);
if (Program.IsUserAdministrator()) if (ProcessHelper.IsUserAdministrator())
td.Principal.RunLevel = TaskRunLevel.Highest; td.Principal.RunLevel = TaskRunLevel.Highest;
td.Settings.StopIfGoingOnBatteries = false; td.Settings.StopIfGoingOnBatteries = false;
@@ -54,10 +54,10 @@ public class Startup
} }
catch (Exception e) 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); 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 else
Program.RunAsAdmin(); ProcessHelper.RunAsAdmin();
} }
} }
@@ -73,10 +73,10 @@ public class Startup
} }
catch (Exception e) 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); 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 else
Program.RunAsAdmin(); ProcessHelper.RunAsAdmin();
} }
} }
} }

View File

@@ -1,6 +1,8 @@
# G-Helper (GHelper) # 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/) [![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) Language: English | [中文](https://github.com/seerge/g-helper/blob/main/docs/README.zh-CN.md)
## Control tool for Asus laptops ## Control tool for Asus laptops

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/) [![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) | 中文 语言: [English](https://github.com/seerge/g-helper#readme) | 中文
## 为ASUS笔记本打造的、Armoury Crate(奥创控制中心)的轻量化替代品 ## 为ASUS笔记本打造的、Armoury Crate(奥创控制中心)的轻量化替代品

BIN
docs/ua.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB