Compare commits

..

126 Commits

Author SHA1 Message Date
Serge
1c25824bcf Merge branch 'main' of https://github.com/seerge/g-helper 2023-08-05 13:17:52 +02:00
Serge
0fec4c9620 Optimized USB-C fix 2023-08-05 13:17:50 +02:00
Serge
2206411bea Merge pull request #1006 from seerge/l10n_main
New Crowdin updates
2023-08-05 12:43:36 +02:00
Serge
62efe79b7a New translations Strings.resx (Lithuanian) 2023-08-05 10:47:04 +02:00
Serge
327cf0e9dd New translations Strings.resx (Chinese Traditional) 2023-08-05 03:25:59 +02:00
Serge
fa3d9d1f81 - 2023-08-04 22:20:33 +02:00
Serge
cb0996eca9 Merge branch 'main' of https://github.com/seerge/g-helper 2023-08-04 22:05:41 +02:00
Serge
3a5dbbf2ea Bindings 2023-08-04 22:05:39 +02:00
Serge
1062aba6a4 Merge pull request #1001 from seerge/l10n_main
New Crowdin updates
2023-08-04 22:03:13 +02:00
Serge
849faa5029 Merge branch 'main' of https://github.com/seerge/g-helper 2023-08-04 21:59:04 +02:00
Serge
f242e74d07 Empty Default actions for CC / Padles on Ally 2023-08-04 21:59:02 +02:00
Serge
98a0c21355 Bindings fixes 2023-08-04 21:36:44 +02:00
Serge
7e2206d20c New translations Strings.resx (Ukrainian) 2023-08-04 18:27:11 +02:00
Serge
5f05672a3f New translations Strings.resx (Lithuanian) 2023-08-04 18:27:10 +02:00
Serge
ea812ae645 Update README.md 2023-08-04 15:59:26 +02:00
Serge
83eed09f48 Update README.md 2023-08-04 15:40:19 +02:00
Serge
d834264ef2 Merge pull request #992 from seerge/l10n_main
New Crowdin updates
2023-08-04 11:17:42 +02:00
Serge
df0ff6c284 New translations Strings.resx (Chinese Simplified) 2023-08-04 05:26:30 +02:00
Serge
bab796bae1 New translations Strings.resx (German) 2023-08-03 22:31:21 +02:00
Serge
2097a42973 Merge branch 'main' of https://github.com/seerge/g-helper 2023-08-03 21:32:05 +02:00
Serge
458527ce2b Version Bump 2023-08-03 21:32:03 +02:00
Serge
c93f2277cf Universal brightness control 2023-08-03 21:28:05 +02:00
Serge
013bedcf9a Update README.md 2023-08-03 19:39:40 +02:00
Serge
39731fc2e8 Update README.md 2023-08-03 19:37:01 +02:00
Serge
2c1877a321 Update README.md 2023-08-03 19:34:47 +02:00
Serge
31ebbc3d18 Charge label fix 2023-08-03 19:07:30 +02:00
Serge
1447b10992 Merge pull request #985 from seerge/l10n_main
New Crowdin updates
2023-08-03 18:57:57 +02:00
Serge
ffaf3b4ab8 New translations Strings.resx (Polish) 2023-08-03 17:59:14 +02:00
Serge
7ca0dc4a85 New translations Strings.resx (Vietnamese) 2023-08-03 17:59:13 +02:00
Serge
7d3c54ef4c New translations Strings.resx (Chinese Traditional) 2023-08-03 17:59:12 +02:00
Serge
dd55a9ae4b New translations Strings.resx (Chinese Simplified) 2023-08-03 17:59:11 +02:00
Serge
4fff5ddb0a New translations Strings.resx (Ukrainian) 2023-08-03 17:59:10 +02:00
Serge
c657b79422 New translations Strings.resx (Turkish) 2023-08-03 17:59:09 +02:00
Serge
b3a8a9abef New translations Strings.resx (Portuguese) 2023-08-03 17:59:09 +02:00
Serge
6995637aec New translations Strings.resx (Lithuanian) 2023-08-03 17:59:08 +02:00
Serge
0cb0ff12a5 New translations Strings.resx (Korean) 2023-08-03 17:59:07 +02:00
Serge
f582882828 New translations Strings.resx (Italian) 2023-08-03 17:59:06 +02:00
Serge
4b6736c255 New translations Strings.resx (Hungarian) 2023-08-03 17:59:05 +02:00
Serge
246fbc9437 New translations Strings.resx (German) 2023-08-03 17:59:04 +02:00
Serge
e135d58c46 New translations Strings.resx (Spanish) 2023-08-03 17:59:03 +02:00
Serge
9bf4396902 New translations Strings.resx (French) 2023-08-03 17:59:02 +02:00
Serge
60e88c0b45 New translations Strings.resx (Romanian) 2023-08-03 17:59:01 +02:00
Serge
8ec72ec94d Merge branch 'main' of https://github.com/seerge/g-helper 2023-08-03 17:15:49 +02:00
Serge
b808efb502 Added Battery Charge 2023-08-03 17:15:46 +02:00
Serge
92f9333800 Merge pull request #984 from IceStormNG/asus-mouse-support
TUF Gaming M3 support
2023-08-03 17:10:07 +02:00
IceStormNG
3c4a6c5e95 Added TUF Gaming M3 2023-08-03 17:05:26 +02:00
Serge
b22fffe81a Merge branch 'main' of https://github.com/seerge/g-helper 2023-08-03 14:21:14 +02:00
Serge
dcecfbaeda Heatmap cleanup 2023-08-03 14:21:12 +02:00
Serge
2a6d02b1cb Tuf keybindings https://github.com/seerge/g-helper/issues/975 2023-08-03 13:48:24 +02:00
Serge
048f68e2ff UI Tweaks 2023-08-03 13:14:54 +02:00
Serge
ac66642623 Merge pull request #977 from ktemkin/ally_buttons
add as much button support as we can to the RC71 (ROG Ally)
2023-08-03 12:44:46 +02:00
Kate Temkin
8d9999c6c7 add as much button support as we can to the RC71 (ROG Ally) 2023-08-02 20:52:15 -06:00
IceStormNG
977e7cc8c4 Angle tuning limits are now variable and can be overriden per mouse. 2023-08-02 21:44:03 +02:00
Serge
662d5fb414 Aura Fix 2023-08-02 20:44:31 +02:00
Serge
3e0dc9ee7d Heatmap Alt fix 2023-08-02 18:25:27 +02:00
Serge
9cef990edf Revert aura tweak 2023-08-02 15:01:41 +02:00
Serge
f288f1fbf4 Merge branch 'main' of https://github.com/seerge/g-helper 2023-08-02 14:43:17 +02:00
Serge
5561101093 Aura 2023-08-02 14:43:15 +02:00
Serge
a27906b1b7 Merge pull request #970 from seerge/l10n_main
New Crowdin updates
2023-08-02 11:13:13 +02:00
IceStormNG
659a408225 Disable packet logger for release builds. 2023-08-02 10:32:25 +02:00
Serge
3d4fab99b6 New translations Strings.resx (Chinese Simplified) 2023-08-02 04:29:56 +02:00
Serge
7c5f5a9b24 Merge branch 'main' of https://github.com/seerge/g-helper 2023-08-02 00:30:48 +02:00
Serge
e9ae5c9dc8 Brightness fix for TUF506 2023-08-02 00:30:46 +02:00
Serge
33311611ab Fixed heatmap https://github.com/seerge/g-helper/issues/967 2023-08-01 23:54:13 +02:00
Serge
d50ec93e94 Merge branch 'main' of https://github.com/seerge/g-helper 2023-08-01 22:45:39 +02:00
Serge
fbdfdd2f03 Skip custom keybindings https://github.com/seerge/g-helper/issues/960 2023-08-01 22:45:38 +02:00
Serge
cbe05b1a7c Update README.md 2023-08-01 22:30:14 +02:00
Serge
f32f70f145 2 Heatmap modes, one can blink, another one don't work on some devices 2023-08-01 20:24:16 +02:00
Serge
409febb48f Merge branch 'main' of https://github.com/seerge/g-helper 2023-08-01 20:02:36 +02:00
Serge
df132ee196 Aura Fix Attempt 2023-08-01 20:02:34 +02:00
Serge
63b93cab0b Update README.md 2023-08-01 18:31:31 +02:00
Serge
9b1170d364 Update README.md 2023-08-01 14:10:17 +02:00
Serge
0dba6d7a42 Update README.md 2023-08-01 14:09:42 +02:00
Serge
d82deb9860 Fn+Np Enter support https://github.com/seerge/g-helper/issues/963 2023-08-01 13:20:11 +02:00
Serge
3307a95955 Merge branch 'main' of https://github.com/seerge/g-helper 2023-08-01 12:23:26 +02:00
Serge
392b437913 Ctrl+M1/M2 for TUF 2023-08-01 12:23:23 +02:00
Serge
8312d8700e Merge pull request #962 from seerge/l10n_main
New Crowdin updates
2023-08-01 11:20:08 +02:00
Serge
f8110ef661 New translations Strings.resx (Lithuanian) 2023-08-01 08:30:05 +02:00
Serge
4da8f599ab New translations Strings.resx (Ukrainian) 2023-07-31 22:32:17 +02:00
Serge
0aa1e81665 Merge pull request #958 from seerge/l10n_main
New Crowdin updates
2023-07-31 22:21:55 +02:00
Serge
ffe07b42b5 Update README.md 2023-07-31 20:53:34 +02:00
Serge
d7dd4db144 New translations Strings.resx (Polish) 2023-07-31 20:40:23 +02:00
Serge
c81cb85112 New translations Strings.resx (Ukrainian) 2023-07-31 20:40:20 +02:00
Serge
e24f7679a6 New translations Strings.resx (Italian) 2023-07-31 20:40:17 +02:00
Serge
b4b3034e92 New translations Strings.resx (Hungarian) 2023-07-31 20:40:16 +02:00
Serge
9c452a2172 New translations Strings.resx (Spanish) 2023-07-31 20:40:14 +02:00
Serge
86bc0f4e5d Merge pull request #957 from IceStormNG/asus-mouse-support
Adds support for Gladius III Wireless (P706_Wireless).
2023-07-31 18:35:10 +02:00
IceStormNG
8f59ff5e3d Adds support for Gladius III Wireless (P706_Wireless). Renamed the other Gladius III (Wireless Aimpoint) to differentiate them. Fixes a crashbug that can occurs when opening the 2023-07-31 18:21:28 +02:00
Serge
a8db22b22b Merge branch 'main' of https://github.com/seerge/g-helper 2023-07-31 17:51:02 +02:00
Serge
bffd68ead4 Aura Tweaks 2023-07-31 17:50:59 +02:00
Serge
46c0f89632 Merge pull request #955 from seerge/l10n_main
New Crowdin updates
2023-07-31 17:50:07 +02:00
Serge
08c28ed0d0 New translations Strings.resx (Chinese Traditional) 2023-07-31 17:15:58 +02:00
Serge
f24f2dcec3 New translations Strings.resx (Vietnamese) 2023-07-31 16:08:52 +02:00
Serge
f7b2a5b893 New translations Strings.resx (Chinese Simplified) 2023-07-31 16:08:51 +02:00
Serge
da34a5af56 New translations Strings.resx (Turkish) 2023-07-31 16:08:49 +02:00
Serge
fa9d73e629 New translations Strings.resx (Portuguese) 2023-07-31 16:08:48 +02:00
Serge
e1b6e3057d New translations Strings.resx (Lithuanian) 2023-07-31 16:08:47 +02:00
Serge
5bb3b67979 New translations Strings.resx (Korean) 2023-07-31 16:08:46 +02:00
Serge
4046982698 New translations Strings.resx (German) 2023-07-31 16:08:43 +02:00
Serge
4f80d1ced6 New translations Strings.resx (French) 2023-07-31 16:08:41 +02:00
Serge
22799caedc New translations Strings.resx (Romanian) 2023-07-31 16:08:40 +02:00
Serge
107b09c6dc Merge pull request #954 from IceStormNG/asus-mouse-support
Adds Button debounce (button response time) setting for supported mice.
2023-07-31 13:08:20 +02:00
IceStormNG
4f2fdc55ee Adds Button debounce (button response time) setting for supported mice. 2023-07-31 13:05:31 +02:00
Serge
16674b773d Merge pull request #950 from seerge/l10n_main
New Crowdin updates
2023-07-31 13:03:07 +02:00
Serge
1e8bbba24e Merge pull request #953 from IceStormNG/asus-mouse-support
Added Rog Strix Impact II Wireless mouse support.
2023-07-31 13:02:46 +02:00
IceStormNG
b5451cfc21 Added Rog Strix Impact II Wireless mouse support. Hint: Has the same DPI switching Problem as the Keris. 2023-07-31 12:40:40 +02:00
Serge
6507dee307 New translations Strings.resx (Chinese Simplified) 2023-07-31 07:59:33 +02:00
Serge
930b885ac0 Merge pull request #943 from seerge/l10n_main
New Crowdin updates
2023-07-31 01:13:28 +02:00
Serge
22377a4ba9 Merge branch 'main' of https://github.com/seerge/g-helper 2023-07-31 00:08:47 +02:00
Serge
85cd10132e Setting Standard mode prior to going Ultimate 2023-07-31 00:08:45 +02:00
Serge
643e29e25a New translations Strings.resx (Spanish) 2023-07-30 22:02:10 +02:00
Serge
70c41b311c Update bug_report.md 2023-07-30 22:00:47 +02:00
Serge
85880c16c1 Update README.md 2023-07-30 21:59:35 +02:00
Serge
3ff0335985 Restored fallback CPU temp reading method 2023-07-30 21:52:28 +02:00
Serge
3bafaaada0 Aura Fix 3 2023-07-30 20:25:13 +02:00
Serge
584c641b18 Aura Fix 2023-07-30 20:11:41 +02:00
Serge
ca1875d57a Aura Fix 2 2023-07-30 20:08:44 +02:00
Serge
03c45994dc Aura Fix 2023-07-30 20:00:36 +02:00
Serge
f0cbec6ea1 New translations Strings.resx (Lithuanian) 2023-07-30 18:52:02 +02:00
Serge
72fe01bb34 Merge pull request #940 from seerge/l10n_main
New Crowdin updates
2023-07-30 18:26:55 +02:00
Serge
50ae8ae843 Merge pull request #941 from IceStormNG/asus-mouse-support
Mouse support fixes
2023-07-30 17:58:53 +02:00
Serge
14e3d41def New translations Strings.resx (Lithuanian) 2023-07-30 17:52:38 +02:00
Serge
200a2a9eb9 New translations Strings.resx (Polish) 2023-07-30 17:52:37 +02:00
IceStormNG
769c490d21 Give lighting zone table layout a proper name 2023-07-30 17:30:02 +02:00
IceStormNG
0da5002804 Only set new mouse profile if it actually changed. 2023-07-30 17:29:26 +02:00
IceStormNG
5bf579fec5 Imroved handling for mice with only a single lighting zone. 2023-07-30 17:28:08 +02:00
43 changed files with 1648 additions and 536 deletions

View File

@@ -7,7 +7,7 @@ about: Create a report to help us improve
## NOTE
Bug reports without clear information or scenario to reproduce and logs from ``%AppData%\GHelper`` will be closed without answer.
Please respect time of the developer. Thanks.
Please respect the time of the developer. Thanks.
**Describe the bug**
@@ -34,7 +34,7 @@ If applicable, add screenshots to help explain your problem.
- Laptop model
**Asus software**
- Armoury crate (or it's services installed)
- Armoury Crate (or it's services installed)
- MyASUS installed
- Other Asus services running in background

View File

@@ -70,6 +70,7 @@ namespace GHelper.AnimeMatrix
if (brightness == 0 || (auto && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online))
{
mat.SetDisplayState(false);
mat.SetDisplayState(false); // some devices are dumb
Logger.WriteLine("Matrix Off");
}
else

View File

@@ -260,4 +260,66 @@ public static class AppConfig
Set(name + "_" + Modes.GetCurrent(), value);
}
public static bool IsAlly()
{
return ContainsModel("RC71");
}
public static bool NoMKeys()
{
return ContainsModel("Z13") ||
ContainsModel("FX706") ||
ContainsModel("FA506") ||
ContainsModel("FX506") ||
ContainsModel("Duo") ||
ContainsModel("FX505");
}
public static bool IsTUF()
{
return ContainsModel("TUF");
}
// Devices with bugged bios command to change brightness
public static bool SwappedBrightness()
{
return ContainsModel("FA506IH") || ContainsModel("FX506LU");
}
public static bool IsDUO()
{
return ContainsModel("Duo");
}
// G14 2020 has no aura, but media keys instead
public static bool NoAura()
{
return ContainsModel("GA401I") && !ContainsModel("GA401IHR");
}
public static bool NoAuraColor()
{
return ContainsModel("GA401") || ContainsModel("X13");
}
public static bool IsStrix()
{
return ContainsModel("Strix") || ContainsModel("Scar");
}
public static bool IsZ13()
{
return ContainsModel("Z13");
}
public static bool HasTabletMode()
{
return ContainsModel("X16") || ContainsModel("X13");
}
public static bool IsAdvantageEdition()
{
return ContainsModel("13QY");
}
}

View File

@@ -109,7 +109,7 @@ public class AsusACPI
public const int GPUModeStandard = 1;
public const int GPUModeUltimate = 2;
public static int MaxTotal => AppConfig.ContainsModel("13QY") ? 250 : 150;
public static int MaxTotal => AppConfig.IsAdvantageEdition() ? 250 : 150;
public const int MinTotal = 5;
public const int DefaultTotal = 125;

View File

@@ -33,13 +33,20 @@
labelProfile = new Label();
panelPerformance = new Panel();
panelPerformanceOther = new Panel();
comboBoxLiftOffDistance = new UI.RComboBox();
panelLiftOffDistance = new Panel();
labelLiftOffDistance = new Label();
labelAngleAdjustmentValue = new Label();
comboBoxLiftOffDistance = new UI.RComboBox();
panelDebounce = new Panel();
labelButtonDebounce = new Label();
sliderButtonDebounce = new UI.Slider();
labelButtonDebounceValue = new Label();
panelAngleSnapping = new Panel();
sliderAngleAdjustment = new UI.Slider();
checkBoxAngleSnapping = new CheckBox();
comboBoxPollingRate = new UI.RComboBox();
labelAngleAdjustmentValue = new Label();
panelPollingRate = new Panel();
labelPollingRate = new Label();
comboBoxPollingRate = new UI.RComboBox();
panelDPISettings = new Panel();
sliderDPI = new UI.Slider();
tableLayoutPanel1 = new TableLayoutPanel();
@@ -60,7 +67,7 @@
labelPerformance = new Label();
panelLighting = new Panel();
panelLightingContent = new Panel();
tableLayoutPanel3 = new TableLayoutPanel();
tableLayoutLightingZones = new TableLayoutPanel();
buttonLightingZoneScroll = new UI.RButton();
buttonLightingZoneLogo = new UI.RButton();
buttonLightingZoneAll = new UI.RButton();
@@ -101,6 +108,10 @@
panelProfiles.SuspendLayout();
panelPerformance.SuspendLayout();
panelPerformanceOther.SuspendLayout();
panelLiftOffDistance.SuspendLayout();
panelDebounce.SuspendLayout();
panelAngleSnapping.SuspendLayout();
panelPollingRate.SuspendLayout();
panelDPISettings.SuspendLayout();
tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)numericUpDownCurrentDPI).BeginInit();
@@ -111,7 +122,7 @@
((System.ComponentModel.ISupportInitialize)pictureKeyboard).BeginInit();
panelLighting.SuspendLayout();
panelLightingContent.SuspendLayout();
tableLayoutPanel3.SuspendLayout();
tableLayoutLightingZones.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBoxLightingColor).BeginInit();
panelLightingHeader.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBoxLighting).BeginInit();
@@ -171,27 +182,46 @@
panelPerformance.Location = new Point(11, 68);
panelPerformance.Name = "panelPerformance";
panelPerformance.Padding = new Padding(0, 11, 0, 25);
panelPerformance.Size = new Size(654, 408);
panelPerformance.Size = new Size(654, 461);
panelPerformance.TabIndex = 1;
//
// panelPerformanceOther
//
panelPerformanceOther.AutoSize = true;
panelPerformanceOther.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelPerformanceOther.Controls.Add(comboBoxLiftOffDistance);
panelPerformanceOther.Controls.Add(labelLiftOffDistance);
panelPerformanceOther.Controls.Add(labelAngleAdjustmentValue);
panelPerformanceOther.Controls.Add(sliderAngleAdjustment);
panelPerformanceOther.Controls.Add(checkBoxAngleSnapping);
panelPerformanceOther.Controls.Add(comboBoxPollingRate);
panelPerformanceOther.Controls.Add(labelPollingRate);
panelPerformanceOther.Controls.Add(panelLiftOffDistance);
panelPerformanceOther.Controls.Add(panelDebounce);
panelPerformanceOther.Controls.Add(panelAngleSnapping);
panelPerformanceOther.Controls.Add(panelPollingRate);
panelPerformanceOther.Dock = DockStyle.Top;
panelPerformanceOther.Location = new Point(0, 240);
panelPerformanceOther.Name = "panelPerformanceOther";
panelPerformanceOther.Padding = new Padding(0, 11, 0, 11);
panelPerformanceOther.Size = new Size(654, 143);
panelPerformanceOther.Size = new Size(654, 196);
panelPerformanceOther.TabIndex = 49;
//
// panelLiftOffDistance
//
panelLiftOffDistance.AutoSize = true;
panelLiftOffDistance.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelLiftOffDistance.Controls.Add(labelLiftOffDistance);
panelLiftOffDistance.Controls.Add(comboBoxLiftOffDistance);
panelLiftOffDistance.Dock = DockStyle.Top;
panelLiftOffDistance.Location = new Point(0, 142);
panelLiftOffDistance.Name = "panelLiftOffDistance";
panelLiftOffDistance.Padding = new Padding(5);
panelLiftOffDistance.Size = new Size(654, 43);
panelLiftOffDistance.TabIndex = 56;
//
// labelLiftOffDistance
//
labelLiftOffDistance.Location = new Point(5, 5);
labelLiftOffDistance.Margin = new Padding(6, 0, 6, 0);
labelLiftOffDistance.Name = "labelLiftOffDistance";
labelLiftOffDistance.Size = new Size(348, 33);
labelLiftOffDistance.TabIndex = 48;
labelLiftOffDistance.Text = "Lift Off Distance";
//
// comboBoxLiftOffDistance
//
comboBoxLiftOffDistance.BorderColor = Color.White;
@@ -199,35 +229,77 @@
comboBoxLiftOffDistance.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxLiftOffDistance.FlatStyle = FlatStyle.Flat;
comboBoxLiftOffDistance.FormattingEnabled = true;
comboBoxLiftOffDistance.Location = new Point(368, 99);
comboBoxLiftOffDistance.Location = new Point(367, 5);
comboBoxLiftOffDistance.Margin = new Padding(16, 0, 16, 0);
comboBoxLiftOffDistance.Name = "comboBoxLiftOffDistance";
comboBoxLiftOffDistance.Size = new Size(281, 33);
comboBoxLiftOffDistance.TabIndex = 49;
//
// labelLiftOffDistance
// panelDebounce
//
labelLiftOffDistance.Location = new Point(6, 99);
labelLiftOffDistance.Margin = new Padding(6, 0, 6, 0);
labelLiftOffDistance.Name = "labelLiftOffDistance";
labelLiftOffDistance.Size = new Size(348, 33);
labelLiftOffDistance.TabIndex = 48;
labelLiftOffDistance.Text = "Lift Off Distance";
panelDebounce.AutoSize = true;
panelDebounce.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelDebounce.Controls.Add(labelButtonDebounce);
panelDebounce.Controls.Add(sliderButtonDebounce);
panelDebounce.Controls.Add(labelButtonDebounceValue);
panelDebounce.Dock = DockStyle.Top;
panelDebounce.Location = new Point(0, 95);
panelDebounce.Name = "panelDebounce";
panelDebounce.Padding = new Padding(5);
panelDebounce.Size = new Size(654, 47);
panelDebounce.TabIndex = 55;
//
// labelAngleAdjustmentValue
// labelButtonDebounce
//
labelAngleAdjustmentValue.Location = new Point(598, 61);
labelAngleAdjustmentValue.Margin = new Padding(6, 0, 6, 0);
labelAngleAdjustmentValue.Name = "labelAngleAdjustmentValue";
labelAngleAdjustmentValue.Size = new Size(48, 30);
labelAngleAdjustmentValue.TabIndex = 47;
labelAngleAdjustmentValue.Text = "";
labelAngleAdjustmentValue.TextAlign = ContentAlignment.MiddleRight;
labelButtonDebounce.Location = new Point(6, 7);
labelButtonDebounce.Margin = new Padding(6, 0, 6, 0);
labelButtonDebounce.Name = "labelButtonDebounce";
labelButtonDebounce.Size = new Size(348, 33);
labelButtonDebounce.TabIndex = 52;
labelButtonDebounce.Text = "Button Response";
//
// sliderButtonDebounce
//
sliderButtonDebounce.AccessibleName = "DPI Slider";
sliderButtonDebounce.Location = new Point(368, 9);
sliderButtonDebounce.Max = 7;
sliderButtonDebounce.Min = 2;
sliderButtonDebounce.Name = "sliderButtonDebounce";
sliderButtonDebounce.Size = new Size(213, 30);
sliderButtonDebounce.Step = 1;
sliderButtonDebounce.TabIndex = 50;
sliderButtonDebounce.TabStop = false;
sliderButtonDebounce.Text = "sliderBattery";
sliderButtonDebounce.Value = 2;
//
// labelButtonDebounceValue
//
labelButtonDebounceValue.Location = new Point(590, 9);
labelButtonDebounceValue.Margin = new Padding(6, 0, 6, 0);
labelButtonDebounceValue.Name = "labelButtonDebounceValue";
labelButtonDebounceValue.Size = new Size(60, 30);
labelButtonDebounceValue.TabIndex = 51;
labelButtonDebounceValue.Text = "12ms";
labelButtonDebounceValue.TextAlign = ContentAlignment.MiddleRight;
//
// panelAngleSnapping
//
panelAngleSnapping.AutoSize = true;
panelAngleSnapping.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelAngleSnapping.Controls.Add(sliderAngleAdjustment);
panelAngleSnapping.Controls.Add(checkBoxAngleSnapping);
panelAngleSnapping.Controls.Add(labelAngleAdjustmentValue);
panelAngleSnapping.Dock = DockStyle.Top;
panelAngleSnapping.Location = new Point(0, 51);
panelAngleSnapping.Name = "panelAngleSnapping";
panelAngleSnapping.Padding = new Padding(5);
panelAngleSnapping.Size = new Size(654, 44);
panelAngleSnapping.TabIndex = 54;
//
// sliderAngleAdjustment
//
sliderAngleAdjustment.AccessibleName = "DPI Slider";
sliderAngleAdjustment.Location = new Point(397, 61);
sliderAngleAdjustment.Location = new Point(396, 6);
sliderAngleAdjustment.Max = 20;
sliderAngleAdjustment.Min = -20;
sliderAngleAdjustment.Name = "sliderAngleAdjustment";
@@ -241,7 +313,7 @@
// checkBoxAngleSnapping
//
checkBoxAngleSnapping.CheckAlign = ContentAlignment.MiddleRight;
checkBoxAngleSnapping.Location = new Point(6, 61);
checkBoxAngleSnapping.Location = new Point(5, 6);
checkBoxAngleSnapping.Margin = new Padding(6, 0, 6, 0);
checkBoxAngleSnapping.Name = "checkBoxAngleSnapping";
checkBoxAngleSnapping.Size = new Size(384, 30);
@@ -250,6 +322,38 @@
checkBoxAngleSnapping.TextAlign = ContentAlignment.TopLeft;
checkBoxAngleSnapping.UseVisualStyleBackColor = true;
//
// labelAngleAdjustmentValue
//
labelAngleAdjustmentValue.Location = new Point(597, 6);
labelAngleAdjustmentValue.Margin = new Padding(6, 0, 6, 0);
labelAngleAdjustmentValue.Name = "labelAngleAdjustmentValue";
labelAngleAdjustmentValue.Size = new Size(48, 30);
labelAngleAdjustmentValue.TabIndex = 47;
labelAngleAdjustmentValue.Text = "0°";
labelAngleAdjustmentValue.TextAlign = ContentAlignment.MiddleRight;
//
// panelPollingRate
//
panelPollingRate.AutoSize = true;
panelPollingRate.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelPollingRate.Controls.Add(labelPollingRate);
panelPollingRate.Controls.Add(comboBoxPollingRate);
panelPollingRate.Dock = DockStyle.Top;
panelPollingRate.Location = new Point(0, 11);
panelPollingRate.Name = "panelPollingRate";
panelPollingRate.Padding = new Padding(5);
panelPollingRate.Size = new Size(654, 40);
panelPollingRate.TabIndex = 53;
//
// labelPollingRate
//
labelPollingRate.Location = new Point(6, 5);
labelPollingRate.Margin = new Padding(6, 0, 6, 0);
labelPollingRate.Name = "labelPollingRate";
labelPollingRate.Size = new Size(348, 30);
labelPollingRate.TabIndex = 45;
labelPollingRate.Text = "Polling Rate";
//
// comboBoxPollingRate
//
comboBoxPollingRate.BorderColor = Color.White;
@@ -257,21 +361,12 @@
comboBoxPollingRate.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxPollingRate.FlatStyle = FlatStyle.Flat;
comboBoxPollingRate.FormattingEnabled = true;
comboBoxPollingRate.Location = new Point(368, 8);
comboBoxPollingRate.Location = new Point(368, 2);
comboBoxPollingRate.Margin = new Padding(16, 0, 16, 0);
comboBoxPollingRate.Name = "comboBoxPollingRate";
comboBoxPollingRate.Size = new Size(281, 33);
comboBoxPollingRate.TabIndex = 44;
//
// labelPollingRate
//
labelPollingRate.Location = new Point(6, 9);
labelPollingRate.Margin = new Padding(6, 0, 6, 0);
labelPollingRate.Name = "labelPollingRate";
labelPollingRate.Size = new Size(348, 30);
labelPollingRate.TabIndex = 45;
labelPollingRate.Text = "Polling Rate";
//
// panelDPISettings
//
panelDPISettings.AutoSize = true;
@@ -561,7 +656,7 @@
panelLighting.Controls.Add(panelLightingContent);
panelLighting.Controls.Add(panelLightingHeader);
panelLighting.Dock = DockStyle.Top;
panelLighting.Location = new Point(11, 476);
panelLighting.Location = new Point(11, 529);
panelLighting.Name = "panelLighting";
panelLighting.Padding = new Padding(0, 0, 0, 25);
panelLighting.Size = new Size(654, 329);
@@ -570,7 +665,7 @@
// panelLightingContent
//
panelLightingContent.AutoSize = true;
panelLightingContent.Controls.Add(tableLayoutPanel3);
panelLightingContent.Controls.Add(tableLayoutLightingZones);
panelLightingContent.Controls.Add(comboBoxAnimationDirection);
panelLightingContent.Controls.Add(labelAnimationDirection);
panelLightingContent.Controls.Add(checkBoxRandomColor);
@@ -587,29 +682,29 @@
panelLightingContent.Size = new Size(654, 274);
panelLightingContent.TabIndex = 42;
//
// tableLayoutPanel3
// tableLayoutLightingZones
//
tableLayoutPanel3.AutoSize = true;
tableLayoutPanel3.AutoSizeMode = AutoSizeMode.GrowAndShrink;
tableLayoutPanel3.ColumnCount = 5;
tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
tableLayoutPanel3.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
tableLayoutPanel3.Controls.Add(buttonLightingZoneScroll, 0, 0);
tableLayoutPanel3.Controls.Add(buttonLightingZoneLogo, 0, 0);
tableLayoutPanel3.Controls.Add(buttonLightingZoneAll, 0, 0);
tableLayoutPanel3.Controls.Add(buttonLightingZoneUnderglow, 1, 0);
tableLayoutPanel3.Controls.Add(buttonLightingZoneDock, 2, 0);
tableLayoutPanel3.Dock = DockStyle.Top;
tableLayoutPanel3.Location = new Point(0, 0);
tableLayoutPanel3.Margin = new Padding(6, 3, 6, 3);
tableLayoutPanel3.Name = "tableLayoutPanel3";
tableLayoutPanel3.RowCount = 1;
tableLayoutPanel3.RowStyles.Add(new RowStyle(SizeType.Absolute, 60F));
tableLayoutPanel3.Size = new Size(654, 60);
tableLayoutPanel3.TabIndex = 56;
tableLayoutLightingZones.AutoSize = true;
tableLayoutLightingZones.AutoSizeMode = AutoSizeMode.GrowAndShrink;
tableLayoutLightingZones.ColumnCount = 5;
tableLayoutLightingZones.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
tableLayoutLightingZones.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
tableLayoutLightingZones.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
tableLayoutLightingZones.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
tableLayoutLightingZones.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
tableLayoutLightingZones.Controls.Add(buttonLightingZoneScroll, 0, 0);
tableLayoutLightingZones.Controls.Add(buttonLightingZoneLogo, 0, 0);
tableLayoutLightingZones.Controls.Add(buttonLightingZoneAll, 0, 0);
tableLayoutLightingZones.Controls.Add(buttonLightingZoneUnderglow, 1, 0);
tableLayoutLightingZones.Controls.Add(buttonLightingZoneDock, 2, 0);
tableLayoutLightingZones.Dock = DockStyle.Top;
tableLayoutLightingZones.Location = new Point(0, 0);
tableLayoutLightingZones.Margin = new Padding(6, 3, 6, 3);
tableLayoutLightingZones.Name = "tableLayoutLightingZones";
tableLayoutLightingZones.RowCount = 1;
tableLayoutLightingZones.RowStyles.Add(new RowStyle(SizeType.Absolute, 60F));
tableLayoutLightingZones.Size = new Size(654, 60);
tableLayoutLightingZones.TabIndex = 56;
//
// buttonLightingZoneScroll
//
@@ -890,7 +985,7 @@
panelEnergy.Controls.Add(labelAutoPowerOff);
panelEnergy.Controls.Add(panelEnergyHeader);
panelEnergy.Dock = DockStyle.Top;
panelEnergy.Location = new Point(11, 805);
panelEnergy.Location = new Point(11, 858);
panelEnergy.Name = "panelEnergy";
panelEnergy.Padding = new Padding(0, 0, 0, 25);
panelEnergy.Size = new Size(654, 143);
@@ -1071,7 +1166,7 @@
panelBottomButtons.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelBottomButtons.Controls.Add(buttonSync);
panelBottomButtons.Dock = DockStyle.Top;
panelBottomButtons.Location = new Point(11, 948);
panelBottomButtons.Location = new Point(11, 1001);
panelBottomButtons.Name = "panelBottomButtons";
panelBottomButtons.Size = new Size(654, 67);
panelBottomButtons.TabIndex = 47;
@@ -1144,7 +1239,7 @@
AutoScroll = true;
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
ClientSize = new Size(676, 1072);
ClientSize = new Size(676, 1183);
Controls.Add(panelBottomButtons);
Controls.Add(panelEnergy);
Controls.Add(panelLighting);
@@ -1164,6 +1259,11 @@
panelPerformance.ResumeLayout(false);
panelPerformance.PerformLayout();
panelPerformanceOther.ResumeLayout(false);
panelPerformanceOther.PerformLayout();
panelLiftOffDistance.ResumeLayout(false);
panelDebounce.ResumeLayout(false);
panelAngleSnapping.ResumeLayout(false);
panelPollingRate.ResumeLayout(false);
panelDPISettings.ResumeLayout(false);
panelDPISettings.PerformLayout();
tableLayoutPanel1.ResumeLayout(false);
@@ -1179,8 +1279,8 @@
panelLighting.PerformLayout();
panelLightingContent.ResumeLayout(false);
panelLightingContent.PerformLayout();
tableLayoutPanel3.ResumeLayout(false);
tableLayoutPanel3.PerformLayout();
tableLayoutLightingZones.ResumeLayout(false);
tableLayoutLightingZones.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureBoxLightingColor).EndInit();
panelLightingHeader.ResumeLayout(false);
panelLightingHeader.PerformLayout();
@@ -1263,7 +1363,7 @@
private UI.RButton buttonSync;
private Panel panelBottomButtons;
private NumericUpDown numericUpDownCurrentDPI;
private TableLayoutPanel tableLayoutPanel3;
private TableLayoutPanel tableLayoutLightingZones;
private UI.RButton buttonLightingZoneScroll;
private UI.RButton buttonLightingZoneLogo;
private UI.RButton buttonLightingZoneAll;
@@ -1272,5 +1372,12 @@
private TableLayoutPanel tableLayoutPanel2;
private UI.RButton rButton1;
private UI.RButton rButton2;
private Label labelButtonDebounce;
private Label labelButtonDebounceValue;
private UI.Slider sliderButtonDebounce;
private Panel panelPollingRate;
private Panel panelAngleSnapping;
private Panel panelLiftOffDistance;
private Panel panelDebounce;
}
}

View File

@@ -45,6 +45,7 @@ namespace GHelper
labelLiftOffDistance.Text = Properties.Strings.MouseLiftOffDistance;
labelChargingState.Text = "(" + Properties.Strings.Charging + ")";
labelProfile.Text = Properties.Strings.Profile;
labelButtonDebounce.Text = Properties.Strings.MouseButtonResponse;
buttonLightingZoneLogo.Text = Properties.Strings.AuraZoneLogo;
buttonLightingZoneScroll.Text = Properties.Strings.AuraZoneScroll;
@@ -76,6 +77,8 @@ namespace GHelper
sliderAngleAdjustment.ValueChanged += SliderAngleAdjustment_ValueChanged;
sliderAngleAdjustment.MouseUp += SliderAngleAdjustment_MouseUp;
comboBoxLiftOffDistance.DropDownClosed += ComboBoxLiftOffDistance_DropDownClosed;
sliderButtonDebounce.ValueChanged += SliderButtonDebounce_ValueChanged;
sliderButtonDebounce.MouseUp += SliderButtonDebounce_MouseUp;
buttonLightingColor.Click += ButtonLightingColor_Click;
comboBoxLightingMode.DropDownClosed += ComboBoxLightingMode_DropDownClosed;
@@ -100,6 +103,20 @@ namespace GHelper
RefreshMouseData();
}
private void SliderButtonDebounce_MouseUp(object? sender, MouseEventArgs e)
{
DebounceTime dbt = (DebounceTime)sliderButtonDebounce.Value;
mouse.SetDebounce(dbt);
}
private void SliderButtonDebounce_ValueChanged(object? sender, EventArgs e)
{
DebounceTime dbt = (DebounceTime)sliderButtonDebounce.Value;
int time = mouse.DebounceTimeInMS(dbt);
labelButtonDebounceValue.Text = time + "ms";
}
private void SwitchLightingZone(LightingZone zone)
{
if (!mouse.HasRGB())
@@ -173,8 +190,13 @@ namespace GHelper
private void ComboProfile_DropDownClosed(object? sender, EventArgs e)
{
if (mouse.Profile == comboProfile.SelectedIndex)
{
return;
}
mouse.SetProfile(comboProfile.SelectedIndex);
Task task = Task.Run((Action)RefreshMouseData);
RefreshMouseData();
}
private void ComboBoxPollingRate_DropDownClosed(object? sender, EventArgs e)
@@ -386,13 +408,13 @@ namespace GHelper
private void Mouse_Disconnect(object? sender, EventArgs e)
{
if (Disposing || IsDisposed)
{
return;
}
//Mouse disconnected. Bye bye.
this.Invoke(delegate
{
if (Disposing || IsDisposed)
{
return;
}
this.Close();
});
@@ -406,18 +428,17 @@ namespace GHelper
if (!mouse.IsDeviceReady)
{
Logger.WriteLine(mouse.GetDisplayName() + " (GUI): Mouse is not ready. Closing view.");
this.Invoke(delegate
{
this.Close();
});
Mouse_Disconnect(this, EventArgs.Empty);
return;
}
this.Invoke(delegate
if (Disposing || IsDisposed)
{
VisualizeMouseSettings();
VisualizeBatteryState();
});
return;
}
VisualizeMouseSettings();
VisualizeBatteryState();
}
private void InitMouseCapabilities()
@@ -439,6 +460,11 @@ namespace GHelper
numericUpDownCurrentDPI.Maximum = mouse.MaxDPI();
numericUpDownCurrentDPI.Increment = mouse.DPIIncrements();
if (!mouse.HasDebounceSetting())
{
panelDebounce.Visible = false;
}
if (!mouse.HasDPIColors())
{
@@ -465,8 +491,7 @@ namespace GHelper
}
else
{
comboBoxPollingRate.Visible = false;
labelPollingRate.Visible = false;
panelPollingRate.Visible = false;
}
if (!mouse.HasAngleSnapping())
@@ -478,6 +503,14 @@ namespace GHelper
{
labelAngleAdjustmentValue.Visible = false;
sliderAngleAdjustment.Visible = false;
sliderAngleAdjustment.Max = mouse.AngleTuningMax();
sliderAngleAdjustment.Min = mouse.AngleTuningMin();
sliderAngleAdjustment.Step = mouse.AngleTuningStep();
}
if (!mouse.HasAngleTuning() && !mouse.HasAngleSnapping())
{
panelAngleSnapping.Visible = false;
}
if (mouse.HasLiftOffSetting())
@@ -489,8 +522,7 @@ namespace GHelper
}
else
{
comboBoxLiftOffDistance.Visible = false;
labelLiftOffDistance.Visible = false;
panelLiftOffDistance.Visible = false;
}
if (mouse.DPIProfileCount() < 4)
@@ -532,10 +564,20 @@ namespace GHelper
if (mouse.HasRGB())
{
buttonLightingZoneLogo.Visible = mouse.SupportedLightingZones().Contains(LightingZone.Logo);
buttonLightingZoneScroll.Visible = mouse.SupportedLightingZones().Contains(LightingZone.Scrollwheel);
buttonLightingZoneUnderglow.Visible = mouse.SupportedLightingZones().Contains(LightingZone.Underglow);
buttonLightingZoneDock.Visible = mouse.SupportedLightingZones().Contains(LightingZone.Dock);
if (mouse.SupportedLightingZones().Length > 1)
{
buttonLightingZoneLogo.Visible = mouse.SupportedLightingZones().Contains(LightingZone.Logo);
buttonLightingZoneScroll.Visible = mouse.SupportedLightingZones().Contains(LightingZone.Scrollwheel);
buttonLightingZoneUnderglow.Visible = mouse.SupportedLightingZones().Contains(LightingZone.Underglow);
buttonLightingZoneDock.Visible = mouse.SupportedLightingZones().Contains(LightingZone.Dock);
}
else
{
buttonLightingZoneLogo.Visible = false;
buttonLightingZoneScroll.Visible = false;
buttonLightingZoneUnderglow.Visible = false;
buttonLightingZoneDock.Visible = false;
}
sliderBrightness.Max = mouse.MaxBrightness();
@@ -634,6 +676,11 @@ namespace GHelper
{
comboBoxLiftOffDistance.SelectedIndex = (int)mouse.LiftOffDistance;
}
if (mouse.HasDebounceSetting())
{
sliderButtonDebounce.Value = (int)mouse.Debounce;
}
}
private void VisualizeBatteryState()
@@ -776,7 +823,7 @@ namespace GHelper
private void ButtonSync_Click(object sender, EventArgs e)
{
Task task = Task.Run((Action)RefreshMouseData);
RefreshMouseData();
}
}
}

View File

@@ -1,5 +1,6 @@
using GHelper.Helpers;
using HidLibrary;
using System.Diagnostics;
using System.Text;
namespace GHelper
@@ -45,9 +46,9 @@ namespace GHelper
public static readonly byte[] LED_INIT1 = new byte[] { AURA_HID_ID, 0xb9 };
public static readonly byte[] LED_INIT2 = Encoding.ASCII.GetBytes("]ASUS Tech.Inc.");
public static readonly byte[] LED_INIT3 = new byte[] { AURA_HID_ID, 0x05, 0x20, 0x31, 0, 0x08 };
public static readonly byte[] LED_INIT3 = new byte[] { AURA_HID_ID, 0x05, 0x20, 0x31, 0, 0x1a };
public static readonly byte[] LED_INIT4 = Encoding.ASCII.GetBytes("^ASUS Tech.Inc.");
public static readonly byte[] LED_INIT5 = new byte[] { 0x5e, 0x05, 0x20, 0x31, 0, 0x08 };
public static readonly byte[] LED_INIT5 = new byte[] { 0x5e, 0x05, 0x20, 0x31, 0, 0x1a };
static byte[] MESSAGE_APPLY = { AURA_HID_ID, 0xb4 };
static byte[] MESSAGE_SET = { AURA_HID_ID, 0xb5, 0, 0, 0 };
@@ -59,13 +60,15 @@ namespace GHelper
public static Color Color1 = Color.White;
public static Color Color2 = Color.Black;
static bool isTuf = AppConfig.ContainsModel("Tuf");
static bool isStrix = AppConfig.ContainsModel("Strix");
static bool isTuf = AppConfig.IsTUF();
static bool isStrix = AppConfig.IsStrix();
static System.Timers.Timer timer = new System.Timers.Timer(2000);
static HidDevice? auraDevice = null;
static bool Manual = false;
static byte[] AuraPowerMessage(AuraPower flags)
{
byte keyb = 0, bar = 0, lid = 0, rear = 0;
@@ -179,18 +182,18 @@ namespace GHelper
_modes.Remove(3);
}
if (AppConfig.ContainsModel("401") || AppConfig.ContainsModel("X13"))
if (AppConfig.NoAuraColor())
{
_modes.Remove(2);
_modes.Remove(3);
}
if (AppConfig.ContainsModel("G513QY"))
if (AppConfig.IsAdvantageEdition())
{
return _modes;
}
if (AppConfig.ContainsModel("Strix") || AppConfig.ContainsModel("Scar"))
if (AppConfig.IsStrix())
{
return _modesStrix;
}
@@ -211,10 +214,6 @@ namespace GHelper
}
}
public static bool HasColor()
{
return AppConfig.ContainsModel("GA401") || AppConfig.ContainsModel("X13");
}
public static bool HasSecondColor()
{
@@ -290,6 +289,7 @@ namespace GHelper
msg[6] = (byte)(color.B); // B
msg[7] = (byte)speed; // aura.speed as u8;
msg[8] = 0; // aura.direction as u8;
msg[9] = (mode == 1) ? (byte)1 : (byte)0;
msg[10] = (byte)(color2.R); // R
msg[11] = (byte)(color2.G); // G
msg[12] = (byte)(color2.B); // B
@@ -464,31 +464,62 @@ namespace GHelper
if (auraDevice is null || !auraDevice.IsConnected) GetAuraDevice();
if (auraDevice is null || !auraDevice.IsConnected) return;
byte[] msg = new byte[40];
int start = 9;
msg[0] = AURA_HID_ID;
msg[1] = 0xbc;
msg[2] = 1;
msg[3] = 1;
msg[4] = 4;
for (int i = 0; i < 10; i++)
if (isStrix)
{
msg[start + i * 3] = color.R; // R
msg[start + 1 + i * 3] = color.G; // G
msg[start + 2 + i * 3] = color.B; // B
byte[] msg = new byte[0x40];
byte start = 9;
byte maxLeds = 0x93;
msg[0] = AURA_HID_ID;
msg[1] = 0xbc;
msg[2] = 0;
msg[3] = 1;
msg[4] = 1;
msg[5] = 1;
msg[6] = 0;
msg[7] = 0x10;
for (byte i = 0; i < 0x12; i++)
{
msg[start + i * 3] = color.R; // R
msg[start + 1 + i * 3] = color.G; // G
msg[start + 2 + i * 3] = color.B; // B
}
if (init)
{
auraDevice.Write(LED_INIT1);
auraDevice.Write(LED_INIT2);
auraDevice.Write(LED_INIT3);
auraDevice.Write(LED_INIT4);
auraDevice.Write(LED_INIT5);
auraDevice.Write(new byte[] { AURA_HID_ID, 0xbc});
}
for (byte b = 0; b < maxLeds; b += 0x10)
{
msg[6] = b;
auraDevice.Write(msg);
}
msg[6] = maxLeds;
auraDevice.Write(msg);
msg[4] = 4;
msg[5] = 0;
msg[6] = 0;
msg[7] = 0;
auraDevice.Write(msg);
}
//Logger.WriteLine(BitConverter.ToString(msg));
if (init)
else
{
auraDevice.Write(AuraMessage(0, color, color, 0xe1));
auraDevice.WriteFeatureData(MESSAGE_APPLY);
auraDevice.WriteFeatureData(MESSAGE_SET);
auraDevice.Write(new byte[] { AURA_HID_ID, 0xbc });
auraDevice.Write(AuraMessage(0, color, color, 0));
auraDevice.Write(MESSAGE_SET);
}
auraDevice.Write(msg);
}
@@ -546,7 +577,7 @@ namespace GHelper
device.CloseDevice();
}
if (AppConfig.ContainsModel("TUF"))
if (isTuf)
Program.acpi.TUFKeyboardRGB(Mode, Color1, _speed);
});

269
app/Extra.Designer.cs generated
View File

@@ -41,8 +41,11 @@ namespace GHelper
labelBindings = new Label();
panelBindings = new Panel();
tableBindings = new TableLayoutPanel();
label1 = new Label();
textBox1 = new TextBox();
labelFNE = new Label();
comboFNE = new RComboBox();
textFNE = new TextBox();
labelFNC = new Label();
textM2 = new TextBox();
textM1 = new TextBox();
comboM1 = new RComboBox();
labelM1 = new Label();
@@ -60,8 +63,6 @@ namespace GHelper
comboFNC = new RComboBox();
textFNC = new TextBox();
tableKeys = new TableLayoutPanel();
labelFNC = new Label();
textM2 = new TextBox();
panelBacklightHeader = new Panel();
sliderBrightness = new Slider();
pictureBacklight = new PictureBox();
@@ -116,7 +117,6 @@ namespace GHelper
((System.ComponentModel.ISupportInitialize)pictureHelp).BeginInit();
panelBindings.SuspendLayout();
tableBindings.SuspendLayout();
tableKeys.SuspendLayout();
panelBacklightHeader.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureBacklight).BeginInit();
panelBacklight.SuspendLayout();
@@ -137,7 +137,7 @@ namespace GHelper
panelServices.Controls.Add(labelServices);
panelServices.Controls.Add(buttonServices);
panelServices.Dock = DockStyle.Top;
panelServices.Location = new Point(15, 1216);
panelServices.Location = new Point(15, 1267);
panelServices.Name = "panelServices";
panelServices.Size = new Size(983, 75);
panelServices.TabIndex = 3;
@@ -156,7 +156,7 @@ namespace GHelper
//
labelServices.AutoSize = true;
labelServices.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelServices.Location = new Point(57, 18);
labelServices.Location = new Point(57, 19);
labelServices.Name = "labelServices";
labelServices.Size = new Size(273, 32);
labelServices.TabIndex = 20;
@@ -189,15 +189,15 @@ namespace GHelper
panelBindingsHeader.Dock = DockStyle.Top;
panelBindingsHeader.Location = new Point(15, 15);
panelBindingsHeader.Name = "panelBindingsHeader";
panelBindingsHeader.Padding = new Padding(10, 5, 10, 5);
panelBindingsHeader.Size = new Size(983, 50);
panelBindingsHeader.Padding = new Padding(11, 5, 11, 5);
panelBindingsHeader.Size = new Size(983, 51);
panelBindingsHeader.TabIndex = 4;
//
// pictureBindings
//
pictureBindings.BackgroundImage = Resources.icons8_keyboard_32;
pictureBindings.BackgroundImageLayout = ImageLayout.Zoom;
pictureBindings.Location = new Point(20, 10);
pictureBindings.Location = new Point(20, 11);
pictureBindings.Name = "pictureBindings";
pictureBindings.Size = new Size(32, 32);
pictureBindings.TabIndex = 1;
@@ -209,7 +209,7 @@ namespace GHelper
pictureHelp.BackgroundImage = Resources.icons8_help_32;
pictureHelp.BackgroundImageLayout = ImageLayout.Zoom;
pictureHelp.Cursor = Cursors.Hand;
pictureHelp.Location = new Point(930, 10);
pictureHelp.Location = new Point(931, 11);
pictureHelp.Margin = new Padding(4, 3, 4, 3);
pictureHelp.Name = "pictureHelp";
pictureHelp.Size = new Size(32, 32);
@@ -232,10 +232,10 @@ namespace GHelper
panelBindings.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelBindings.Controls.Add(tableBindings);
panelBindings.Dock = DockStyle.Top;
panelBindings.Location = new Point(15, 65);
panelBindings.Location = new Point(15, 66);
panelBindings.Name = "panelBindings";
panelBindings.Padding = new Padding(0, 0, 10, 5);
panelBindings.Size = new Size(983, 305);
panelBindings.Padding = new Padding(0, 0, 11, 5);
panelBindings.Size = new Size(983, 351);
panelBindings.TabIndex = 5;
//
// tableBindings
@@ -243,11 +243,14 @@ namespace GHelper
tableBindings.AutoSize = true;
tableBindings.AutoSizeMode = AutoSizeMode.GrowAndShrink;
tableBindings.ColumnCount = 3;
tableBindings.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 15.45389F));
tableBindings.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40.94511F));
tableBindings.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 43.6010056F));
tableBindings.Controls.Add(label1, 0, 5);
tableBindings.Controls.Add(textBox1, 2, 1);
tableBindings.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
tableBindings.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F));
tableBindings.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F));
tableBindings.Controls.Add(labelFNE, 0, 6);
tableBindings.Controls.Add(comboFNE, 0, 6);
tableBindings.Controls.Add(textFNE, 0, 6);
tableBindings.Controls.Add(labelFNC, 0, 5);
tableBindings.Controls.Add(textM2, 2, 1);
tableBindings.Controls.Add(textM1, 2, 0);
tableBindings.Controls.Add(comboM1, 1, 0);
tableBindings.Controls.Add(labelM1, 0, 0);
@@ -269,45 +272,80 @@ namespace GHelper
tableBindings.Margin = new Padding(0, 3, 4, 3);
tableBindings.Name = "tableBindings";
tableBindings.Padding = new Padding(16, 12, 0, 12);
tableBindings.RowCount = 6;
tableBindings.RowCount = 7;
tableBindings.RowStyles.Add(new RowStyle());
tableBindings.RowStyles.Add(new RowStyle());
tableBindings.RowStyles.Add(new RowStyle());
tableBindings.RowStyles.Add(new RowStyle());
tableBindings.RowStyles.Add(new RowStyle());
tableBindings.RowStyles.Add(new RowStyle());
tableBindings.Size = new Size(973, 300);
tableBindings.RowStyles.Add(new RowStyle());
tableBindings.RowStyles.Add(new RowStyle(SizeType.Absolute, 20F));
tableBindings.Size = new Size(972, 346);
tableBindings.TabIndex = 12;
//
// label1
// labelFNE
//
label1.AutoSize = true;
label1.Location = new Point(16, 242);
label1.Margin = new Padding(0);
label1.Name = "label1";
label1.Padding = new Padding(5, 10, 0, 0);
label1.Size = new Size(85, 42);
label1.TabIndex = 15;
label1.Text = "FN+C:";
labelFNE.AutoSize = true;
labelFNE.Location = new Point(16, 288);
labelFNE.Margin = new Padding(0);
labelFNE.Name = "labelFNE";
labelFNE.Padding = new Padding(5, 11, 0, 0);
labelFNE.Size = new Size(143, 43);
labelFNE.TabIndex = 20;
labelFNE.Text = "FN+NmEnt:";
//
// textBox1
// comboFNE
//
textBox1.Dock = DockStyle.Top;
textBox1.Location = new Point(558, 61);
textBox1.Margin = new Padding(4, 3, 4, 3);
textBox1.Name = "textBox1";
textBox1.PlaceholderText = "action";
textBox1.Size = new Size(411, 39);
textBox1.TabIndex = 14;
comboFNE.BorderColor = Color.White;
comboFNE.ButtonColor = Color.FromArgb(255, 255, 255);
comboFNE.Dock = DockStyle.Top;
comboFNE.FormattingEnabled = true;
comboFNE.Location = new Point(211, 291);
comboFNE.Margin = new Padding(4, 3, 4, 3);
comboFNE.Name = "comboFNE";
comboFNE.Size = new Size(374, 40);
comboFNE.TabIndex = 19;
//
// textFNE
//
textFNE.Dock = DockStyle.Top;
textFNE.Location = new Point(593, 291);
textFNE.Margin = new Padding(4, 3, 4, 3);
textFNE.Name = "textFNE";
textFNE.PlaceholderText = "action";
textFNE.Size = new Size(375, 39);
textFNE.TabIndex = 18;
//
// labelFNC
//
labelFNC.AutoSize = true;
labelFNC.Location = new Point(16, 242);
labelFNC.Margin = new Padding(0);
labelFNC.Name = "labelFNC";
labelFNC.Padding = new Padding(5, 11, 0, 0);
labelFNC.Size = new Size(85, 43);
labelFNC.TabIndex = 15;
labelFNC.Text = "FN+C:";
//
// textM2
//
textM2.Dock = DockStyle.Top;
textM2.Location = new Point(594, 61);
textM2.Margin = new Padding(5, 3, 5, 3);
textM2.Name = "textM2";
textM2.PlaceholderText = "action";
textM2.Size = new Size(373, 39);
textM2.TabIndex = 14;
//
// textM1
//
textM1.Dock = DockStyle.Top;
textM1.Location = new Point(558, 15);
textM1.Location = new Point(593, 15);
textM1.Margin = new Padding(4, 3, 4, 3);
textM1.Name = "textM1";
textM1.PlaceholderText = "action";
textM1.Size = new Size(411, 39);
textM1.Size = new Size(375, 39);
textM1.TabIndex = 13;
//
// comboM1
@@ -317,10 +355,10 @@ namespace GHelper
comboM1.Dock = DockStyle.Top;
comboM1.FormattingEnabled = true;
comboM1.Items.AddRange(new object[] { Strings.Default, Strings.VolumeMute, Strings.PlayPause, Strings.PrintScreen, Strings.ToggleAura, Strings.Custom });
comboM1.Location = new Point(167, 15);
comboM1.Location = new Point(211, 15);
comboM1.Margin = new Padding(4, 3, 4, 3);
comboM1.Name = "comboM1";
comboM1.Size = new Size(383, 40);
comboM1.Size = new Size(374, 40);
comboM1.TabIndex = 11;
//
// labelM1
@@ -329,8 +367,8 @@ namespace GHelper
labelM1.Location = new Point(16, 12);
labelM1.Margin = new Padding(0);
labelM1.Name = "labelM1";
labelM1.Padding = new Padding(5, 10, 0, 0);
labelM1.Size = new Size(59, 42);
labelM1.Padding = new Padding(5, 11, 0, 0);
labelM1.Size = new Size(59, 43);
labelM1.TabIndex = 9;
labelM1.Text = "M1:";
//
@@ -341,10 +379,10 @@ namespace GHelper
comboM4.Dock = DockStyle.Top;
comboM4.FormattingEnabled = true;
comboM4.Items.AddRange(new object[] { Strings.PerformanceMode, Strings.OpenGHelper, Strings.Custom });
comboM4.Location = new Point(167, 153);
comboM4.Location = new Point(211, 153);
comboM4.Margin = new Padding(4, 3, 4, 3);
comboM4.Name = "comboM4";
comboM4.Size = new Size(383, 40);
comboM4.Size = new Size(374, 40);
comboM4.TabIndex = 3;
//
// comboM3
@@ -354,30 +392,30 @@ namespace GHelper
comboM3.Dock = DockStyle.Top;
comboM3.FormattingEnabled = true;
comboM3.Items.AddRange(new object[] { Strings.Default, Strings.VolumeMute, Strings.PlayPause, Strings.PrintScreen, Strings.ToggleAura, Strings.Custom });
comboM3.Location = new Point(167, 107);
comboM3.Location = new Point(211, 107);
comboM3.Margin = new Padding(4, 3, 4, 3);
comboM3.Name = "comboM3";
comboM3.Size = new Size(383, 40);
comboM3.Size = new Size(374, 40);
comboM3.TabIndex = 1;
//
// textM4
//
textM4.Dock = DockStyle.Top;
textM4.Location = new Point(558, 153);
textM4.Location = new Point(593, 153);
textM4.Margin = new Padding(4, 3, 4, 3);
textM4.Name = "textM4";
textM4.PlaceholderText = "action";
textM4.Size = new Size(411, 39);
textM4.Size = new Size(375, 39);
textM4.TabIndex = 5;
//
// textM3
//
textM3.Dock = DockStyle.Top;
textM3.Location = new Point(558, 107);
textM3.Location = new Point(593, 107);
textM3.Margin = new Padding(4, 3, 4, 3);
textM3.Name = "textM3";
textM3.PlaceholderText = "action";
textM3.Size = new Size(411, 39);
textM3.Size = new Size(375, 39);
textM3.TabIndex = 4;
//
// labelM4
@@ -386,8 +424,8 @@ namespace GHelper
labelM4.Location = new Point(16, 150);
labelM4.Margin = new Padding(0);
labelM4.Name = "labelM4";
labelM4.Padding = new Padding(5, 10, 0, 0);
labelM4.Size = new Size(116, 42);
labelM4.Padding = new Padding(5, 11, 0, 0);
labelM4.Size = new Size(116, 43);
labelM4.TabIndex = 2;
labelM4.Text = "M4/ROG:";
//
@@ -397,8 +435,8 @@ namespace GHelper
labelM3.Location = new Point(16, 104);
labelM3.Margin = new Padding(0);
labelM3.Name = "labelM3";
labelM3.Padding = new Padding(5, 10, 0, 0);
labelM3.Size = new Size(59, 42);
labelM3.Padding = new Padding(5, 11, 0, 0);
labelM3.Size = new Size(59, 43);
labelM3.TabIndex = 0;
labelM3.Text = "M3:";
//
@@ -408,8 +446,8 @@ namespace GHelper
labelM2.Location = new Point(16, 58);
labelM2.Margin = new Padding(0);
labelM2.Name = "labelM2";
labelM2.Padding = new Padding(5, 10, 0, 0);
labelM2.Size = new Size(59, 42);
labelM2.Padding = new Padding(5, 11, 0, 0);
labelM2.Size = new Size(59, 43);
labelM2.TabIndex = 10;
labelM2.Text = "M2:";
//
@@ -420,10 +458,10 @@ namespace GHelper
comboM2.Dock = DockStyle.Top;
comboM2.FormattingEnabled = true;
comboM2.Items.AddRange(new object[] { Strings.Default, Strings.VolumeMute, Strings.PlayPause, Strings.PrintScreen, Strings.ToggleAura, Strings.Custom });
comboM2.Location = new Point(167, 61);
comboM2.Location = new Point(211, 61);
comboM2.Margin = new Padding(4, 3, 4, 3);
comboM2.Name = "comboM2";
comboM2.Size = new Size(383, 40);
comboM2.Size = new Size(374, 40);
comboM2.TabIndex = 12;
//
// labelFNF4
@@ -432,8 +470,8 @@ namespace GHelper
labelFNF4.Location = new Point(16, 196);
labelFNF4.Margin = new Padding(0);
labelFNF4.Name = "labelFNF4";
labelFNF4.Padding = new Padding(5, 10, 0, 0);
labelFNF4.Size = new Size(95, 42);
labelFNF4.Padding = new Padding(5, 11, 0, 0);
labelFNF4.Size = new Size(95, 43);
labelFNF4.TabIndex = 6;
labelFNF4.Text = "FN+F4:";
//
@@ -443,20 +481,20 @@ namespace GHelper
comboFNF4.ButtonColor = Color.FromArgb(255, 255, 255);
comboFNF4.Dock = DockStyle.Top;
comboFNF4.FormattingEnabled = true;
comboFNF4.Location = new Point(167, 199);
comboFNF4.Location = new Point(211, 199);
comboFNF4.Margin = new Padding(4, 3, 4, 3);
comboFNF4.Name = "comboFNF4";
comboFNF4.Size = new Size(383, 40);
comboFNF4.Size = new Size(374, 40);
comboFNF4.TabIndex = 7;
//
// textFNF4
//
textFNF4.Dock = DockStyle.Top;
textFNF4.Location = new Point(558, 199);
textFNF4.Location = new Point(593, 199);
textFNF4.Margin = new Padding(4, 3, 4, 3);
textFNF4.Name = "textFNF4";
textFNF4.PlaceholderText = "action";
textFNF4.Size = new Size(411, 39);
textFNF4.Size = new Size(375, 39);
textFNF4.TabIndex = 8;
//
// comboFNC
@@ -465,20 +503,20 @@ namespace GHelper
comboFNC.ButtonColor = Color.FromArgb(255, 255, 255);
comboFNC.Dock = DockStyle.Top;
comboFNC.FormattingEnabled = true;
comboFNC.Location = new Point(167, 245);
comboFNC.Location = new Point(211, 245);
comboFNC.Margin = new Padding(4, 3, 4, 3);
comboFNC.Name = "comboFNC";
comboFNC.Size = new Size(383, 40);
comboFNC.Size = new Size(374, 40);
comboFNC.TabIndex = 16;
//
// textFNC
//
textFNC.Dock = DockStyle.Top;
textFNC.Location = new Point(558, 245);
textFNC.Location = new Point(593, 245);
textFNC.Margin = new Padding(4, 3, 4, 3);
textFNC.Name = "textFNC";
textFNC.PlaceholderText = "action";
textFNC.Size = new Size(411, 39);
textFNC.Size = new Size(375, 39);
textFNC.TabIndex = 17;
//
// tableKeys
@@ -487,7 +525,6 @@ namespace GHelper
tableKeys.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
tableKeys.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F));
tableKeys.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F));
tableKeys.Controls.Add(labelFNC, 0, 5);
tableKeys.Location = new Point(0, 0);
tableKeys.Name = "tableKeys";
tableKeys.RowCount = 6;
@@ -500,26 +537,6 @@ namespace GHelper
tableKeys.Size = new Size(200, 100);
tableKeys.TabIndex = 0;
//
// labelFNC
//
labelFNC.AutoSize = true;
labelFNC.Location = new Point(4, 100);
labelFNC.Margin = new Padding(4, 0, 4, 0);
labelFNC.Name = "labelFNC";
labelFNC.Size = new Size(32, 20);
labelFNC.TabIndex = 15;
labelFNC.Text = "FN+C:";
//
// textM2
//
textM2.Dock = DockStyle.Top;
textM2.Location = new Point(124, 2);
textM2.Margin = new Padding(4, 2, 4, 2);
textM2.Name = "textM2";
textM2.PlaceholderText = "action";
textM2.Size = new Size(72, 39);
textM2.TabIndex = 14;
//
// panelBacklightHeader
//
panelBacklightHeader.AutoSize = true;
@@ -528,20 +545,21 @@ namespace GHelper
panelBacklightHeader.Controls.Add(pictureBacklight);
panelBacklightHeader.Controls.Add(labelBacklightTitle);
panelBacklightHeader.Dock = DockStyle.Top;
panelBacklightHeader.Location = new Point(15, 370);
panelBacklightHeader.Location = new Point(15, 417);
panelBacklightHeader.Name = "panelBacklightHeader";
panelBacklightHeader.Padding = new Padding(10, 5, 10, 5);
panelBacklightHeader.Size = new Size(983, 50);
panelBacklightHeader.Padding = new Padding(11, 5, 11, 5);
panelBacklightHeader.Size = new Size(983, 51);
panelBacklightHeader.TabIndex = 44;
//
// sliderBrightness
//
sliderBrightness.Anchor = AnchorStyles.Top | AnchorStyles.Right;
sliderBrightness.Location = new Point(546, 6);
sliderBrightness.Location = new Point(467, 5);
sliderBrightness.Margin = new Padding(0);
sliderBrightness.Max = 3;
sliderBrightness.Min = 0;
sliderBrightness.Name = "sliderBrightness";
sliderBrightness.Size = new Size(419, 36);
sliderBrightness.Size = new Size(500, 40);
sliderBrightness.Step = 1;
sliderBrightness.TabIndex = 50;
sliderBrightness.Text = "sliderBrightness";
@@ -551,7 +569,7 @@ namespace GHelper
//
pictureBacklight.BackgroundImage = Resources.backlight;
pictureBacklight.BackgroundImageLayout = ImageLayout.Zoom;
pictureBacklight.Location = new Point(20, 10);
pictureBacklight.Location = new Point(20, 11);
pictureBacklight.Name = "pictureBacklight";
pictureBacklight.Size = new Size(32, 32);
pictureBacklight.TabIndex = 3;
@@ -574,7 +592,7 @@ namespace GHelper
panelBacklight.Controls.Add(panelXMG);
panelBacklight.Controls.Add(tableBacklight);
panelBacklight.Dock = DockStyle.Top;
panelBacklight.Location = new Point(15, 420);
panelBacklight.Location = new Point(15, 468);
panelBacklight.Name = "panelBacklight";
panelBacklight.Padding = new Padding(0, 5, 0, 5);
panelBacklight.Size = new Size(983, 402);
@@ -622,7 +640,7 @@ namespace GHelper
labelBacklightTimeout.Location = new Point(16, 63);
labelBacklightTimeout.Margin = new Padding(4, 0, 4, 0);
labelBacklightTimeout.Name = "labelBacklightTimeout";
labelBacklightTimeout.Size = new Size(646, 47);
labelBacklightTimeout.Size = new Size(612, 47);
labelBacklightTimeout.TabIndex = 46;
labelBacklightTimeout.Text = "Timeout when plugged / on battery";
//
@@ -631,7 +649,7 @@ namespace GHelper
labelSpeed.Location = new Point(16, 16);
labelSpeed.Margin = new Padding(4, 0, 4, 0);
labelSpeed.Name = "labelSpeed";
labelSpeed.Size = new Size(646, 43);
labelSpeed.Size = new Size(612, 43);
labelSpeed.TabIndex = 44;
labelSpeed.Text = "Animation Speed";
//
@@ -665,7 +683,7 @@ namespace GHelper
// checkXMG
//
checkXMG.AutoSize = true;
checkXMG.Location = new Point(4, 10);
checkXMG.Location = new Point(4, 11);
checkXMG.Margin = new Padding(4, 3, 4, 3);
checkXMG.Name = "checkXMG";
checkXMG.Padding = new Padding(16, 3, 7, 3);
@@ -963,10 +981,10 @@ namespace GHelper
panelSettingsHeader.Controls.Add(pictureSettings);
panelSettingsHeader.Controls.Add(labelSettings);
panelSettingsHeader.Dock = DockStyle.Top;
panelSettingsHeader.Location = new Point(15, 822);
panelSettingsHeader.Location = new Point(15, 870);
panelSettingsHeader.Name = "panelSettingsHeader";
panelSettingsHeader.Padding = new Padding(10, 5, 10, 5);
panelSettingsHeader.Size = new Size(983, 50);
panelSettingsHeader.Padding = new Padding(11, 5, 11, 5);
panelSettingsHeader.Size = new Size(983, 51);
panelSettingsHeader.TabIndex = 45;
//
// pictureLog
@@ -975,7 +993,7 @@ namespace GHelper
pictureLog.BackgroundImage = Resources.icons8_log_32;
pictureLog.BackgroundImageLayout = ImageLayout.Zoom;
pictureLog.Cursor = Cursors.Hand;
pictureLog.Location = new Point(930, 10);
pictureLog.Location = new Point(931, 11);
pictureLog.Margin = new Padding(4, 3, 4, 3);
pictureLog.Name = "pictureLog";
pictureLog.Size = new Size(32, 32);
@@ -986,7 +1004,7 @@ namespace GHelper
//
pictureSettings.BackgroundImage = Resources.icons8_settings_32;
pictureSettings.BackgroundImageLayout = ImageLayout.Zoom;
pictureSettings.Location = new Point(20, 10);
pictureSettings.Location = new Point(20, 11);
pictureSettings.Name = "pictureSettings";
pictureSettings.Size = new Size(32, 32);
pictureSettings.TabIndex = 1;
@@ -1015,10 +1033,10 @@ namespace GHelper
panelSettings.Controls.Add(checkGpuApps);
panelSettings.Controls.Add(checkFnLock);
panelSettings.Dock = DockStyle.Top;
panelSettings.Location = new Point(15, 872);
panelSettings.Location = new Point(15, 921);
panelSettings.Name = "panelSettings";
panelSettings.Padding = new Padding(20, 5, 10, 5);
panelSettings.Size = new Size(983, 344);
panelSettings.Padding = new Padding(20, 5, 11, 5);
panelSettings.Size = new Size(983, 346);
panelSettings.TabIndex = 46;
//
// checkAutoToggleClamshellMode
@@ -1026,10 +1044,9 @@ namespace GHelper
checkAutoToggleClamshellMode.AutoSize = true;
checkAutoToggleClamshellMode.Dock = DockStyle.Top;
checkAutoToggleClamshellMode.Location = new Point(20, 299);
checkAutoToggleClamshellMode.Margin = new Padding(2);
checkAutoToggleClamshellMode.Name = "checkAutoToggleClamshellMode";
checkAutoToggleClamshellMode.Padding = new Padding(2);
checkAutoToggleClamshellMode.Size = new Size(953, 40);
checkAutoToggleClamshellMode.Padding = new Padding(3);
checkAutoToggleClamshellMode.Size = new Size(952, 42);
checkAutoToggleClamshellMode.TabIndex = 58;
checkAutoToggleClamshellMode.Text = "Auto Toggle Clamshell Mode";
checkAutoToggleClamshellMode.UseVisualStyleBackColor = true;
@@ -1042,7 +1059,7 @@ namespace GHelper
checkAutoApplyWindowsPowerMode.Margin = new Padding(4, 3, 4, 3);
checkAutoApplyWindowsPowerMode.Name = "checkAutoApplyWindowsPowerMode";
checkAutoApplyWindowsPowerMode.Padding = new Padding(3);
checkAutoApplyWindowsPowerMode.Size = new Size(953, 42);
checkAutoApplyWindowsPowerMode.Size = new Size(952, 42);
checkAutoApplyWindowsPowerMode.TabIndex = 54;
checkAutoApplyWindowsPowerMode.Text = "Auto Adjust Windows Power Mode";
checkAutoApplyWindowsPowerMode.UseVisualStyleBackColor = true;
@@ -1055,7 +1072,7 @@ namespace GHelper
checkTopmost.Margin = new Padding(4, 3, 4, 3);
checkTopmost.Name = "checkTopmost";
checkTopmost.Padding = new Padding(3);
checkTopmost.Size = new Size(953, 42);
checkTopmost.Size = new Size(952, 42);
checkTopmost.TabIndex = 51;
checkTopmost.Text = Strings.WindowTop;
checkTopmost.UseVisualStyleBackColor = true;
@@ -1068,7 +1085,7 @@ namespace GHelper
checkNoOverdrive.Margin = new Padding(4, 3, 4, 3);
checkNoOverdrive.Name = "checkNoOverdrive";
checkNoOverdrive.Padding = new Padding(3);
checkNoOverdrive.Size = new Size(953, 42);
checkNoOverdrive.Size = new Size(952, 42);
checkNoOverdrive.TabIndex = 52;
checkNoOverdrive.Text = Strings.DisableOverdrive;
checkNoOverdrive.UseVisualStyleBackColor = true;
@@ -1081,7 +1098,7 @@ namespace GHelper
checkUSBC.Margin = new Padding(4, 3, 4, 3);
checkUSBC.Name = "checkUSBC";
checkUSBC.Padding = new Padding(3);
checkUSBC.Size = new Size(953, 42);
checkUSBC.Size = new Size(952, 42);
checkUSBC.TabIndex = 53;
checkUSBC.Text = "Keep GPU disabled on USB-C charger in Optimized mode";
checkUSBC.UseVisualStyleBackColor = true;
@@ -1094,7 +1111,7 @@ namespace GHelper
checkVariBright.Margin = new Padding(4, 3, 4, 3);
checkVariBright.Name = "checkVariBright";
checkVariBright.Padding = new Padding(3);
checkVariBright.Size = new Size(953, 42);
checkVariBright.Size = new Size(952, 42);
checkVariBright.TabIndex = 57;
checkVariBright.Text = "AMD Display VariBright";
checkVariBright.UseVisualStyleBackColor = true;
@@ -1107,7 +1124,7 @@ namespace GHelper
checkGpuApps.Margin = new Padding(4, 3, 4, 3);
checkGpuApps.Name = "checkGpuApps";
checkGpuApps.Padding = new Padding(3);
checkGpuApps.Size = new Size(953, 42);
checkGpuApps.Size = new Size(952, 42);
checkGpuApps.TabIndex = 55;
checkGpuApps.Text = "Stop all apps using GPU when switching to Eco";
checkGpuApps.UseVisualStyleBackColor = true;
@@ -1133,7 +1150,7 @@ namespace GHelper
AutoScroll = true;
AutoSize = true;
AutoSizeMode = AutoSizeMode.GrowAndShrink;
ClientSize = new Size(1013, 1355);
ClientSize = new Size(1013, 1431);
Controls.Add(panelServices);
Controls.Add(panelSettings);
Controls.Add(panelSettingsHeader);
@@ -1146,7 +1163,7 @@ namespace GHelper
MaximizeBox = false;
MdiChildrenMinimizedAnchorBottom = false;
MinimizeBox = false;
MinimumSize = new Size(1034, 71);
MinimumSize = new Size(1033, 71);
Name = "Extra";
Padding = new Padding(15);
ShowIcon = false;
@@ -1163,8 +1180,6 @@ namespace GHelper
panelBindings.PerformLayout();
tableBindings.ResumeLayout(false);
tableBindings.PerformLayout();
tableKeys.ResumeLayout(false);
tableKeys.PerformLayout();
panelBacklightHeader.ResumeLayout(false);
panelBacklightHeader.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureBacklight).EndInit();
@@ -1193,8 +1208,8 @@ namespace GHelper
private Panel panelBindingsHeader;
private Panel panelBindings;
private TableLayoutPanel tableBindings;
private Label label1;
private TextBox textBox1;
private Label labelFNC;
private TextBox textM2;
private TextBox textM1;
private RComboBox comboM1;
private Label labelM1;
@@ -1213,8 +1228,6 @@ namespace GHelper
private TextBox textFNC;
private PictureBox pictureHelp;
private TableLayoutPanel tableKeys;
private Label labelFNC;
private TextBox textM2;
private PictureBox pictureBindings;
private Label labelBindings;
private Panel panelBacklightHeader;
@@ -1265,5 +1278,9 @@ namespace GHelper
private Slider sliderBrightness;
private PictureBox pictureLog;
private CheckBox checkAutoToggleClamshellMode;
private Label labelFNE;
private RComboBox comboFNE;
private TextBox textFNE;
private Slider slider1;
}
}

View File

@@ -13,9 +13,11 @@ namespace GHelper
ScreenControl screenControl = new ScreenControl();
ClamshellModeControl clamshellControl = new ClamshellModeControl();
const string EMPTY = "--------------";
Dictionary<string, string> customActions = new Dictionary<string, string>
{
{"","--------------" },
{"", EMPTY},
{"mute", Properties.Strings.VolumeMute},
{"screenshot", Properties.Strings.PrintScreen},
{"play", Properties.Strings.PlayPause},
@@ -54,6 +56,16 @@ namespace GHelper
customActions[""] = Properties.Strings.ToggleFnLock;
customActions.Remove("fnlock");
break;
case "fne":
customActions[""] = "Calculator";
customActions["ghelper"] = Properties.Strings.OpenGHelper;
break;
case "paddle":
customActions[""] = EMPTY;
break;
case "cc":
customActions[""] = EMPTY;
break;
}
combo.DropDownStyle = ComboBoxStyle.DropDownList;
@@ -118,38 +130,76 @@ namespace GHelper
Text = Properties.Strings.ExtraSettings;
if (AppConfig.ContainsModel("Duo"))
if (AppConfig.IsDUO())
{
customActions.Add("screenpad_down", Properties.Strings.ScreenPadDown);
customActions.Add("screenpad_up", Properties.Strings.ScreenPadUp);
}
if (InputDispatcher.NoMKeys())
if (AppConfig.NoMKeys())
{
labelM1.Text = "FN+F2";
labelM2.Text = "FN+F3";
labelM3.Text = "FN+F4";
labelM4.Text = "FN+NmEnter";
//labelM4.Visible = comboM4.Visible = textM4.Visible = false;
labelM4.Visible = comboM4.Visible = textM4.Visible = false;
labelFNF4.Visible = comboFNF4.Visible = textFNF4.Visible = false;
}
if (AppConfig.NoAura())
{
labelFNF4.Visible = comboFNF4.Visible = textFNF4.Visible = false;
}
if (!AppConfig.IsTUF())
{
labelFNE.Visible = comboFNE.Visible = textFNE.Visible = false;
}
if (Program.acpi.DeviceGet(AsusACPI.GPUEco) < 0)
{
checkGpuApps.Visible = false;
checkUSBC.Visible = false;
}
// Change text and hide irrelevant options on the ROG Ally,
// which is a bit of a special case piece of hardware.
if (AppConfig.IsAlly())
{
labelM1.Visible = comboM1.Visible = textM1.Visible = false;
labelM2.Visible = comboM2.Visible = textM2.Visible = false;
// Re-label M3 and M4 and FNF4 to match the front labels.
labelM3.Text = "Ctrl Center";
labelM4.Text = "ROG";
labelFNF4.Text = "Back Paddles";
// Hide all of the FN options, as the Ally has no special keyboard FN key.
labelFNC.Visible = false;
comboFNC.Visible = false;
textFNC.Visible = false;
SetKeyCombo(comboM3, textM3, "cc");
SetKeyCombo(comboM4, textM4, "m4");
SetKeyCombo(comboFNF4, textFNF4, "paddle");
}
else
{
SetKeyCombo(comboM1, textM1, "m1");
SetKeyCombo(comboM2, textM2, "m2");
SetKeyCombo(comboM3, textM3, "m3");
SetKeyCombo(comboM4, textM4, "m4");
SetKeyCombo(comboFNF4, textFNF4, "fnf4");
SetKeyCombo(comboFNC, textFNC, "fnc");
SetKeyCombo(comboFNE, textFNE, "fne");
}
InitTheme();
SetKeyCombo(comboM1, textM1, "m1");
SetKeyCombo(comboM2, textM2, "m2");
SetKeyCombo(comboM3, textM3, "m3");
SetKeyCombo(comboM4, textM4, "m4");
SetKeyCombo(comboFNF4, textFNF4, "fnf4");
SetKeyCombo(comboFNC, textFNC, "fnc");
Shown += Keyboard_Shown;
comboKeyboardSpeed.DropDownStyle = ComboBoxStyle.DropDownList;
@@ -203,7 +253,7 @@ namespace GHelper
checkSleepLogo.CheckedChanged += CheckPower_CheckedChanged;
checkShutdownLogo.CheckedChanged += CheckPower_CheckedChanged;
if (!AppConfig.ContainsModel("Strix"))
if (!AppConfig.IsStrix())
{
labelBacklightBar.Visible = false;
checkAwakeBar.Visible = false;
@@ -211,7 +261,7 @@ namespace GHelper
checkSleepBar.Visible = false;
checkShutdownBar.Visible = false;
if (!AppConfig.ContainsModel("Z13"))
if (!AppConfig.IsZ13())
{
labelBacklightLid.Visible = false;
checkAwakeLid.Visible = false;

View File

@@ -18,7 +18,7 @@
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>

View File

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

View File

@@ -49,11 +49,16 @@ namespace GHelper.Gpu
}
public void SetGPUMode(int GPUMode)
bool NoAutoUltimate()
{
return AppConfig.ContainsModel("G614") || AppConfig.ContainsModel("M16");
}
public void SetGPUMode(int GPUMode, int auto = 0)
{
int CurrentGPU = AppConfig.Get("gpu_mode");
AppConfig.Set("gpu_auto", 0);
AppConfig.Set("gpu_auto", auto);
if (CurrentGPU == GPUMode)
{
@@ -79,6 +84,11 @@ namespace GHelper.Gpu
DialogResult dialogResult = MessageBox.Show(Properties.Strings.AlertUltimateOn, Properties.Strings.AlertUltimateTitle, MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
if (NoAutoUltimate())
{
Program.acpi.SetGPUEco(0);
Thread.Sleep(100);
}
Program.acpi.DeviceSet(AsusACPI.GPUMux, 0, "GPUMux");
restart = true;
changed = true;
@@ -166,10 +176,14 @@ namespace GHelper.Gpu
public static bool IsPlugged()
{
bool optimizedUSBC = AppConfig.Get("optimized_usbc") != 1;
if (SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online) return false;
if (!AppConfig.Is("optimized_usbc")) return true;
return SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online &&
(optimizedUSBC || Program.acpi.DeviceGet(AsusACPI.ChargerMode) < AsusACPI.ChargerUSB);
int chargerMode = Program.acpi.DeviceGet(AsusACPI.ChargerMode);
Logger.WriteLine("ChargerStatus: " + chargerMode);
if (chargerMode < 0) return true;
return (chargerMode & AsusACPI.ChargerBarrel) > 0;
}
@@ -188,14 +202,12 @@ namespace GHelper.Gpu
if (mux == 0)
{
if (optimized) SetGPUMode(AsusACPI.GPUModeStandard);
if (optimized) SetGPUMode(AsusACPI.GPUModeStandard, 1);
return false;
}
else
{
if (ReEnableGPU()) return true;
if (eco == 1)
if ((GpuAuto && IsPlugged()) || (ForceGPU && GpuMode == AsusACPI.GPUModeStandard))
{
@@ -256,21 +268,6 @@ namespace GHelper.Gpu
}
public bool ReEnableGPU()
{
if (AppConfig.Get("gpu_reenable") != 1) return false;
if (Screen.AllScreens.Length <= 1) return false;
Logger.WriteLine("Re-enabling gpu for 503 model");
Thread.Sleep(1000);
SetGPUEco(1);
Thread.Sleep(1000);
SetGPUEco(0);
return true;
}
public void InitXGM()
{
bool connected = Program.acpi.IsXGConnected();

View File

@@ -18,8 +18,13 @@ public static class HardwareControl
public static float? cpuTemp = -1;
public static decimal? batteryRate = 0;
public static decimal batteryHealth = -1;
public static decimal batteryCapacity = -1;
public static decimal? designCapacity;
public static decimal? fullCapacity;
public static decimal? chargeCapacity;
public static int? gpuTemp = null;
public static string? cpuFan;
@@ -106,9 +111,12 @@ public static class HardwareControl
}
public static decimal GetBatteryRate()
public static void GetBatteryStatus()
{
batteryRate = 0;
chargeCapacity = 0;
try
{
ManagementScope scope = new ManagementScope("root\\WMI");
@@ -117,26 +125,29 @@ public static class HardwareControl
using ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);
foreach (ManagementObject obj in searcher.Get().Cast<ManagementObject>())
{
chargeCapacity = Convert.ToDecimal(obj["RemainingCapacity"]);
decimal chargeRate = Convert.ToDecimal(obj["ChargeRate"]);
decimal dischargeRate = Convert.ToDecimal(obj["DischargeRate"]);
if (chargeRate > 0)
return chargeRate;
batteryRate = chargeRate / 1000;
else
return -dischargeRate;
}
batteryRate = -dischargeRate / 1000;
return 0;
}
}
catch (Exception ex)
{
Logger.WriteLine("Discharge Reading: " + ex.Message);
return 0;
}
}
public static void ReadFullChargeCapacity()
{
if (fullCapacity > 0) return;
try
{
@@ -159,6 +170,8 @@ public static class HardwareControl
public static void ReadDesignCapacity()
{
if (designCapacity > 0) return;
try
{
ManagementScope scope = new ManagementScope("root\\WMI");
@@ -209,7 +222,19 @@ public static class HardwareControl
lastUpdate = last;
cpuTemp = Program.acpi.DeviceGet(AsusACPI.Temp_CPU);
//Debug.WriteLine(cpuTemp);
if (cpuTemp < 0) try
{
using (var ct = new PerformanceCounter("Thermal Zone Information", "Temperature", @"\_TZ.THRM", true))
{
cpuTemp = ct.NextValue() - 273;
}
}
catch (Exception ex)
{
Debug.WriteLine("Failed reading CPU temp :" + ex.Message);
}
return cpuTemp;
}
@@ -241,7 +266,15 @@ public static class HardwareControl
if (gpuTemp is null || gpuTemp < 0)
gpuTemp = Program.acpi.DeviceGet(AsusACPI.Temp_GPU);
batteryRate = GetBatteryRate() / 1000;
ReadFullChargeCapacity();
GetBatteryStatus();
if (fullCapacity > 0 && chargeCapacity > 0)
{
batteryCapacity = Math.Min(100, ((decimal)chargeCapacity / (decimal)fullCapacity) * 100);
}
}
public static bool IsUsedGPU(int threshold = 10)

View File

@@ -19,6 +19,8 @@ namespace GHelper.Input
static ModeControl modeControl = Program.modeControl;
static ScreenControl screenControl = new ScreenControl();
static bool isTUF = AppConfig.IsTUF();
KeyboardListener listener;
KeyboardHook hook = new KeyboardHook();
@@ -104,14 +106,19 @@ namespace GHelper.Input
if (keyProfile != Keys.None) hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control, keyProfile);
if (keyApp != Keys.None) hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control, keyApp);
hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeDown);
hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeUp);
hook.RegisterHotKey(ModifierKeys.Shift, Keys.VolumeDown);
hook.RegisterHotKey(ModifierKeys.Shift, Keys.VolumeUp);
if (!AppConfig.Is("skip_hotkeys"))
{
hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeDown);
hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeUp);
hook.RegisterHotKey(ModifierKeys.Shift, Keys.VolumeDown);
hook.RegisterHotKey(ModifierKeys.Shift, Keys.VolumeUp);
}
if (!AppConfig.ContainsModel("Z13"))
if (!AppConfig.IsZ13() && !AppConfig.IsAlly())
{
if (actionM1 is not null && actionM1.Length > 0) hook.RegisterHotKey(ModifierKeys.None, Keys.VolumeDown);
if (actionM2 is not null && actionM2.Length > 0) hook.RegisterHotKey(ModifierKeys.None, Keys.VolumeUp);
if (actionM2 is not null && actionM2.Length > 0) hook.RegisterHotKey(ModifierKeys.None, Keys.VolumeUp);
}
// FN-Lock group
@@ -142,18 +149,23 @@ namespace GHelper.Input
}
static bool IsManualBrightness()
{
return AppConfig.ContainsModel("TUF") && !AppConfig.ContainsModel("FA506");
}
public static bool NoMKeys()
static void SetBrightness(int delta)
{
return AppConfig.ContainsModel("Z13") ||
AppConfig.ContainsModel("FA506") ||
AppConfig.ContainsModel("FX506") ||
AppConfig.ContainsModel("Duo") ||
AppConfig.ContainsModel("FX505");
int brightness = -1;
if (isTUF) brightness = ScreenBrightness.Get();
if (delta > 0 || AppConfig.SwappedBrightness()) HandleOptimizationEvent(32);
else HandleOptimizationEvent(16);
if (isTUF)
{
Thread.Sleep(100);
if (brightness == ScreenBrightness.Get())
Program.toast.RunToast(ScreenBrightness.Adjust(delta) + "%", (delta < 0 ) ? ToastIcon.BrightnessDown : ToastIcon.BrightnessUp);
}
}
public void KeyPressed(object sender, KeyPressedEventArgs e)
@@ -163,7 +175,7 @@ namespace GHelper.Input
{
Logger.WriteLine(e.Key.ToString());
if (NoMKeys())
if (AppConfig.NoMKeys())
{
switch (e.Key)
{
@@ -179,7 +191,7 @@ namespace GHelper.Input
}
}
if (AppConfig.ContainsModel("Z13") || AppConfig.ContainsModel("Duo"))
if (AppConfig.IsZ13() || AppConfig.IsDUO())
{
switch (e.Key)
{
@@ -189,7 +201,7 @@ namespace GHelper.Input
}
}
if (AppConfig.ContainsModel("GA401I") && !AppConfig.ContainsModel("GA401IHR"))
if (AppConfig.NoAura())
{
switch (e.Key)
{
@@ -227,12 +239,10 @@ namespace GHelper.Input
KeyboardHook.KeyPress(Keys.Snapshot);
break;
case Keys.F7:
if (IsManualBrightness()) Program.toast.RunToast(ScreenBrightness.Adjust(-10) + "%", ToastIcon.BrightnessDown);
HandleOptimizationEvent(16);
SetBrightness(-10);
break;
case Keys.F8:
if (IsManualBrightness()) Program.toast.RunToast(ScreenBrightness.Adjust(+10) + "%", ToastIcon.BrightnessUp);
HandleOptimizationEvent(32);
SetBrightness(+10);
break;
case Keys.F9:
KeyboardHook.KeyWinPress(Keys.P);
@@ -255,6 +265,7 @@ namespace GHelper.Input
default:
break;
}
}
if (e.Modifier == (ModifierKeys.Control | ModifierKeys.Shift))
@@ -269,11 +280,11 @@ namespace GHelper.Input
{
case Keys.VolumeDown:
// Screen brightness down on CTRL+VolDown
HandleOptimizationEvent(16);
SetBrightness(-10);
break;
case Keys.VolumeUp:
// Screen brightness up on CTRL+VolUp
HandleOptimizationEvent(32);
SetBrightness(+10);
break;
}
}
@@ -311,6 +322,8 @@ namespace GHelper.Input
action = "micmute";
if (name == "fnc")
action = "fnlock";
if (name == "fne")
action = "calculator";
}
switch (action)
@@ -351,10 +364,10 @@ namespace GHelper.Input
Program.toast.RunToast(muteStatus ? "Muted" : "Unmuted", muteStatus ? ToastIcon.MicrophoneMute : ToastIcon.Microphone);
break;
case "brightness_up":
HandleOptimizationEvent(32);
SetBrightness(+10);
break;
case "brightness_down":
HandleOptimizationEvent(16);
SetBrightness(-10);
break;
case "screenpad_up":
SetScreenpad(10);
@@ -365,7 +378,9 @@ namespace GHelper.Input
case "custom":
CustomKey(name);
break;
case "calculator":
LaunchProcess("calc");
break;
default:
break;
}
@@ -408,43 +423,73 @@ namespace GHelper.Input
static void HandleEvent(int EventID)
{
switch (EventID)
// The ROG Ally uses different M-key codes.
// We'll special-case the translation of those.
if (AppConfig.IsAlly())
{
case 124: // M3
KeyProcess("m3");
return;
case 56: // M4 / Rog button
case 181: // FN + Numpad Enter
KeyProcess("m4");
return;
case 174: // FN+F5
modeControl.CyclePerformanceMode();
return;
case 179: // FN+F4
case 178: // FN+F4
KeyProcess("fnf4");
return;
case 158: // Fn + C
KeyProcess("fnc");
return;
case 78: // Fn + ESC
ToggleFnLock();
return;
case 189: // Tablet mode
TabletMode();
return;
case 197: // FN+F2
SetBacklight(-1);
return;
case 196: // FN+F3
SetBacklight(1);
return;
case 199: // ON Z13 - FN+F11 - cycles backlight
SetBacklight(4);
return;
case 53: // FN+F6 on GA-502DU model
NativeMethods.TurnOffScreen(Program.settingsForm.Handle);
return;
switch(EventID)
{
// This is both the M1 and M2 keys.
// There's a way to differentiate, apparently, but it isn't over USB or any other obvious protocol.
case 165:
KeyProcess("paddle");
return;
// The Command Center ("play-looking") button below the select key.
case 166:
KeyProcess("cc");
return;
// The M4/ROG key.
case 56:
KeyProcess("m4");
return;
}
}
// All other devices seem to use the same HID key-codes,
// so we can process them all the same.
else
{
switch (EventID)
{
case 124: // M3
KeyProcess("m3");
return;
case 56: // M4 / Rog button
KeyProcess("m4");
return;
case 181: // FN + Numpad Enter
KeyProcess("fne");
return;
case 174: // FN+F5
modeControl.CyclePerformanceMode();
return;
case 179: // FN+F4
case 178: // FN+F4
KeyProcess("fnf4");
return;
case 158: // Fn + C
KeyProcess("fnc");
return;
case 78: // Fn + ESC
ToggleFnLock();
return;
case 189: // Tablet mode
TabletMode();
return;
case 197: // FN+F2
SetBacklight(-1);
return;
case 196: // FN+F3
SetBacklight(1);
return;
case 199: // ON Z13 - FN+F11 - cycles backlight
SetBacklight(4);
return;
case 53: // FN+F6 on GA-502DU model
NativeMethods.TurnOffScreen(Program.settingsForm.Handle);
return;
}
}
if (!OptimizationService.IsRunning())
@@ -467,7 +512,7 @@ namespace GHelper.Input
break;
case 107: // FN+F10
AsusUSB.TouchpadToggle();
Thread.Sleep(50);
Thread.Sleep(200);
Program.toast.RunToast(GetTouchpadState() ? "On" : "Off", ToastIcon.Touchpad);
break;
case 108: // FN+F11

View File

@@ -15,6 +15,17 @@ namespace GHelper.Peripherals.Mouse
Never = 0xFF
}
public enum DebounceTime
{
Disabled = 0x00, //?? not sure because mice with this setting have no "disabled". But the mouse accepts and stores 0x00 just fine
MS12 = 0x02,
MS16 = 0x03,
MS20 = 0x04,
MS24 = 0x05,
MS28 = 0x06,
MS32 = 0x07
}
public enum PollingRate
{
PR125Hz = 0,
@@ -129,7 +140,7 @@ namespace GHelper.Peripherals.Mouse
public abstract class AsusMouse : Device, IPeripheral
{
private static string[] POLLING_RATES = { "125 Hz", "250 Hz", "500 Hz", "1000 Hz", "2000 Hz", "4000 Hz", "8000 Hz", "16000 Hz" };
internal const bool PACKET_LOGGER_ALWAYS_ON = true;
internal const bool PACKET_LOGGER_ALWAYS_ON = false;
internal const int ASUS_MOUSE_PACKET_SIZE = 65;
public event EventHandler? Disconnect;
@@ -168,13 +179,23 @@ namespace GHelper.Peripherals.Mouse
public PollingRate PollingRate { get; protected set; }
public bool AngleSnapping { get; protected set; }
public short AngleAdjustmentDegrees { get; protected set; }
public DebounceTime Debounce { get; protected set; }
public AsusMouse(ushort vendorId, ushort productId, string path, bool wireless) : base(vendorId, productId)
{
this.path = path;
this.Wireless = wireless;
DpiSettings = new AsusMouseDPI[1];
LightingSetting = new LightingSetting[SupportedLightingZones().Length];
if (SupportedLightingZones().Length == 0)
{
LightingSetting = new LightingSetting[1];
}
else
{
LightingSetting = new LightingSetting[SupportedLightingZones().Length];
}
}
public override bool Equals(object? obj)
@@ -364,6 +385,7 @@ namespace GHelper.Peripherals.Mouse
ReadDPI();
ReadPollingRate();
ReadLiftOffDistance();
ReadDebounce();
ReadLightingSetting();
}
@@ -593,6 +615,21 @@ namespace GHelper.Peripherals.Mouse
return false;
}
public virtual int AngleTuningStep()
{
return 1;
}
public virtual int AngleTuningMin()
{
return -20;
}
public virtual int AngleTuningMax()
{
return 20;
}
public virtual string PollingRateDisplayString(PollingRate pollingRate)
{
return POLLING_RATES[(int)pollingRate];
@@ -740,9 +777,10 @@ namespace GHelper.Peripherals.Mouse
return;
}
if (angleAdjustment < -20 || angleAdjustment > 20)
if (angleAdjustment < AngleTuningMin() || angleAdjustment > AngleTuningMax())
{
Logger.WriteLine(GetDisplayName() + ": Angle Adjustment:" + angleAdjustment + " is outside of range [-20;20].");
Logger.WriteLine(GetDisplayName() + ": Angle Adjustment:" + angleAdjustment
+ " is outside of range [" + AngleTuningMin() + "; " + AngleTuningMax() + "].");
return;
}
@@ -801,6 +839,7 @@ namespace GHelper.Peripherals.Mouse
{
if (!CanChangeDPIProfile())
{
this.DpiProfile = profile;
return;
}
@@ -1005,6 +1044,91 @@ namespace GHelper.Peripherals.Mouse
this.LiftOffDistance = liftOffDistance;
}
// ------------------------------------------------------------------------------
// Debounce
// ------------------------------------------------------------------------------
public virtual bool HasDebounceSetting()
{
return false;
}
public virtual int DebounceTimeInMS(DebounceTime dbt)
{
switch (dbt)
{
case DebounceTime.MS12: return 12;
case DebounceTime.MS16: return 16;
case DebounceTime.MS20: return 20;
case DebounceTime.MS24: return 24;
case DebounceTime.MS28: return 28;
case DebounceTime.MS32: return 32;
default: return 0;
}
}
protected virtual byte[] GetReadDebouncePacket()
{
return new byte[] { 0x00, 0x12, 0x04, 0x00 };
}
protected virtual byte[] GetUpdateDebouncePacket(DebounceTime debounce)
{
return new byte[] { 0x00, 0x51, 0x31, 0x05, 0x00, ((byte)debounce) };
}
protected virtual DebounceTime ParseDebounce(byte[] packet)
{
if (packet[1] != 0x12 || packet[2] != 0x04 || packet[3] != 0x00)
{
return DebounceTime.MS12;
}
if (packet[15] < 0x02)
{
return DebounceTime.MS12;
}
if (packet[15] > 0x07)
{
return DebounceTime.MS32;
}
return (DebounceTime)packet[15];
}
public void ReadDebounce()
{
if (!HasDebounceSetting())
{
return;
}
byte[]? response = WriteForResponse(GetReadDebouncePacket());
if (response is null) return;
Debounce = ParseDebounce(response);
Logger.WriteLine(GetDisplayName() + ": Read Debouce Setting: " + Debounce);
}
public void SetDebounce(DebounceTime debounce)
{
if (!HasDebounceSetting())
{
return;
}
WriteForResponse(GetUpdateDebouncePacket(debounce));
FlushSettings();
Logger.WriteLine(GetDisplayName() + ": Set Debouce to " + debounce);
this.Debounce = debounce;
}
// ------------------------------------------------------------------------------
// RGB
// ------------------------------------------------------------------------------
@@ -1068,7 +1192,7 @@ namespace GHelper.Peripherals.Mouse
public virtual LightingZone[] SupportedLightingZones()
{
return new LightingZone[] { };
return new LightingZone[] { LightingZone.Logo };
}
public virtual int IndexForZone(LightingZone zone)
@@ -1086,6 +1210,11 @@ namespace GHelper.Peripherals.Mouse
public virtual bool IsLightingZoned()
{
if (LightingSetting.Length < 2)
{
return false;
}
//Check whether all zones are the same or not
for (int i = 1; i < LightingSetting.Length; ++i)
{
@@ -1195,7 +1324,7 @@ namespace GHelper.Peripherals.Mouse
return setting;
}
public void ReadLightingSetting()
public virtual void ReadLightingSetting()
{
if (!HasRGB())
{

View File

@@ -50,6 +50,11 @@ namespace GHelper.Peripherals.Mouse.Models
return true;
}
public override bool HasDebounceSetting()
{
return true;
}
public override bool HasLiftOffSetting()
{
return true;

View File

@@ -0,0 +1,91 @@
namespace GHelper.Peripherals.Mouse.Models
{
//P706_Wireless
public class GladiusIII : AsusMouse
{
public GladiusIII() : base(0x0B05, 0x197F, "mi_00", true)
{
}
protected GladiusIII(ushort vendorId, bool wireless) : base(0x0B05, vendorId, "mi_00", wireless)
{
}
public override int DPIProfileCount()
{
return 4;
}
public override string GetDisplayName()
{
return "ROG Gladius III (Wireless)";
}
public override PollingRate[] SupportedPollingrates()
{
return new PollingRate[] {
PollingRate.PR125Hz,
PollingRate.PR250Hz,
PollingRate.PR500Hz,
PollingRate.PR1000Hz
};
}
public override int ProfileCount()
{
return 5;
}
public override int MaxDPI()
{
return 26_000;
}
public override bool HasDebounceSetting()
{
return true;
}
public override bool HasLiftOffSetting()
{
return true;
}
public override bool HasRGB()
{
return true;
}
public override LightingZone[] SupportedLightingZones()
{
return new LightingZone[] { LightingZone.Logo, LightingZone.Scrollwheel, LightingZone.Underglow };
}
public override bool HasAutoPowerOff()
{
return true;
}
public override bool HasAngleSnapping()
{
return true;
}
public override bool HasLowBatteryWarning()
{
return true;
}
}
public class GladiusIIIWired : GladiusIII
{
public GladiusIIIWired() : base(0x197d, false)
{
}
public override string GetDisplayName()
{
return "ROG Gladius III (Wired)";
}
}
}

View File

@@ -1,5 +1,6 @@
namespace GHelper.Peripherals.Mouse.Models
{
//P711
public class GladiusIIIAimpoint : AsusMouse
{
public GladiusIIIAimpoint() : base(0x0B05, 0x1A70, "mi_00", true)
@@ -17,7 +18,7 @@
public override string GetDisplayName()
{
return "ROG Gladius III (Wireless)";
return "ROG Gladius III Aimpoint (Wireless)";
}
@@ -45,6 +46,11 @@
return true;
}
public override bool HasDebounceSetting()
{
return true;
}
public override bool HasLiftOffSetting()
{
return true;
@@ -94,7 +100,7 @@
public override string GetDisplayName()
{
return "ROG Gladius III (Wired)";
return "ROG Gladius III Aimpoint (Wired)";
}
}
}

View File

@@ -102,6 +102,10 @@
{
return 100;
}
public override bool HasDebounceSetting()
{
return true;
}
public override bool CanChangeDPIProfile()
{

View File

@@ -0,0 +1,226 @@
namespace GHelper.Peripherals.Mouse.Models
{
//P513
public class StrixImpactIIWireless : AsusMouse
{
public StrixImpactIIWireless() : base(0x0B05, 0x1949, "mi_00", true)
{
}
protected StrixImpactIIWireless(ushort vendorId, bool wireless) : base(0x0B05, vendorId, "mi_00", wireless)
{
}
public override int DPIProfileCount()
{
return 4;
}
public override string GetDisplayName()
{
return "ROG Strix Impact II (Wireless)";
}
public override PollingRate[] SupportedPollingrates()
{
return new PollingRate[] {
PollingRate.PR125Hz,
PollingRate.PR250Hz,
PollingRate.PR500Hz,
PollingRate.PR1000Hz
};
}
public override int ProfileCount()
{
return 3;
}
public override int MaxDPI()
{
return 16_000;
}
public override bool HasLiftOffSetting()
{
return true;
}
public override bool HasRGB()
{
return true;
}
public override bool HasAutoPowerOff()
{
return true;
}
public override bool HasAngleSnapping()
{
return true;
}
public override bool HasAngleTuning()
{
return false;
}
public override bool HasLowBatteryWarning()
{
return true;
}
public override bool HasDPIColors()
{
return false;
}
public override bool IsLightingModeSupported(LightingMode lightingMode)
{
return lightingMode == LightingMode.Static
|| lightingMode == LightingMode.Breathing
|| lightingMode == LightingMode.ColorCycle
|| lightingMode == LightingMode.React
|| lightingMode == LightingMode.BatteryState
|| lightingMode == LightingMode.Off;
}
public override LightingZone[] SupportedLightingZones()
{
return new LightingZone[] { LightingZone.Logo, LightingZone.Scrollwheel };
}
//Has 25% increments
protected override int ParseBattery(byte[] packet)
{
if (packet[1] == 0x12 && packet[2] == 0x07)
{
return packet[5] * 25;
}
return -1;
}
public override int DPIIncrements()
{
return 100;
}
public override bool CanChangeDPIProfile()
{
return false;
}
protected override byte[] GetUpdateEnergySettingsPacket(int lowBatteryWarning, PowerOffSetting powerOff)
{
return base.GetUpdateEnergySettingsPacket(lowBatteryWarning / 25, powerOff);
}
protected override int ParseLowBatteryWarning(byte[] packet)
{
int lowBat = base.ParseLowBatteryWarning(packet);
return lowBat * 25;
}
protected override LiftOffDistance ParseLiftOffDistance(byte[] packet)
{
if (packet[1] != 0x12 || packet[2] != 0x06)
{
return LiftOffDistance.Low;
}
return (LiftOffDistance)packet[5];
}
protected override byte[] GetUpdateLiftOffDistancePacket(LiftOffDistance liftOffDistance)
{
return new byte[] { 0x00, 0x51, 0x35, 0x00, 0x00, ((byte)liftOffDistance) };
}
public override int MaxBrightness()
{
return 4;
}
public override bool HasDebounceSetting()
{
return true;
}
protected override byte IndexForLightingMode(LightingMode lightingMode)
{
if (lightingMode == LightingMode.Off)
{
return 0xFF;
}
return ((byte)lightingMode);
}
protected override byte[] GetReadLightingModePacket(LightingZone zone)
{
return new byte[] { 0x00, 0x12, 0x03, 0x00 };
}
protected LightingSetting? ParseLightingSetting(byte[] packet, LightingZone zone)
{
if (packet[1] != 0x12 || packet[2] != 0x03)
{
return null;
}
int offset = 5 + (((int)zone) * 5);
LightingSetting setting = new LightingSetting();
setting.LightingMode = LightingModeForIndex(packet[offset + 0]);
setting.Brightness = packet[offset + 1];
setting.RGBColor = Color.FromArgb(packet[offset + 2], packet[offset + 3], packet[offset + 4]);
return setting;
}
public override void ReadLightingSetting()
{
if (!HasRGB())
{
return;
}
//Mouse sends all lighting zones in one response
//00 12 03 00 00 [00 04 ff 00 80] [00 04 00 ff ff] [00 04 ff ff ff] 00 00 00 00 00 00 00 00 00 00 00 00 00 0
//No idea what the 3rd zone is as the mouse only has 2
byte[]? response = WriteForResponse(GetReadLightingModePacket(LightingZone.All));
if (response is null) return;
LightingZone[] lz = SupportedLightingZones();
for (int i = 0; i < lz.Length; ++i)
{
LightingSetting? ls = ParseLightingSetting(response, lz[i]);
if (ls is null)
{
Logger.WriteLine(GetDisplayName() + ": Failed to read RGB Setting for Zone " + lz[i].ToString());
continue;
}
Logger.WriteLine(GetDisplayName() + ": Read RGB Setting for Zone " + lz[i].ToString() + ": " + ls.ToString());
LightingSetting[i] = ls;
}
}
}
public class StrixImpactIIWirelessWired : StrixImpactIIWireless
{
public StrixImpactIIWirelessWired() : base(0x1947, false)
{
}
public override string GetDisplayName()
{
return "ROG Strix Impact II (Wired)";
}
}
}

View File

@@ -0,0 +1,112 @@
namespace GHelper.Peripherals.Mouse.Models
{
//P306_Wireless
public class TUFM3 : AsusMouse
{
public TUFM3() : base(0x0B05, 0x1910, "mi_01", false)
{
}
public override int DPIProfileCount()
{
return 4;
}
public override string GetDisplayName()
{
return "TUF GAMING M3";
}
public override PollingRate[] SupportedPollingrates()
{
return new PollingRate[] {
PollingRate.PR125Hz,
PollingRate.PR250Hz,
PollingRate.PR500Hz,
PollingRate.PR1000Hz
};
}
//Mouse has React mapped to 0x03 instead of 0x04 like other mice
protected override byte IndexForLightingMode(LightingMode lightingMode)
{
if (lightingMode == LightingMode.React)
{
return 0x03;
}
return ((byte)lightingMode);
}
//Mouse has React mapped to 0x03 instead of 0x04 like other mice
protected override LightingMode LightingModeForIndex(byte lightingMode)
{
if (lightingMode == 0x03)
{
return LightingMode.React;
}
return base.LightingModeForIndex(lightingMode);
}
public override int ProfileCount()
{
return 1;
}
public override int MaxDPI()
{
return 7_000;
}
public override bool HasBattery()
{
return false;
}
public override bool HasLiftOffSetting()
{
return false;
}
public override LightingZone[] SupportedLightingZones()
{
return new LightingZone[] { LightingZone.Logo };
}
public override bool HasRGB()
{
return true;
}
public override bool HasAngleSnapping()
{
return true;
}
public override int DPIIncrements()
{
return 100;
}
public override bool CanChangeDPIProfile()
{
return true;
}
public override bool HasDebounceSetting()
{
return true;
}
public override int MaxBrightness()
{
return 4;
}
public override bool IsLightingModeSupported(LightingMode lightingMode)
{
return lightingMode == LightingMode.Static
|| lightingMode == LightingMode.Breathing
|| lightingMode == LightingMode.ColorCycle
|| lightingMode == LightingMode.React;
}
}
}

View File

@@ -42,6 +42,11 @@
return false;
}
public override bool HasDebounceSetting()
{
return true;
}
public override bool HasAutoPowerOff()
{
return true;

View File

@@ -190,6 +190,11 @@ namespace GHelper.Peripherals
DetectMouse(new ROGKerisWireless());
DetectMouse(new ROGKerisWirelessWired());
DetectMouse(new TUFM4Wirelss());
DetectMouse(new StrixImpactIIWireless());
DetectMouse(new StrixImpactIIWirelessWired());
DetectMouse(new GladiusIII());
DetectMouse(new GladiusIIIWired());
DetectMouse(new TUFM3());
}
public static void DetectMouse(AsusMouse am)

View File

@@ -429,6 +429,15 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Charge.
/// </summary>
internal static string BatteryCharge {
get {
return ResourceManager.GetString("BatteryCharge", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Battery Charge Limit.
/// </summary>
@@ -437,7 +446,7 @@ namespace GHelper.Properties {
return ResourceManager.GetString("BatteryChargeLimit", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Battery Health.
/// </summary>
@@ -1061,6 +1070,15 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Button Response.
/// </summary>
internal static string MouseButtonResponse {
get {
return ResourceManager.GetString("MouseButtonResponse", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Lift Off Distance.
/// </summary>
@@ -1141,7 +1159,7 @@ namespace GHelper.Properties {
return ResourceManager.GetString("NoNewUpdates", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Not Connected.
/// </summary>
@@ -1447,7 +1465,7 @@ namespace GHelper.Properties {
return ResourceManager.GetString("ToggleAura", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Auto Toggle Clamshell Mode.
/// </summary>

View File

@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>Ausbalanciert</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Akkustand</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Ladebegrenzung</value>
</data>
@@ -452,6 +455,9 @@ Trotzdem fortfahren?</value>
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Automatisch abschalten nach</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Tastenreaktionsgeschwindigkeit</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -184,7 +184,7 @@
<value>Rápido</value>
</data>
<data name="AuraLightingMode" xml:space="preserve">
<value>Lighting Mode</value>
<value>Modo de iluminación</value>
</data>
<data name="AuraNormal" xml:space="preserve">
<value>Normal</value>
@@ -208,7 +208,7 @@
<value>Estroboscópico</value>
</data>
<data name="AuraZoneAll" xml:space="preserve">
<value>All</value>
<value>Todo</value>
</data>
<data name="AuraZoneDock" xml:space="preserve">
<value>Dock</value>
@@ -217,7 +217,7 @@
<value>Logo</value>
</data>
<data name="AuraZoneScroll" xml:space="preserve">
<value>Scrollwheel</value>
<value>Rueda de desplazamiento</value>
</data>
<data name="AuraZoneUnderglow" xml:space="preserve">
<value>Underglow</value>
@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>Equilibrado</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Charge</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Límite de carga</value>
</data>
@@ -452,6 +455,9 @@
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Auto-apagar tras</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Respuesta del botón</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Distancia de despegue (LOD)</value>
</data>

View File

@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>Équilibré</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Charge</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Limite de charge </value>
</data>
@@ -452,6 +455,9 @@ Voulez-vous continuer ?</value>
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Arrêt automatique après</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>Teljesítmény</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Charge</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Töltési korlát</value>
</data>
@@ -452,6 +455,9 @@ Do you still want to continue?</value>
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Auto Power Off After</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>Bilanciato</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Charge</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Limite Ricarica Batteria</value>
</data>
@@ -452,6 +455,9 @@ Sei sicuro di voler continuare?</value>
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Auto Power Off After</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>균형</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Charge</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>배터리 충전 제한</value>
</data>
@@ -452,6 +455,9 @@
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Auto Power Off After</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -184,7 +184,7 @@
<value>Greitas</value>
</data>
<data name="AuraLightingMode" xml:space="preserve">
<value>Lighting Mode</value>
<value>Apšvietimo režimas</value>
</data>
<data name="AuraNormal" xml:space="preserve">
<value>Normalus</value>
@@ -208,19 +208,19 @@
<value>Blyksniai</value>
</data>
<data name="AuraZoneAll" xml:space="preserve">
<value>All</value>
<value>Visi</value>
</data>
<data name="AuraZoneDock" xml:space="preserve">
<value>Dock</value>
<value>Jungčių stotelė</value>
</data>
<data name="AuraZoneLogo" xml:space="preserve">
<value>Logo</value>
<value>Logotipas</value>
</data>
<data name="AuraZoneScroll" xml:space="preserve">
<value>Scrollwheel</value>
<value>Ratukas</value>
</data>
<data name="AuraZoneUnderglow" xml:space="preserve">
<value>Underglow</value>
<value>Apatinis apšvietimas</value>
</data>
<data name="AutoApply" xml:space="preserve">
<value>Taikyti automatiškai</value>
@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>Balansuotas</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Įkrova</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Įkrovos riba</value>
</data>
@@ -393,7 +396,7 @@ Vis tiek norite tęsti?</value>
<value>Ekranas</value>
</data>
<data name="Lid" xml:space="preserve">
<value>Korpusas</value>
<value>Dangtis</value>
</data>
<data name="Lightbar" xml:space="preserve">
<value>Šviesos juosta</value>
@@ -452,6 +455,9 @@ Vis tiek norite tęsti?</value>
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Automatiškai išjungti po</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Klavišo atsakas</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Pakilimo atstumas</value>
</data>
@@ -474,10 +480,10 @@ Vis tiek norite tęsti?</value>
<value>Niekada</value>
</data>
<data name="NewUpdates" xml:space="preserve">
<value>Nauji naujinimai</value>
<value>Naujinimai</value>
</data>
<data name="NoNewUpdates" xml:space="preserve">
<value>Nėra naujų naujinimų</value>
<value>Nėra naujinimų</value>
</data>
<data name="NotConnected" xml:space="preserve">
<value>Neprijungta</value>

View File

@@ -184,7 +184,7 @@
<value>Szybka</value>
</data>
<data name="AuraLightingMode" xml:space="preserve">
<value>Lighting Mode</value>
<value>Tryb oświetlenia</value>
</data>
<data name="AuraNormal" xml:space="preserve">
<value>Normalna</value>
@@ -208,7 +208,7 @@
<value>Stroboskop</value>
</data>
<data name="AuraZoneAll" xml:space="preserve">
<value>All</value>
<value>Wszystko</value>
</data>
<data name="AuraZoneDock" xml:space="preserve">
<value>Dock</value>
@@ -217,10 +217,10 @@
<value>Logo</value>
</data>
<data name="AuraZoneScroll" xml:space="preserve">
<value>Scrollwheel</value>
<value>Rolka</value>
</data>
<data name="AuraZoneUnderglow" xml:space="preserve">
<value>Underglow</value>
<value>Dolna poświata</value>
</data>
<data name="AutoApply" xml:space="preserve">
<value>Zastosuj automatycznie</value>
@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>Balans</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Charge</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Limit ładowania baterii</value>
</data>
@@ -452,6 +455,9 @@ Nadal chcesz kontynuować?</value>
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Przejście w tryb uśpienia po</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Wysokość reakcji sensora</value>
</data>

View File

@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>Equilibrado</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Charge</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Limite de carga</value>
</data>
@@ -452,6 +455,9 @@ Do you still want to continue?</value>
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Auto Power Off After</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>Balanced</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Charge</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Battery Charge Limit</value>
</data>
@@ -452,6 +455,9 @@ Do you still want to continue?</value>
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Auto Power Off After</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>Echilibrat</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Charge</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Limita de încărcare a bateriei</value>
</data>
@@ -452,6 +455,9 @@
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Auto Power Off After</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>Dengeli</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Charge</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Pil Şarj Limiti</value>
</data>
@@ -452,6 +455,9 @@ Do you still want to continue?</value>
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Auto Power Off After</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -169,22 +169,22 @@
<value>Дихання</value>
</data>
<data name="AuraClockwise" xml:space="preserve">
<value>Clockwise</value>
<value>Направо</value>
</data>
<data name="AuraColorCycle" xml:space="preserve">
<value>Зміна Кольорів</value>
</data>
<data name="AuraComet" xml:space="preserve">
<value>Comet</value>
<value>Комета</value>
</data>
<data name="AuraCounterClockwise" xml:space="preserve">
<value>Counterclockwise</value>
<value>Наліво</value>
</data>
<data name="AuraFast" xml:space="preserve">
<value>Швидка</value>
</data>
<data name="AuraLightingMode" xml:space="preserve">
<value>Lighting Mode</value>
<value>Підсвітка</value>
</data>
<data name="AuraNormal" xml:space="preserve">
<value>Нормальна</value>
@@ -193,10 +193,10 @@
<value>Веселка</value>
</data>
<data name="AuraRandomColor" xml:space="preserve">
<value>Random</value>
<value>Випадкова</value>
</data>
<data name="AuraReact" xml:space="preserve">
<value>React</value>
<value>Реактивна</value>
</data>
<data name="AuraSlow" xml:space="preserve">
<value>Повільна</value>
@@ -208,19 +208,19 @@
<value>Стробоскоп</value>
</data>
<data name="AuraZoneAll" xml:space="preserve">
<value>All</value>
<value>Все</value>
</data>
<data name="AuraZoneDock" xml:space="preserve">
<value>Dock</value>
<value>Док</value>
</data>
<data name="AuraZoneLogo" xml:space="preserve">
<value>Logo</value>
<value>Лого</value>
</data>
<data name="AuraZoneScroll" xml:space="preserve">
<value>Scrollwheel</value>
<value>Колесо</value>
</data>
<data name="AuraZoneUnderglow" xml:space="preserve">
<value>Underglow</value>
<value>Низ</value>
</data>
<data name="AutoApply" xml:space="preserve">
<value>Автоматично</value>
@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>Баланс</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Заряд</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Ліміт заряду батареї</value>
</data>
@@ -303,7 +306,7 @@
<value>NVIDIA Display Mode не в режимі Optimus</value>
</data>
<data name="EnergySettings" xml:space="preserve">
<value>Energy Settings</value>
<value>Налаштування Енергії</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Додатково</value>
@@ -372,7 +375,7 @@
<value>Temperature Target</value>
</data>
<data name="High" xml:space="preserve">
<value>High</value>
<value>Висока</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Прив'язки клавіш</value>
@@ -399,13 +402,13 @@
<value>Лайтбар</value>
</data>
<data name="Lighting" xml:space="preserve">
<value>Lighting</value>
<value>Ілюмінація</value>
</data>
<data name="Logo" xml:space="preserve">
<value>Лого</value>
</data>
<data name="Low" xml:space="preserve">
<value>Low</value>
<value>Низька</value>
</data>
<data name="MatrixAudio" xml:space="preserve">
<value>Аудіо візуалізатор</value>
@@ -441,17 +444,20 @@
<value>Частота 60Гц, щоб зберегти заряд батареї</value>
</data>
<data name="Minute" xml:space="preserve">
<value>Minute</value>
<value>Хвил.</value>
</data>
<data name="Minutes" xml:space="preserve">
<value>Хвилини</value>
</data>
<data name="MouseAngleSnapping" xml:space="preserve">
<value>Привʼязка по куту</value>
<value>Фіксація Кута</value>
</data>
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Авто-вимикання</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Відповідь Кнопок</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Відстань підйому</value>
</data>
@@ -459,7 +465,7 @@
<value>Попередження про низький заряд</value>
</data>
<data name="MousePerformance" xml:space="preserve">
<value>Performance</value>
<value>Режим Швидкодії</value>
</data>
<data name="MouseSynchronize" xml:space="preserve">
<value>Синхронізувати з мишею</value>

View File

@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>Cân bằng</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>Charge</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Giới hạn sạc</value>
</data>
@@ -452,6 +455,9 @@ Do you still want to continue?</value>
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>Auto Power Off After</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>Button Response</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>Lift Off Distance</value>
</data>

View File

@@ -184,7 +184,7 @@
<value>快速</value>
</data>
<data name="AuraLightingMode" xml:space="preserve">
<value>Lighting Mode</value>
<value>灯效模式</value>
</data>
<data name="AuraNormal" xml:space="preserve">
<value>正常</value>
@@ -208,7 +208,7 @@
<value>闪烁</value>
</data>
<data name="AuraZoneAll" xml:space="preserve">
<value>All</value>
<value>全部</value>
</data>
<data name="AuraZoneDock" xml:space="preserve">
<value>Dock</value>
@@ -217,7 +217,7 @@
<value>Logo</value>
</data>
<data name="AuraZoneScroll" xml:space="preserve">
<value>Scrollwheel</value>
<value>滚轮</value>
</data>
<data name="AuraZoneUnderglow" xml:space="preserve">
<value>Underglow</value>
@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>平衡模式</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>电池电量</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>电池充电限制</value>
</data>
@@ -336,7 +339,7 @@
<value>风扇</value>
</data>
<data name="FansPower" xml:space="preserve">
<value>风扇 + 电源</value>
<value>风扇 + 功率</value>
</data>
<data name="FnLock" xml:space="preserve">
<value>打开FnLock (无需按下FN使用FN+(F1-F12)热键)</value>
@@ -452,6 +455,9 @@
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>自动关闭时间</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>按键响应</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>静默高度</value>
</data>

View File

@@ -184,7 +184,7 @@
<value>快速</value>
</data>
<data name="AuraLightingMode" xml:space="preserve">
<value>Lighting Mode</value>
<value>燈效模式</value>
</data>
<data name="AuraNormal" xml:space="preserve">
<value>正常</value>
@@ -208,7 +208,7 @@
<value>閃爍</value>
</data>
<data name="AuraZoneAll" xml:space="preserve">
<value>All</value>
<value>全部</value>
</data>
<data name="AuraZoneDock" xml:space="preserve">
<value>Dock</value>
@@ -217,7 +217,7 @@
<value>Logo</value>
</data>
<data name="AuraZoneScroll" xml:space="preserve">
<value>Scrollwheel</value>
<value>滾輪</value>
</data>
<data name="AuraZoneUnderglow" xml:space="preserve">
<value>Underglow</value>
@@ -240,6 +240,9 @@
<data name="Balanced" xml:space="preserve">
<value>平衡模式</value>
</data>
<data name="BatteryCharge" xml:space="preserve">
<value>充電</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>電池充電上限</value>
</data>
@@ -452,6 +455,9 @@
<data name="MouseAutoPowerOff" xml:space="preserve">
<value>自動關閉電源</value>
</data>
<data name="MouseButtonResponse" xml:space="preserve">
<value>按鍵回應</value>
</data>
<data name="MouseLiftOffDistance" xml:space="preserve">
<value>響應高度(LOD)</value>
</data>

122
app/Settings.Designer.cs generated
View File

@@ -47,8 +47,9 @@ namespace GHelper
labelBatteryTitle = new Label();
panelFooter = new Panel();
tableButtons = new TableLayoutPanel();
buttonUpdates = new RButton();
labelVersion = new Label();
buttonQuit = new RButton();
buttonUpdates = new RButton();
checkStartup = new CheckBox();
panelPerformance = new Panel();
tablePerf = new TableLayoutPanel();
@@ -95,8 +96,8 @@ namespace GHelper
panelKeyboardTitle = new Panel();
pictureKeyboard = new PictureBox();
labelKeyboard = new Label();
labelVersion = new Label();
panelVersion = new Panel();
labelCharge = new Label();
panelPeripherals = new Panel();
tableLayoutPeripherals = new TableLayoutPanel();
buttonPeripheral3 = new RButton();
@@ -173,7 +174,7 @@ namespace GHelper
tableLayoutMatrix.Name = "tableLayoutMatrix";
tableLayoutMatrix.RowCount = 1;
tableLayoutMatrix.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
tableLayoutMatrix.Size = new Size(787, 60);
tableLayoutMatrix.Size = new Size(787, 64);
tableLayoutMatrix.TabIndex = 43;
//
// comboMatrix
@@ -215,8 +216,8 @@ namespace GHelper
buttonMatrix.Dock = DockStyle.Top;
buttonMatrix.FlatAppearance.BorderSize = 0;
buttonMatrix.FlatStyle = FlatStyle.Flat;
buttonMatrix.Location = new Point(528, 6);
buttonMatrix.Margin = new Padding(4, 6, 4, 6);
buttonMatrix.Location = new Point(528, 8);
buttonMatrix.Margin = new Padding(4, 8, 4, 8);
buttonMatrix.Name = "buttonMatrix";
buttonMatrix.Secondary = true;
buttonMatrix.Size = new Size(255, 48);
@@ -276,7 +277,7 @@ namespace GHelper
panelBattery.Controls.Add(sliderBattery);
panelBattery.Controls.Add(panelBatteryTitle);
panelBattery.Dock = DockStyle.Top;
panelBattery.Location = new Point(11, 1261);
panelBattery.Location = new Point(11, 1265);
panelBattery.Margin = new Padding(0);
panelBattery.Name = "panelBattery";
panelBattery.Padding = new Padding(20, 20, 20, 10);
@@ -350,7 +351,7 @@ namespace GHelper
panelFooter.AutoSizeMode = AutoSizeMode.GrowAndShrink;
panelFooter.Controls.Add(tableButtons);
panelFooter.Dock = DockStyle.Top;
panelFooter.Location = new Point(11, 1431);
panelFooter.Location = new Point(11, 1435);
panelFooter.Margin = new Padding(0);
panelFooter.Name = "panelFooter";
panelFooter.Padding = new Padding(20);
@@ -365,8 +366,9 @@ namespace GHelper
tableButtons.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.3333321F));
tableButtons.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.3333321F));
tableButtons.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 27F));
tableButtons.Controls.Add(buttonUpdates, 0, 0);
tableButtons.Controls.Add(labelVersion, 0, 0);
tableButtons.Controls.Add(buttonQuit, 2, 0);
tableButtons.Controls.Add(buttonUpdates, 1, 0);
tableButtons.Dock = DockStyle.Top;
tableButtons.Location = new Point(20, 20);
tableButtons.Margin = new Padding(4);
@@ -376,26 +378,20 @@ namespace GHelper
tableButtons.Size = new Size(787, 60);
tableButtons.TabIndex = 25;
//
// buttonUpdates
// labelVersion
//
buttonUpdates.AccessibleName = "BIOS and Driver Updates";
buttonUpdates.Activated = false;
buttonUpdates.BackColor = SystemColors.ControlLight;
buttonUpdates.BorderColor = Color.Transparent;
buttonUpdates.BorderRadius = 2;
buttonUpdates.Dock = DockStyle.Top;
buttonUpdates.FlatStyle = FlatStyle.Flat;
buttonUpdates.Image = Properties.Resources.icons8_software_32_white;
buttonUpdates.ImageAlign = ContentAlignment.MiddleRight;
buttonUpdates.Location = new Point(4, 6);
buttonUpdates.Margin = new Padding(4, 6, 4, 6);
buttonUpdates.Name = "buttonUpdates";
buttonUpdates.Secondary = true;
buttonUpdates.Size = new Size(254, 48);
buttonUpdates.TabIndex = 24;
buttonUpdates.Text = "Updates";
buttonUpdates.TextImageRelation = TextImageRelation.ImageBeforeText;
buttonUpdates.UseVisualStyleBackColor = false;
labelVersion.Cursor = Cursors.Hand;
labelVersion.Dock = DockStyle.Fill;
labelVersion.Font = new Font("Segoe UI", 9F, FontStyle.Underline, GraphicsUnit.Point);
labelVersion.ForeColor = SystemColors.ControlDark;
labelVersion.Location = new Point(0, 0);
labelVersion.Margin = new Padding(0);
labelVersion.Name = "labelVersion";
labelVersion.Padding = new Padding(5);
labelVersion.Size = new Size(262, 60);
labelVersion.TabIndex = 37;
labelVersion.Text = "v.0";
labelVersion.TextAlign = ContentAlignment.MiddleLeft;
//
// buttonQuit
//
@@ -418,10 +414,31 @@ namespace GHelper
buttonQuit.TextImageRelation = TextImageRelation.ImageBeforeText;
buttonQuit.UseVisualStyleBackColor = false;
//
// buttonUpdates
//
buttonUpdates.AccessibleName = "BIOS and Driver Updates";
buttonUpdates.Activated = false;
buttonUpdates.BackColor = SystemColors.ControlLight;
buttonUpdates.BorderColor = Color.Transparent;
buttonUpdates.BorderRadius = 2;
buttonUpdates.Dock = DockStyle.Top;
buttonUpdates.FlatStyle = FlatStyle.Flat;
buttonUpdates.Image = Properties.Resources.icons8_software_32_white;
buttonUpdates.ImageAlign = ContentAlignment.MiddleRight;
buttonUpdates.Location = new Point(266, 6);
buttonUpdates.Margin = new Padding(4, 6, 4, 6);
buttonUpdates.Name = "buttonUpdates";
buttonUpdates.Secondary = true;
buttonUpdates.Size = new Size(254, 48);
buttonUpdates.TabIndex = 24;
buttonUpdates.Text = "Updates";
buttonUpdates.TextImageRelation = TextImageRelation.ImageBeforeText;
buttonUpdates.UseVisualStyleBackColor = false;
//
// checkStartup
//
checkStartup.AutoSize = true;
checkStartup.Location = new Point(36, 11);
checkStartup.Location = new Point(24, 11);
checkStartup.Margin = new Padding(11, 5, 11, 5);
checkStartup.Name = "checkStartup";
checkStartup.Size = new Size(206, 36);
@@ -1022,7 +1039,7 @@ namespace GHelper
panelKeyboard.Margin = new Padding(0);
panelKeyboard.Name = "panelKeyboard";
panelKeyboard.Padding = new Padding(20);
panelKeyboard.Size = new Size(827, 140);
panelKeyboard.Size = new Size(827, 144);
panelKeyboard.TabIndex = 3;
//
// tableLayoutKeyboard
@@ -1042,7 +1059,7 @@ namespace GHelper
tableLayoutKeyboard.Name = "tableLayoutKeyboard";
tableLayoutKeyboard.RowCount = 1;
tableLayoutKeyboard.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
tableLayoutKeyboard.Size = new Size(787, 60);
tableLayoutKeyboard.Size = new Size(787, 64);
tableLayoutKeyboard.TabIndex = 39;
//
// buttonKeyboard
@@ -1057,8 +1074,8 @@ namespace GHelper
buttonKeyboard.FlatStyle = FlatStyle.Flat;
buttonKeyboard.Image = Properties.Resources.icons8_settings_32;
buttonKeyboard.ImageAlign = ContentAlignment.MiddleRight;
buttonKeyboard.Location = new Point(528, 6);
buttonKeyboard.Margin = new Padding(4, 6, 4, 6);
buttonKeyboard.Location = new Point(528, 8);
buttonKeyboard.Margin = new Padding(4, 8, 4, 8);
buttonKeyboard.Name = "buttonKeyboard";
buttonKeyboard.Secondary = true;
buttonKeyboard.Size = new Size(255, 48);
@@ -1074,8 +1091,8 @@ namespace GHelper
panelColor.Controls.Add(pictureColor);
panelColor.Controls.Add(buttonKeyboardColor);
panelColor.Dock = DockStyle.Fill;
panelColor.Location = new Point(266, 6);
panelColor.Margin = new Padding(4, 6, 4, 6);
panelColor.Location = new Point(266, 8);
panelColor.Margin = new Padding(4, 8, 4, 8);
panelColor.Name = "panelColor";
panelColor.Size = new Size(254, 48);
panelColor.TabIndex = 36;
@@ -1111,7 +1128,7 @@ namespace GHelper
buttonKeyboardColor.FlatStyle = FlatStyle.Flat;
buttonKeyboardColor.ForeColor = SystemColors.ControlText;
buttonKeyboardColor.Location = new Point(0, 0);
buttonKeyboardColor.Margin = new Padding(4, 6, 4, 6);
buttonKeyboardColor.Margin = new Padding(4, 8, 4, 8);
buttonKeyboardColor.Name = "buttonKeyboardColor";
buttonKeyboardColor.Secondary = false;
buttonKeyboardColor.Size = new Size(254, 48);
@@ -1169,31 +1186,29 @@ namespace GHelper
labelKeyboard.TabIndex = 34;
labelKeyboard.Text = "Laptop Keyboard";
//
// labelVersion
//
labelVersion.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelVersion.Cursor = Cursors.Hand;
labelVersion.Font = new Font("Segoe UI", 9F, FontStyle.Underline, GraphicsUnit.Point);
labelVersion.ForeColor = SystemColors.ControlDark;
labelVersion.Location = new Point(502, 13);
labelVersion.Margin = new Padding(11, 0, 11, 0);
labelVersion.Name = "labelVersion";
labelVersion.Size = new Size(300, 32);
labelVersion.TabIndex = 37;
labelVersion.Text = "v.0";
labelVersion.TextAlign = ContentAlignment.TopRight;
//
// panelVersion
//
panelVersion.Controls.Add(labelVersion);
panelVersion.Controls.Add(labelCharge);
panelVersion.Controls.Add(checkStartup);
panelVersion.Dock = DockStyle.Top;
panelVersion.Location = new Point(11, 1375);
panelVersion.Location = new Point(11, 1379);
panelVersion.Margin = new Padding(4);
panelVersion.Name = "panelVersion";
panelVersion.Size = new Size(827, 56);
panelVersion.TabIndex = 6;
//
// labelCharge
//
labelCharge.Dock = DockStyle.Right;
labelCharge.ForeColor = SystemColors.ControlDark;
labelCharge.Location = new Point(365, 0);
labelCharge.Margin = new Padding(0);
labelCharge.Name = "labelCharge";
labelCharge.Padding = new Padding(0, 0, 20, 0);
labelCharge.Size = new Size(462, 56);
labelCharge.TabIndex = 40;
labelCharge.TextAlign = ContentAlignment.MiddleRight;
//
// panelPeripherals
//
panelPeripherals.AutoSize = true;
@@ -1201,7 +1216,7 @@ namespace GHelper
panelPeripherals.Controls.Add(tableLayoutPeripherals);
panelPeripherals.Controls.Add(panelPeripheralsTile);
panelPeripherals.Dock = DockStyle.Top;
panelPeripherals.Location = new Point(11, 1063);
panelPeripherals.Location = new Point(11, 1067);
panelPeripherals.Margin = new Padding(0);
panelPeripherals.Name = "panelPeripherals";
panelPeripherals.Padding = new Padding(20, 20, 20, 10);
@@ -1482,7 +1497,6 @@ namespace GHelper
private Label labelVersion;
private RButton buttonStopGPU;
private TableLayoutPanel tableButtons;
private RButton buttonUpdates;
private Panel panelPeripherals;
private TableLayoutPanel tableLayoutPeripherals;
private Panel panelPeripheralsTile;
@@ -1492,5 +1506,7 @@ namespace GHelper
private RButton buttonPeripheral3;
private RButton buttonPeripheral1;
private RButton buttonKeyboard;
private RButton buttonUpdates;
private Label labelCharge;
}
}

View File

@@ -178,11 +178,8 @@ namespace GHelper
sensorTimer.Elapsed += OnTimedEvent;
sensorTimer.Enabled = true;
labelBattery.MouseEnter += PanelBattery_MouseEnter;
labelBatteryTitle.MouseEnter += PanelBattery_MouseEnter;
labelBattery.MouseLeave += PanelBattery_MouseLeave;
labelBatteryTitle.MouseLeave += PanelBattery_MouseLeave;
labelCharge.MouseEnter += PanelBattery_MouseEnter;
labelCharge.MouseLeave += PanelBattery_MouseLeave;
buttonPeripheral1.Click += ButtonPeripheral_Click;
buttonPeripheral2.Click += ButtonPeripheral_Click;
@@ -229,7 +226,7 @@ namespace GHelper
if (HardwareControl.batteryHealth != -1)
{
labelBattery.Text = Properties.Strings.BatteryHealth + ": " + Math.Round(HardwareControl.batteryHealth, 1) + "%";
labelCharge.Text = Properties.Strings.BatteryHealth + ": " + Math.Round(HardwareControl.batteryHealth, 1) + "%";
}
}
@@ -634,12 +631,12 @@ namespace GHelper
comboKeyboard.SelectedValueChanged += ComboKeyboard_SelectedValueChanged;
if (AsusUSB.HasColor())
if (AppConfig.NoAuraColor())
{
panelColor.Visible = false;
}
if (AppConfig.ContainsModel("GA401I"))
if (AppConfig.NoAura())
{
comboKeyboard.Visible = false;
}
@@ -822,6 +819,7 @@ namespace GHelper
string cpuTemp = "";
string gpuTemp = "";
string battery = "";
string charge = "";
HardwareControl.ReadSensors();
Task.Run((Action)PeripheralsProvider.RefreshBatteryForAllDevices);
@@ -829,6 +827,9 @@ namespace GHelper
if (HardwareControl.cpuTemp > 0)
cpuTemp = ": " + Math.Round((decimal)HardwareControl.cpuTemp).ToString() + "°C";
if (HardwareControl.batteryCapacity > 0)
charge = Properties.Strings.BatteryCharge + ": " + Math.Round(HardwareControl.batteryCapacity, 1) + "% ";
if (HardwareControl.batteryRate < 0)
battery = Properties.Strings.Discharging + ": " + Math.Round(-(decimal)HardwareControl.batteryRate, 1).ToString() + "W";
else if (HardwareControl.batteryRate > 0)
@@ -847,7 +848,8 @@ namespace GHelper
if (HardwareControl.midFan is not null)
labelMidFan.Text = "Mid " + HardwareControl.midFan;
if (!batteryMouseOver) labelBattery.Text = battery;
labelBattery.Text = battery;
if (!batteryMouseOver) labelCharge.Text = charge;
});
string trayTip = "CPU" + cpuTemp + " " + HardwareControl.cpuFan;
@@ -928,7 +930,7 @@ namespace GHelper
if (Program.acpi.IsXGConnected())
AsusUSB.ApplyXGMLight(AppConfig.Is("xmg_light"));
if (AppConfig.ContainsModel("X16") || AppConfig.ContainsModel("X13")) InputDispatcher.TabletMode();
if (AppConfig.HasTabletMode()) InputDispatcher.TabletMode();
}

View File

@@ -1,14 +1,20 @@
# 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/)
# G-Helper - Lightweight control tool for Asus laptops
[![United24](https://raw.githubusercontent.com/seerge/g-helper/main/docs/ua.png)](https://u24.gov.ua/)
Language: English | [中文](https://github.com/seerge/g-helper/blob/main/docs/README.zh-CN.md)
## Control tool for Asus laptops
[![GitHub release](https://img.shields.io/github/release/seerge/g-helper.svg)](https://GitHub.com/seerge/g-helper/releases/)
[![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total.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/) <sup> Language: English | <a href="https://github.com/seerge/g-helper/blob/main/docs/README.zh-CN.md">[中文]</a></sup>
Lightweight Armoury Crate alternative for Asus laptops. A small utility that allows you to do almost everything you could do with Armoury Crate but without extra bloat and unnecessary services. Works on all popular models, such as ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar, ProArt and many more! Feel free to try :)
# [:floppy_disk: Download](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
- Don't forget to [Read FAQ](#question-faq)
- If you like this app, please [star :star: it on Github](https://github.com/seerge/g-helper) and spread the word about it!
#### Support project in [:euro: EUR](https://www.paypal.com/donate/?hosted_button_id=4HMSHS4EBQWTA) | [💵 USD](https://www.paypal.com/donate/?hosted_button_id=SRM6QUX6ACXDY) | [:credit_card: Stripe](https://buy.stripe.com/00gaFJ9Lf79v7WobII)
![Gihhub](https://github.com/seerge/g-helper/assets/5920850/4d98465a-63a5-4498-ae14-afb3e67e7e82)
## :gift: Main advantages
1. Seamless and automatic GPU switching (without asking you to close all apps, etc)
@@ -18,20 +24,11 @@ Lightweight Armoury Crate alternative for Asus laptops. A small utility that all
5. FN-Lock
6. Doesn't need administrator privileges to run (*)
# [:floppy_disk: Download G-Helper App](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
If you like this app, please [star :star: it on Github](https://github.com/seerge/g-helper) and spread a word about it!
#### Support project in [:euro: EUR](https://www.paypal.com/donate/?hosted_button_id=4HMSHS4EBQWTA) | [💵 USD](https://www.paypal.com/donate/?hosted_button_id=SRM6QUX6ACXDY) | [:credit_card: Stripe](https://buy.stripe.com/00gaFJ9Lf79v7WobII)
_If you post about the app - please include a link. Thanks._
![Gihhub](https://github.com/seerge/g-helper/assets/5920850/4d98465a-63a5-4498-ae14-afb3e67e7e82)
### :zap: Features
1. **Performance modes**: Silent - Balanced - Turbo (built-in, with default fan curves)
2. **GPU modes**: Eco - Standard - Ultimate - Optimized
3. Laptop screen refresh rate 60hz or 120hz (144hz, etc) with display overdrive (OD) and miniled multizone switch
3. Laptop screen refresh rate 60hz or 120hz (144hz, etc) with display overdrive (OD) and mini-led multi-zone switch
4. Custom fan curve editor, power limits (PPT) and turbo boost selection for every performance mode
5. Anime matrix control thanks to [Starlight](https://github.com/vddCore/Starlight) + some tweaks from my side including animated GIFs, clock and audio visualizer
6. Keyboard backlit animation and colors (including sleep animation and support for TUF models)
@@ -45,10 +42,10 @@ _If you post about the app - please include a link. Thanks._
![Screenshot 2023-04-13 190951](https://user-images.githubusercontent.com/5920850/231859391-c4963af4-491c-4523-95d4-0bdcfd7cfd6f.png)
### :gear: Automatic switching when on battery or plugged in
- Performance modes (app remembers last mode used on battery or when plugged)
- App remembers last Mode used on battery or when plugged
- Optimized GPU mode - disables dGPU on battery and enables when plugged
- Auto Screen refresh rate (60hz on battery, 120+ hz when plugged)
- Keyboard backlight can be turned off on battery
- Auto Screen refresh rate (60hz on battery, max hz when plugged)
- Keyboard backlight timeout on battery or when plugged
To keep auto switching and hotkeys working the app needs to stay running in the tray. It doesn't consume any resources.
@@ -56,20 +53,20 @@ To keep auto switching and hotkeys working the app needs to stay running in the
Modes are **same** as in Armoury Crate as they are stored in bios including default fan curves
1. Silent (minimal or no fans, 70W PPT total, up to 45W PPT to CPU) + Best power efficiency setting in windows
2. Balanced (balanced fans, 100W PPT total, up to 45W PPT to CPU) + Balanced setting in windows
3. Turbo (intense fans, 125W PPT total, up to 80W PPT to CPU) + Best performance setting in windows
1. **Silent** (minimal or no fans, 70W PPT total, up to 45W PPT to CPU) + Best power efficiency setting in windows
2. **Balanced** (balanced fans, 100W PPT total, up to 45W PPT to CPU) + Balanced setting in windows
3. **Turbo** (intense fans, 125W PPT total, up to 80W PPT to CPU) + Best performance setting in windows
_PPTs are shown for G14 2022, for other models PPTs will be different as they are set in bios._
### :video_game: GPU Modes
1. Eco mode : only low power integrated GPU enabled, iGPU drives built in display
2. Standard mode (MS Hybrid) : iGPU and dGPU enabled, iGPU drives built in display
3. Ultimate mode: iGPU and dGPU enabled, but dGPU drives built in display (supported only on G14 2022 model)
4. Optimized: disables dGPU on battery (Eco) and enables when plugged (Standard)
1. **Eco** : only low power integrated GPU enabled, iGPU drives built in display
2. **Standard** (MS Hybrid) : iGPU and dGPU enabled, iGPU drives built in display
3. **Ultimate**: iGPU and dGPU enabled, but dGPU drives built in display (supported on 2022+ models)
4. **Optimized**: disables dGPU on battery (Eco) and enables when plugged (Standard)
![Screenshot 2023-05-07 182519](https://user-images.githubusercontent.com/5920850/236697890-26938ac4-8840-4fed-a7b1-9a7b839fb865.png)
![Screenshot 2023-08-03 193646](https://github.com/seerge/g-helper/assets/5920850/ac7debcf-163a-4529-b7fd-fb4d2f3bb1da)
## :question: FAQ
@@ -95,50 +92,53 @@ Click on them
Most probably either you are using Eco / Optimized mode and your dGPU is simply off, or your windows has put the dGPU into sleep (to preserve power). In this situations G-helper won't be able to reach your GPU and get readings
#### I don't see app after starting it
Please check system tray for a (G) icon. By default windows is keen to hide all icons, so you may need to click ^ to see them all. I would advise to right click on Task Bar select Task Bar Settings -> Other System Tray icons -> Mark G-Helper to be always ON.
Please check the system tray for a (G) icon. By default windows is keen to hide all icons, so you may need to click ^ to see them all. I would advise to right click on Taskbar select TaskBar Settings -> Other System Tray icons -> Mark G-Helper to be always ON.
#### App crash or doesn't work properly what should I do ?
Open "Event Viewer" from start menu, go to Windows Logs -> Application and check for recent Errors mentioning G-Helper. If you see one - please post a [new issue](https://github.com/seerge/g-helper/issues) with all details from this error.
#### App crashes or doesn't work properly, what should I do ?
Open "Event Viewer" from the start menu, go to Windows Logs -> Application and check for recent Errors mentioning G-Helper. If you see one - please post a [new issue](https://github.com/seerge/g-helper/issues) with all details from this error.
#### Battery charge limiter is not working
It could be that Asus services are overwriting this limit after. You may want to stop them by clicking "Stop" in Asus Services section (under Extra).
It could be that Asus services are overwriting this limit after. You may want to stop them by clicking "Stop" in the Asus Services section (under Extra).
#### Can I use MyASUS app along with G-Helper?
You can, the only problem is that MyASUS may override the battery charge limit that you set before. My advice in such a situation would be to set the same limit (i.e. 80%) in both MyASUS and G-Helper.
#### How do I set Mute Microphone to M3?
If you have Asus Optimization Service running, it's controlled by that service (therefore G-helper doesn't interfere and doesn't touch this function). Alternatively you can stop that service - and you can bind M3 to anything you want.
If you have the Asus Optimization Service running, it's controlled by that service (therefore G-helper doesn't interfere and doesn't touch this function). Alternatively you can stop that service - and you can bind M3 to anything you want.
#### How do I set different "Visual styles"?
Personally, i'm not a big fan of them, as they make colors very inaccurate. But if you want so - you can adjust display colors using either Nvidia Control panel or AMD Adrenaline (appropriate display sections). If you really want you can also use [own ASUS utility from MS Store](https://apps.microsoft.com/store/detail/gamevisual/9P4K1LFTXSH8?hl=nl-nl&gl=nl&rtc=1)
Personally, I'm not a big fan of them, as they make colors very inaccurate. But if you want so - you can adjust display colors using either Nvidia Control panel or AMD Adrenaline (appropriate display sections). If you really want you can also use [own ASUS utility from MS Store](https://apps.microsoft.com/store/detail/gamevisual/9P4K1LFTXSH8?hl=nl-nl&gl=nl&rtc=1)
#### Can I overclock Nvidia GPU core / memory?
Make sure that your dGPU is enabled (i.e. it's not in Eco mode). Open Fans + Power section and adjust core / memory clock offsets. They work same as in armoury's manual mode. Please keep in mind that (unfortunately) you need admin permissions for that, and app will ask you for them. (*)
Make sure that your dGPU is enabled (i.e. it's not in Eco mode). Open Fans + Power section and adjust core / memory clock offsets. They work the same as in armoury's manual mode. Please keep in mind that (unfortunately) you need admin permissions for that, and the app will ask you for them. (*)
#### Windows defender marks app download as malware / virus
False positives from Windows Defender (or any other similar system that uses machine learning for detection) is possible as application is not digitally signed with a certificate. You can always download a version below or compile app by yourself. All application sources are open and can be monitored from A to Z :)
False positives from Windows Defender (or any other similar system that uses machine learning for detection) is possible as the application is not digitally signed with a certificate. You can always download a version below or compile the app by yourself. All application sources are open and can be monitored from A to Z :)
#### Where can I find app settings or logs ?
You can find them under ``%AppData%\GHelper`` folder. Please include them when posting a new bug-report or issue.
You can find them under the ``%AppData%\GHelper`` folder. Please include them when posting a new bug-report or issue.
#### App refuses to run on startup / runs without icon in tray on startup
Open app, and uncheck and check again "run on startup". If it still doesn't help (by some reason), you can try to manually edit "GHelper" task in windows Task Scheduler, and add couple of seconds delay to start.
Open the app, and uncheck and check again "run on startup". If it still doesn't help (for some reason), you can try to manually edit the "GHelper" task in Windows Task Scheduler, and add a couple of seconds delay to start.
#### How do I uninstall G-helper?
G-helper is a single exe, and it doesn't install anything in the system. To remove it - you can simply delete exe :) If you have applied any custom fan profiles or PPTs - before removing I would recommend selecting your
favorite performance mode (for example balanced) and clicking "Factory defaults" under Fans + Power.
#### Can I undervolt my CPU ?
Currently you can undervolt AMD CPUs. If your model supports that - you will see undervolting slider under ``Fans+Power -> Advanced``. If you don't see slider there, it means your CPU doesn't support undervolting. Full list of models that suppor that [can be found here](https://github.com/seerge/g-helper/discussions/736)
Currently you can undervolt AMD CPUs. If your model supports that - you will see an undervolting slider under ``Fans+Power -> Advanced``. If you don't see a slider there, it means your CPU doesn't support undervolting. Full list of models that support that [can be found here](https://github.com/seerge/g-helper/discussions/736)
#### I have G14 2023 and my GPU refuses to disable/enable
It seem to be an issue in older BIOS versions. As [users report](https://github.com/seerge/g-helper/issues/680) - latest BIOS 310 (installable via myasus / g-helper -> updates) resolves all issues :) So please update.
It seems to be an issue in older BIOS versions. As [users report](https://github.com/seerge/g-helper/issues/680) - latest BIOS 312 (installable via MyASUS or G-Helper -> Updates) resolves all issues :) So please update.
#### I have uninstalled Armoury andmy GPU performance is lower than it was
#### I have G15 2022 and my GPU refuses to disable/enable or my fans missbehave
G15 2022 is known to have a notoriously bugged BIOS (last one 313). Multiple users have reported that problems can be solved by rolling back to a [revious BIOS 311 from Asus Support website](https://rog.asus.com/nl/laptops/rog-zephyrus/rog-zephyrus-g15-2022-series/helpdesk_bios/).
#### I have uninstalled Armoury and my GPU performance is lower than it was
Check your NVidia Experience settings and make sure that you have **Whisper Mode** set to ``OFF``. Also you can go to reset all settings ``Nvidia Control panel -> Manage 3D Settings -> Reset to defaults``
#### How do I do a hardware reset on a laptop?
All Asus laptops have an option to do a hardware reset that can be handy sometimes. It doesn't touch your data, but resets all main hardware-related things (enables your dGPU, wakes up wifi/bt adapter if it hanged by some reason, etc). Turn OFF laptop. Press and hold "power" button for 30-40 seconds. Then boot normally (it will take a bit longer to boot)
All Asus laptops have an option to do a hardware reset that can be handy sometimes. It doesn't touch your data, but resets all main hardware-related things (enables your dGPU, wakes up wifi/bt adapter if it hangs for some reason, etc). Turn OFF laptop. Press and hold the "power" button for 30-40 seconds. Then boot normally (it will take a bit longer to boot)
#### What is G-helper ?
G-Helper is a lightweight Armoury Crate alternative for Asus laptops. A small utility that allows you to do almost everything you could do with Armoury Crate but without extra bloat and unnecessary services.
@@ -164,7 +164,7 @@ G-Helper is a lightweight Armoury Crate alternative for Asus laptops. A small ut
- [Microsoft .NET7](https://dotnet.microsoft.com/en-us/download). Most probably you already have it. Otherwise [download it](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/sdk-7.0.202-windows-x64-installer) from the official website.
- [Asus System Control Interface v3+](https://dlcdnets.asus.com/pub/ASUS/nb/Image/CustomComponent/ASUSSystemControlInterfaceV3/ASUSSystemControlInterfaceV3.exe). This "driver" from asus should be installed automatically by windows update or along other asus apps. If it's not the case by some reason - you can download and install it manually.
- [Asus System Control Interface v3+](https://dlcdnets.asus.com/pub/ASUS/nb/Image/CustomComponent/ASUSSystemControlInterfaceV3/ASUSSystemControlInterfaceV3.exe). This "driver" from asus should be installed automatically by windows update or along other asus apps. If it's not the case for some reason - you can download and install it manually.
### Recommendations (optional)
@@ -191,25 +191,25 @@ _GENERAL NOTE: "Power user" settings require some config edits. Before making an
### Manual app language setting
By default app will use your windows language setting. But you can set language manually (if it supported of course)
By default the app will use your windows language setting. But you can set language manually (if it supported of course)
Add following line to ``%AppData%\GHelper\config.json`` : ``"language" : "en"`` (by replacing "en" with language of your choice)
### Custom windows power plans with each mode
In ``%AppData%\GHelper\config.json`` you can manually add custom power plan (or power mode) GUID. It can be either "real" power plan that can be switched or "overlay" power plan like the ones g-helper sets by default.
In ``%AppData%\GHelper\config.json`` you can manually add a custom power plan (or power mode) GUID. It can be either "real" power plan that can be switched or "overlay" power plan like the ones g-helper sets by default.
Format is following : ``"scheme_<mode>" : "GUID" ``
Where ``mode = 0 (balanced), 1 (turbo), 2 (silent)``
Default behaviour is :
Default behavior is :
```
"scheme_0": "00000000-0000-0000-0000-000000000000",
"scheme_1": "ded574b5-45a0-4f42-8737-46345c09c238",
"scheme_2": "961cc777-2547-4f9d-8174-7d86181b8a7a",
```
Make sure to keep json structure (i.e. not to break it with extra or missing comas, etc) - or app will fail to read it and will just recreate a new config instead.
Make sure to keep json structure (i.e. not to break it with extra or missing commas, etc) - or the app will fail to read it and will just recreate a new config instead.
### Custom hotkey actions
@@ -218,13 +218,13 @@ App supports custom actions for M3, M4 and FN+F4 hotkeys. To set them select "Cu
1. To run any custom application - put a full path to exe into "action" text field, for example:
``C:\Program Files\EA Games\Battlefield 2042\BF2042.exe``
2. To simulate any windows key - put appropriate keycode into "action" field, for example ``0x2C`` for Print screen.
2. To simulate any windows key - put appropriate keycode into the "action" field, for example ``0x2C`` for Print Screen.
Full list of keycodes https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
![Screenshot 2023-07-17 192155](https://github.com/seerge/g-helper/assets/5920850/e450e124-1589-4787-bce8-7c37ffe72fbd)
### Force Standard mode on shutdown / hibernation
In some rare cases G14 2023 seem to have issues with enabling / disabling dGPU - i.e. Eco mode. Till we wait for a fix from asus on BIOS level, one of the proposed solutions is to always shutdown laptop in Standard mode (then everything seem to work fine). To enable "forced" Standard mode on shutdown add following line to ``%AppData%\GHelper\config.json``
In some rare cases G14 2023 seem to have issues with enabling / disabling dGPU - i.e. Eco mode. Till we wait for a fix from asus on BIOS level, one of the proposed solutions is to always shutdown the laptop in Standard mode (then everything seems to work fine). To enable "forced" Standard mode on shutdown add following line to ``%AppData%\GHelper\config.json``
```
"gpu_fix" : 1,
```
@@ -235,12 +235,17 @@ You can disable app's OSD (for performance modes, keyboard backlight, etc) by ad
"disable_osd": 1,
```
### Extra Keybindings
- ``Ctrl + Shift + F5`` - Toggle Performance Modes
- ``Ctrl + Shift + F12`` - Open G-Helper window
- ``Ctrl + M1 / M2`` - Screen brightness Down / Up
- ``Shift + M1 / M2`` - Backlight brightness Down / Up
If you don't want this bindings to work you can add ``"skip_hotkeys":1,`` to ``%AppData%\GHelper\config.json``
### Keybinding to toggle performance modes (on external keyboards)
By default app will toggle performance modes with Ctr+Shift+F5. You can change this binding by adding ``"keybind_profile": 116`` in config.json (under ``%AppData%\GHelper``), where 116 is [numerical code for desired key](https://www.oreilly.com/library/view/javascript-dhtml/9780596514082/apb.html). Put 0 to completely disable this binding.
### Keybinding to open G-helper from external keyboards
Ctrl + Shift + F12
By default the app will toggle performance modes with Ctr+Shift+F5. You can change this binding by adding ``"keybind_profile": 116`` in config.json (under ``%AppData%\GHelper``), where 116 is [numerical code for desired key](https://www.oreilly.com/library/view/javascript-dhtml/9780596514082/apb.html). Put 0 to completely disable this binding.
------------
@@ -254,3 +259,5 @@ Ctrl + Shift + F12
"ROG", "TUF", and "Armoury Crate" are trademarked by and belong to AsusTek Computer, Inc. I make no claims to these or any assets belonging to AsusTek Computer and use them purely for informational purposes only.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. MISUSE OF THIS SOFTWARE COULD CAUSE SYSTEM INSTABILITY OR MALFUNCTION.