Compare commits

..

9 Commits

Author SHA1 Message Date
Serge
44dddfd4cc Cleanup 2024-08-11 11:07:32 +02:00
Serge
7af211f656 Cleanup 2024-08-11 11:06:24 +02:00
Serge
991eab1280 Softwar FN-Lock for ProArt 2024-08-11 10:44:13 +02:00
Serge
59f36e6db3 ProArt F12 2024-08-10 13:24:01 +02:00
Serge
1bbd40fbd5 Emojis Popup 2024-08-10 12:35:16 +02:00
Serge
3fd1869d3f Emoji popup 2024-08-10 12:23:01 +02:00
Serge
c64bc4599e Visual modes and gamuts 2024-08-10 12:06:40 +02:00
Serge
d94a54f785 Update AsusACPI.cs 2024-08-09 10:59:22 +02:00
Serge
ff5aac78a3 Init 2024-08-09 10:29:03 +02:00
69 changed files with 839 additions and 2050 deletions

2
.github/FUNDING.yml vendored
View File

@@ -1,2 +0,0 @@
# These are supported funding model platforms
custom: https://g-helper.com/support

View File

@@ -347,7 +347,6 @@ namespace GHelper.Ally
if (!autoTDP && _mode != ControllerMode.Auto) return; if (!autoTDP && _mode != ControllerMode.Auto) return;
float fps = amdControl.GetFPS(); float fps = amdControl.GetFPS();
int? usage = 0;
if (autoTDP && fpsLimit > 0 && fpsLimit <= 120) if (autoTDP && fpsLimit > 0 && fpsLimit <= 120)
{ {
@@ -378,8 +377,7 @@ namespace GHelper.Ally
if (_mode == ControllerMode.Auto) if (_mode == ControllerMode.Auto)
{ {
if (fps > 0) usage = amdControl.GetiGpuUse(); ControllerMode newMode = (fps > 0) ? ControllerMode.Gamepad : ControllerMode.Mouse;
ControllerMode newMode = (fps > 0 && usage > 15) ? ControllerMode.Gamepad : ControllerMode.Mouse;
if (_applyMode != newMode) _autoCount++; if (_applyMode != newMode) _autoCount++;
else _autoCount = 0; else _autoCount = 0;
@@ -388,7 +386,7 @@ namespace GHelper.Ally
{ {
_autoCount = 0; _autoCount = 0;
ApplyMode(newMode); ApplyMode(newMode);
Logger.WriteLine($"Controller Mode (FPS={fps}, USAGE={usage}%): {newMode}"); Logger.WriteLine($"Controller Mode {fps}: {newMode}");
} }
} }
@@ -616,9 +614,9 @@ namespace GHelper.Ally
} }
public static void DisableXBoxController(bool disabled) public static void ApplyXBoxStatus()
{ {
AsusHid.WriteInput([AsusHid.INPUT_ID, 0xD1, 0x0B, 0x01, disabled ? (byte)0x02 : (byte)0x01], $"ControllerDisabled: {disabled}"); AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xD1, 0x0B, 0x01, AppConfig.Is("controller_disabled") ? (byte)0x02 : (byte)0x01 }, "Status");
} }
public static void ApplyMode(ControllerMode applyMode = ControllerMode.Auto, bool init = false) public static void ApplyMode(ControllerMode applyMode = ControllerMode.Auto, bool init = false)
@@ -648,10 +646,10 @@ namespace GHelper.Ally
if (init) if (init)
{ {
WakeUp(); WakeUp();
InputDispatcher.SetBacklightAuto(); InputDispatcher.SetBacklightAuto(true);
} }
AsusHid.WriteInput([AsusHid.INPUT_ID, 0xD1, 0x01, 0x01, (byte)_applyMode], "Controller"); AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xD1, 0x01, 0x01, (byte)_applyMode }, "Controller");
//AsusHid.WriteInput(CommandSave, null); //AsusHid.WriteInput(CommandSave, null);
BindZone(BindingZone.M1M2); BindZone(BindingZone.M1M2);
@@ -668,13 +666,6 @@ namespace GHelper.Ally
SetDeadzones(); SetDeadzones();
if (init && AppConfig.Is("controller_disabled"))
{
Thread.Sleep(500);
DisableXBoxController(false);
DisableXBoxController(true);
}
}); });
} }

View File

@@ -36,8 +36,7 @@ namespace GHelper.AnimeMatrix
public AniMatrixControl(SettingsForm settingsForm) public AniMatrixControl(SettingsForm settingsForm)
{ {
settings = settingsForm; settings = settingsForm;
if (!AppConfig.IsSlash() && !AppConfig.IsAnimeMatrix()) return;
try try
{ {
if (AppConfig.IsSlash()) if (AppConfig.IsSlash())
@@ -115,7 +114,6 @@ namespace GHelper.AnimeMatrix
switch ((SlashMode)running) switch ((SlashMode)running)
{ {
case SlashMode.Static: case SlashMode.Static:
Logger.WriteLine("Slash: Static");
var custom = AppConfig.GetString("slash_custom"); var custom = AppConfig.GetString("slash_custom");
if (custom is not null && custom.Length > 0) if (custom is not null && custom.Length > 0)
{ {
@@ -128,7 +126,6 @@ namespace GHelper.AnimeMatrix
break; break;
case SlashMode.BatteryLevel: case SlashMode.BatteryLevel:
// call tick to immediately update the pattern // call tick to immediately update the pattern
Logger.WriteLine("Slash: Battery Level");
SlashTimer_start(); SlashTimer_start();
SlashTimer_tick(); SlashTimer_tick();
break; break;
@@ -151,7 +148,7 @@ namespace GHelper.AnimeMatrix
if (deviceSlash is not null) if (deviceSlash is not null)
{ {
deviceSlash.SetLidMode(!matrixLid && AppConfig.Is("slash_sleep")); deviceSlash.SetLidMode(true);
} }
if (matrixLid || force) if (matrixLid || force)
@@ -214,7 +211,7 @@ namespace GHelper.AnimeMatrix
switch (running) switch (running)
{ {
case 2: case 2:
SetMatrixPicture(AppConfig.GetString("matrix_picture"), false); SetMatrixPicture(AppConfig.GetString("matrix_picture"));
break; break;
case 3: case 3:
SetMatrixClock(); SetMatrixClock();
@@ -281,7 +278,7 @@ namespace GHelper.AnimeMatrix
} }
private void SlashTimer_start(int interval = 180000) private void SlashTimer_start(int interval = 60000)
{ {
// 100% to 0% in 1hr = 1% every 36 seconds // 100% to 0% in 1hr = 1% every 36 seconds
// 1 bracket every 14.2857 * 36s = 514s ~ 8m 30s // 1 bracket every 14.2857 * 36s = 514s ~ 8m 30s

View File

@@ -410,7 +410,7 @@ namespace GHelper.AnimeMatrix
if (DateTime.Now.Second % 2 != 0) timeFormat = timeFormat.Replace(":", " "); if (DateTime.Now.Second % 2 != 0) timeFormat = timeFormat.Replace(":", " ");
Clear(); Clear();
Text(DateTime.Now.ToString(timeFormat), 15, 7 - FullRows / 2, 25); Text(DateTime.Now.ToString(timeFormat), 15, 2, 25);
Text(DateTime.Now.ToString(dateFormat), 11.5F, 0, 14); Text(DateTime.Now.ToString(dateFormat), 11.5F, 0, 14);
Present(); Present();

View File

@@ -182,17 +182,17 @@ namespace GHelper.AnimeMatrix
public void SetBatteryPattern(int brightness) public void SetBatteryPattern(int brightness)
{ {
SetCustom(GetBatteryPattern(brightness, 100 * (GetBatteryChargePercentage() / AppConfig.Get("charge_limit", 100))), null); SetCustom(GetBatteryPattern(brightness, 100 * (GetBatteryChargePercentage() / AppConfig.Get("charge_limit", 100))));
} }
public void SetCustom(byte[] data, string? log = "Static Data") public void SetCustom(byte[] data)
{ {
Set(CreatePacket([0xD2, 0x02, 0x01, 0x08, 0xAC]), null); Set(CreatePacket([0xD2, 0x02, 0x01, 0x08, 0xAC]), "Static");
Set(CreatePacket([0xD3, 0x03, 0x01, 0x08, 0xAC, 0xFF, 0xFF, 0x01, 0x05, 0xFF, 0xFF]), null); Set(CreatePacket([0xD3, 0x03, 0x01, 0x08, 0xAC, 0xFF, 0xFF, 0x01, 0x05, 0xFF, 0xFF]), "StaticSettings");
Set(CreatePacket([0xD4, 0x00, 0x00, 0x01, 0xAC]), null); Set(CreatePacket([0xD4, 0x00, 0x00, 0x01, 0xAC]), "StaticSave");
byte[] payload = new byte[] { 0xD3, 0x00, 0x00, 0x07 }; byte[] payload = new byte[] { 0xD3, 0x00, 0x00, 0x07 };
Set(CreatePacket(payload.Concat(data.Take(7)).ToArray()), log); Set(CreatePacket(payload.Concat(data.Take(7)).ToArray()), "Static Data");
} }
public void SetOptions(bool status, int brightness = 0, int interval = 0) public void SetOptions(bool status, int brightness = 0, int interval = 0)
@@ -209,7 +209,7 @@ namespace GHelper.AnimeMatrix
public void SetLidMode(bool status) public void SetLidMode(bool status)
{ {
Set(CreatePacket([0xD8, 0x00, 0x00, 0x02, 0xA5, status ? (byte)0x80 : (byte)0x00]), $"SlashLidCloseAnimation {status}"); Set(CreatePacket([0xD8, 0x00, 0x00, 0x02, 0xA5, status ? (byte)0x80 : (byte)0x00]), $"DisableLidClose {status}");
} }
public void SetSleepActive(bool status) public void SetSleepActive(bool status)

View File

@@ -12,7 +12,7 @@ public static class AppConfig
private static string? _bios; private static string? _bios;
private static Dictionary<string, object> config = new Dictionary<string, object>(); private static Dictionary<string, object> config = new Dictionary<string, object>();
private static System.Timers.Timer timer = new System.Timers.Timer(2000); private static System.Timers.Timer timer = new System.Timers.Timer(1000);
static AppConfig() static AppConfig()
{ {
@@ -41,19 +41,10 @@ public static class AppConfig
{ {
config = JsonSerializer.Deserialize<Dictionary<string, object>>(text); config = JsonSerializer.Deserialize<Dictionary<string, object>>(text);
} }
catch (Exception ex) catch
{ {
Logger.WriteLine($"Broken config: {ex.Message} {text}"); Logger.WriteLine("Broken config: " + text);
try Init();
{
text = File.ReadAllText(configFile + ".bak");
config = JsonSerializer.Deserialize<Dictionary<string, object>>(text);
}
catch (Exception exb)
{
Logger.WriteLine($"Broken backup config: {exb.Message} {text}");
Init();
}
} }
} }
else else
@@ -92,9 +83,7 @@ public static class AppConfig
Thread.Sleep(500); Thread.Sleep(500);
var backupText = File.ReadAllText(backup); if (File.ReadAllText(backup).Contains("}"))
if (backupText.Contains("{") && backupText.Contains("}"))
{ {
File.Copy(backup, configFile, true); File.Copy(backup, configFile, true);
} }
@@ -221,7 +210,6 @@ public static class AppConfig
private static void Write() private static void Write()
{ {
timer.Stop();
timer.Start(); timer.Start();
} }
@@ -305,32 +293,27 @@ public static class AppConfig
switch (mode) switch (mode)
{ {
case AsusACPI.PerformanceTurbo: case 1:
switch (device) if (device == AsusFan.GPU)
{ curve = StringToBytes("14-3F-44-48-4C-50-54-62-16-1F-26-2D-39-47-55-5F");
case AsusFan.GPU: else
return StringToBytes("14-3F-44-48-4C-50-54-62-16-1F-26-2D-39-47-55-5F"); curve = StringToBytes("14-3F-44-48-4C-50-54-62-11-1A-22-29-34-43-51-5A");
default: break;
return StringToBytes("14-3F-44-48-4C-50-54-62-11-1A-22-29-34-43-51-5A"); case 2:
} if (device == AsusFan.GPU)
case AsusACPI.PerformanceSilent: curve = StringToBytes("3C-41-42-46-47-4B-4C-62-08-11-11-1D-1D-26-26-2D");
switch (device) else
{ curve = StringToBytes("3C-41-42-46-47-4B-4C-62-03-0C-0C-16-16-22-22-29");
case AsusFan.GPU: break;
return StringToBytes("3C-41-42-46-47-4B-4C-62-08-11-11-1D-1D-26-26-2D");
default:
return StringToBytes("3C-41-42-46-47-4B-4C-62-03-0C-0C-16-16-22-22-29");
}
default: default:
switch (device) if (device == AsusFan.GPU)
{ curve = StringToBytes("3A-3D-40-44-48-4D-51-62-0C-16-1D-1F-26-2D-34-4A");
case AsusFan.GPU: else
return StringToBytes("3A-3D-40-44-48-4D-51-62-0C-16-1D-1F-26-2D-34-4A"); curve = StringToBytes("3A-3D-40-44-48-4D-51-62-08-11-16-1A-22-29-30-45");
default: break;
return StringToBytes("3A-3D-40-44-48-4D-51-62-08-11-16-1A-22-29-30-45");
}
} }
return curve;
} }
public static string GetModeString(string name) public static string GetModeString(string name)
@@ -399,44 +382,34 @@ public static class AppConfig
return ContainsModel("Vivobook") || ContainsModel("Zenbook") || ContainsModel("ProArt"); return ContainsModel("Vivobook") || ContainsModel("Zenbook") || ContainsModel("ProArt");
} }
public static bool IsHardwareFnLock()
{
return IsVivoZenPro();
}
// Devices with bugged bios command to change brightness // Devices with bugged bios command to change brightness
public static bool SwappedBrightness() public static bool SwappedBrightness()
{ {
return ContainsModel("FA506IH") || ContainsModel("FA506IC") || ContainsModel("FX506LU") || ContainsModel("FX506IC") || ContainsModel("FX506LH") || ContainsModel("FA506IV") || ContainsModel("FA706IC") || ContainsModel("FA706IH"); return ContainsModel("FA506IH") || ContainsModel("FA506IC") || ContainsModel("FX506LU") || ContainsModel("FX506IC") || ContainsModel("FX506LH") || ContainsModel("FA506IV") || ContainsModel("FA706IC");
} }
public static bool IsDUO() public static bool IsDUO()
{ {
return ContainsModel("Duo") || ContainsModel("GX550") || ContainsModel("GX650") || ContainsModel("UX840"); return ContainsModel("Duo") || ContainsModel("GX550") || ContainsModel("GX650");
} }
// G14 2020 has no aura, but media keys instead // G14 2020 has no aura, but media keys instead
public static bool NoAura() public static bool NoAura()
{ {
return (ContainsModel("GA401I") && !ContainsModel("GA401IHR")) || ContainsModel("GA502IU") || ContainsModel("HN7306"); return ContainsModel("GA401I") && !ContainsModel("GA401IHR");
} }
public static bool MediaKeys() public static bool MediaKeys()
{ {
return (ContainsModel("GA401I") && !ContainsModel("GA401IHR")) || ContainsModel("G712L"); return NoAura() || ContainsModel("G712L");
} }
public static bool IsSingleColor() public static bool IsSingleColor()
{ {
return ContainsModel("GA401") || ContainsModel("FX517Z") || ContainsModel("FX516P") || ContainsModel("X13") || IsARCNM() || ContainsModel("FA617N") || ContainsModel("FA617X") || NoAura(); return ContainsModel("GA401") || ContainsModel("FX517Z") || ContainsModel("FX516P") || ContainsModel("X13") || IsARCNM() || ContainsModel("GA502IU") || ContainsModel("FA617N") || ContainsModel("FA617X");
} }
public static bool IsAnimeMatrix()
{
return ContainsModel("GA401") || ContainsModel("GA402") || ContainsModel("GU604V");
}
public static bool IsSlash() public static bool IsSlash()
{ {
return ContainsModel("GA403") || ContainsModel("GU605") || ContainsModel("GA605"); return ContainsModel("GA403") || ContainsModel("GU605") || ContainsModel("GA605");
@@ -449,7 +422,7 @@ public static class AppConfig
public static bool IsInputBacklight() public static bool IsInputBacklight()
{ {
return ContainsModel("GA503") || IsSlash() || IsVivoZenPro(); return ContainsModel("GA503") || IsSlash();
} }
public static bool IsInvertedFNLock() public static bool IsInvertedFNLock()
@@ -459,7 +432,7 @@ public static class AppConfig
public static bool IsOLED() public static bool IsOLED()
{ {
return ContainsModel("OLED") || IsSlash() || ContainsModel("M7600") || ContainsModel("UX64") || ContainsModel("UX34") || ContainsModel("UX53") || ContainsModel("K360") || ContainsModel("X150") || ContainsModel("M350") || ContainsModel("K650") || ContainsModel("UM53") || ContainsModel("K660") || ContainsModel("UX84") || ContainsModel("M650") || ContainsModel("M550") || ContainsModel("K340") || ContainsModel("K350") || ContainsModel("M140") || ContainsModel("UM340") || ContainsModel("S540") || ContainsModel("M7400") || ContainsModel("N650") || ContainsModel("HN7306") || ContainsModel("H7606") || ContainsModel("UX5406") || ContainsModel("M5606"); return ContainsModel("OLED") || IsSlash() || ContainsModel("M7600") || ContainsModel("UX64") || ContainsModel("UX34") || ContainsModel("UX53") || ContainsModel("K360") || ContainsModel("X150") || ContainsModel("M350") || ContainsModel("K650") || ContainsModel("UM53") || ContainsModel("K660") || ContainsModel("UX84") || ContainsModel("M650") || ContainsModel("K340") || ContainsModel("K350") || ContainsModel("M140") || ContainsModel("UM340") || ContainsModel("S540") || ContainsModel("M7400") || ContainsModel("N650");
} }
public static bool IsNoOverdrive() public static bool IsNoOverdrive()
@@ -509,12 +482,12 @@ public static class AppConfig
public static bool NoWMI() public static bool NoWMI()
{ {
return ContainsModel("GL704G") || ContainsModel("GM501G") || ContainsModel("GX501G"); return ContainsModel("GL704G") || ContainsModel("GM501G");
} }
public static bool IsNoDirectRGB() public static bool IsNoDirectRGB()
{ {
return ContainsModel("GA503") || ContainsModel("G533Q") || ContainsModel("GU502") || ContainsModel("GU603") || IsSlash(); return ContainsModel("GA503") || ContainsModel("G533Q") || ContainsModel("GU502") || IsSlash();
} }
public static bool IsStrixNumpad() public static bool IsStrixNumpad()
@@ -625,12 +598,12 @@ public static class AppConfig
public static bool IsFanRequired() public static bool IsFanRequired()
{ {
return ContainsModel("GA402X") || ContainsModel("G513") || ContainsModel("G713R") || ContainsModel("G713P") || ContainsModel("GU605") || ContainsModel("GA605") || ContainsModel("GA403") || ContainsModel("G634J") || ContainsModel("G834J") || ContainsModel("G614J") || ContainsModel("G814J") || ContainsModel("FX507V"); return ContainsModel("GA402X") || ContainsModel("G513") || ContainsModel("G713R") || ContainsModel("G713P") || ContainsModel("GU605") || ContainsModel("GA403") || ContainsModel("G634J") || ContainsModel("G834J") || ContainsModel("G614J") || ContainsModel("G814J") || ContainsModel("FX507V");
} }
public static bool IsAMDLight() public static bool IsAMDLight()
{ {
return ContainsModel("GA402X") || ContainsModel("GA605") || ContainsModel("GA403") || ContainsModel("FA507N") || ContainsModel("FA507X") || ContainsModel("FA707N") || ContainsModel("FA707X"); return ContainsModel("GA402X") || ContainsModel("GA403") || ContainsModel("FA507N") || ContainsModel("FA507X") || ContainsModel("FA707N") || ContainsModel("FA707X");
} }
public static bool IsPowerRequired() public static bool IsPowerRequired()
@@ -645,7 +618,7 @@ public static class AppConfig
public static bool IsForceSetGPUMode() public static bool IsForceSetGPUMode()
{ {
return Is("gpu_mode_force_set") || (ContainsModel("503") && IsNotFalse("gpu_mode_force_set")); return Is("gpu_mode_force_set") || ContainsModel("503");
} }
public static bool IsNoGPUModes() public static bool IsNoGPUModes()
@@ -653,11 +626,6 @@ public static class AppConfig
return ContainsModel("GV301RA") || ContainsModel("GV302XA") || IsAlly(); return ContainsModel("GV301RA") || ContainsModel("GV302XA") || IsAlly();
} }
public static bool NoGpu()
{
return Is("no_gpu") || ContainsModel("UX540");
}
public static bool IsHardwareTouchpadToggle() public static bool IsHardwareTouchpadToggle()
{ {
return ContainsModel("FA507"); return ContainsModel("FA507");
@@ -701,22 +669,12 @@ public static class AppConfig
// 2024 Models support Dynamic Lighting // 2024 Models support Dynamic Lighting
public static bool IsDynamicLighting() public static bool IsDynamicLighting()
{ {
return IsSlash() || IsIntelHX() || IsTUF(); return IsSlash() || IsIntelHX() || ContainsModel("FA607P") || ContainsModel("FX607J") || ContainsModel("FA507U");
} }
public static bool IsForceMiniled() public static bool IsForceMiniled()
{ {
return ContainsModel("G834JYR") || ContainsModel("G834JZR") || Is("force_miniled"); return ContainsModel("G834JYR") || Is("force_miniled");
} }
public static bool SaveDimming()
{
return Is("save_dimming");
}
public static bool IsAutoStatusLed()
{
return Is("auto_status_led");
}
} }

View File

@@ -46,7 +46,7 @@ public class AsusACPI
public const int KB_TouchpadToggle = 0x6b; public const int KB_TouchpadToggle = 0x6b;
public const int KB_MuteToggle = 0x7c; public const int KB_MuteToggle = 0x7c;
public const int KB_FNlockToggle = 0x4e; public const int KB_NumlockToggle = 0x4e;
public const int KB_DUO_PgUpDn = 0x4B; public const int KB_DUO_PgUpDn = 0x4B;
public const int KB_DUO_SecondDisplay = 0x6A; public const int KB_DUO_SecondDisplay = 0x6A;
@@ -114,11 +114,8 @@ public class AsusACPI
public const int APU_MEM = 0x000600C1; public const int APU_MEM = 0x000600C1;
public const int TUF_KB_BRIGHTNESS = 0x00050021; public const int TUF_KB_BRIGHTNESS = 0x00050021;
public const int KBD_BACKLIGHT_OOBE = 0x0005002F;
public const int TUF_KB = 0x00100056; public const int TUF_KB = 0x00100056;
public const int TUF_KB2 = 0x0010005a; public const int TUF_KB2 = 0x0010005a;
public const int TUF_KB_STATE = 0x00100057; public const int TUF_KB_STATE = 0x00100057;
public const int MicMuteLed = 0x00040017; public const int MicMuteLed = 0x00040017;
@@ -129,7 +126,6 @@ public class AsusACPI
public const int ScreenPadToggle = 0x00050031; public const int ScreenPadToggle = 0x00050031;
public const int ScreenPadBrightness = 0x00050032; public const int ScreenPadBrightness = 0x00050032;
public const int CameraShutter = 0x00060078;
public const int CameraLed = 0x00060079; public const int CameraLed = 0x00060079;
public const int StatusLed = 0x000600C2; public const int StatusLed = 0x000600C2;
@@ -789,7 +785,6 @@ public class AsusACPI
{ {
int param = 0x80 | (brightness & 0x7F); int param = 0x80 | (brightness & 0x7F);
DeviceSet(TUF_KB_BRIGHTNESS, param, "TUF Brightness"); DeviceSet(TUF_KB_BRIGHTNESS, param, "TUF Brightness");
} }
public void TUFKeyboardRGB(AuraMode mode, Color color, int speed, string? log = "TUF RGB") public void TUFKeyboardRGB(AuraMode mode, Color color, int speed, string? log = "TUF RGB")
@@ -805,13 +800,7 @@ public class AsusACPI
setting[5] = (byte)speed; setting[5] = (byte)speed;
int result = DeviceSet(TUF_KB, setting, log); int result = DeviceSet(TUF_KB, setting, log);
if (result != 1) if (result != 1) DeviceSet(TUF_KB2, setting, log);
{
setting[0] = (byte)0xb3;
DeviceSet(TUF_KB2, setting, log);
setting[0] = (byte)0xb4;
DeviceSet(TUF_KB2, setting, log);
}
} }
@@ -831,7 +820,6 @@ public class AsusACPI
state = state | 0x01 << 8; state = state | 0x01 << 8;
DeviceSet(TUF_KB_STATE, state, "TUF_KB"); DeviceSet(TUF_KB_STATE, state, "TUF_KB");
if (AppConfig.IsVivoZenPro() && DeviceGet(KBD_BACKLIGHT_OOBE) >= 0) DeviceSet(KBD_BACKLIGHT_OOBE, 1, "VIVO OOBE");
} }
public void SubscribeToEvents(Action<object, EventArrivedEventArgs> EventHandler) public void SubscribeToEvents(Action<object, EventArrivedEventArgs> EventHandler)

View File

@@ -326,8 +326,7 @@ namespace GHelper
return; return;
} }
var index = comboBoxLightingMode.SelectedIndex; LightingMode lm = supportedLightingModes[comboBoxLightingMode.SelectedIndex];
LightingMode lm = supportedLightingModes[index < supportedLightingModes.Count ? index : 0 ];
LightingSetting? ls = mouse.LightingSettingForZone(visibleZone); LightingSetting? ls = mouse.LightingSettingForZone(visibleZone);
if (ls.LightingMode == lm) if (ls.LightingMode == lm)

View File

@@ -145,7 +145,7 @@ namespace GHelper.AutoUpdate
Logger.WriteLine(ex.Message); Logger.WriteLine(ex.Message);
} }
Application.Exit(); Environment.Exit(0);
} }
} }

View File

@@ -2,46 +2,31 @@
namespace GHelper.Battery namespace GHelper.Battery
{ {
public static class BatteryControl internal class BatteryControl
{ {
static bool _chargeFull = AppConfig.Is("charge_full");
public static bool chargeFull
{
get
{
return _chargeFull;
}
set
{
AppConfig.Set("charge_full", value ? 1 : 0);
_chargeFull = value;
}
}
public static void ToggleBatteryLimitFull() public static void ToggleBatteryLimitFull()
{ {
if (chargeFull) SetBatteryChargeLimit(); if (AppConfig.Is("charge_full")) SetBatteryChargeLimit();
else SetBatteryLimitFull(); else SetBatteryLimitFull();
} }
public static void SetBatteryLimitFull() public static void SetBatteryLimitFull()
{ {
chargeFull = true; AppConfig.Set("charge_full", 1);
Program.acpi.DeviceSet(AsusACPI.BatteryLimit, 100, "BatteryLimit"); Program.acpi.DeviceSet(AsusACPI.BatteryLimit, 100, "BatteryLimit");
Program.settingsForm.VisualiseBatteryFull(); Program.settingsForm.VisualiseBatteryFull();
} }
public static void UnSetBatteryLimitFull() public static void UnSetBatteryLimitFull()
{ {
chargeFull = false; AppConfig.Set("charge_full", 0);
Logger.WriteLine("Battery fully charged");
Program.settingsForm.Invoke(Program.settingsForm.VisualiseBatteryFull); Program.settingsForm.Invoke(Program.settingsForm.VisualiseBatteryFull);
} }
public static void AutoBattery(bool init = false) public static void AutoBattery(bool init = false)
{ {
if (chargeFull && !init) SetBatteryLimitFull(); if (AppConfig.Is("charge_full") && !init) SetBatteryLimitFull();
else SetBatteryChargeLimit(); else SetBatteryChargeLimit();
} }
@@ -53,15 +38,14 @@ namespace GHelper.Battery
if (AppConfig.IsChargeLimit6080()) if (AppConfig.IsChargeLimit6080())
{ {
if (limit > 85) limit = 100; if (limit > 80) limit = 100;
else if (limit >= 80) limit = 80;
else if (limit < 60) limit = 60; else if (limit < 60) limit = 60;
} }
Program.acpi.DeviceSet(AsusACPI.BatteryLimit, limit, "BatteryLimit"); Program.acpi.DeviceSet(AsusACPI.BatteryLimit, limit, "BatteryLimit");
AppConfig.Set("charge_limit", limit); AppConfig.Set("charge_limit", limit);
chargeFull = false; AppConfig.Set("charge_full", 0);
Program.settingsForm.VisualiseBattery(limit); Program.settingsForm.VisualiseBattery(limit);
} }

View File

@@ -13,28 +13,19 @@ namespace GHelper.Display
var profiles = new Dictionary<string, string>() var profiles = new Dictionary<string, string>()
{ {
{"FA_Series", "2177-APOR41-de476ec68578c865e886ef6872aa56ee.zip"}, {"FA_Series", "2177-APOR41-de476ec68578c865e886ef6872aa56ee.zip"},
{"FA401UI", "19767-N39QWK-05990dae2bf601e9db8b998bfad49f57.zip"},
{"FA401UU", "19768-K9LFCV-5224d6f68051d884a3adaa588e6300c3.zip"},
{"FA401UV", "19769-8MSQD6-d06ff0a176407b4eaeed468a3bff2bc1.zip"},
{"FA401WI", "19937-J3GRCD-e37d8c1557b9f11d8fb493a78b50fe2d.zip"},
{"FA401WU", "19938-5PIL7F-a3c8522c89e03fc25e2f7290ee5c5f22.zip"},
{"FA401WV", "19939-KIX4CK-3462e49f2c6388228b427b85332538b7.zip"},
{"FA506IC", "7822-ZGQ1KC-bc80be3be7ca585bef60f526b6461c86.zip"}, {"FA506IC", "7822-ZGQ1KC-bc80be3be7ca585bef60f526b6461c86.zip"},
{"FA506ICB", "13914-2HYCD7-95fabfe5669a204620517f0158c0cea1.zip"}, {"FA506ICB", "13914-2HYCD7-95fabfe5669a204620517f0158c0cea1.zip"},
{"FA506IE", "7828-57N8GH-9fe07a7e4ebde12a8d4682d3ffa66fe4.zip"}, {"FA506IE", "7828-57N8GH-9fe07a7e4ebde12a8d4682d3ffa66fe4.zip"},
{"FA506IEB", "14661-ZYWH5T-3b45ebeb7fca81d98796d5960e11226c.zip"}, {"FA506IEB", "14661-ZYWH5T-3b45ebeb7fca81d98796d5960e11226c.zip"},
{"FA506IH", "3407-VZBOUN-8a12385fa46e077010677d330e9320d5.zip"}, {"FA506IH", "3407-VZBOUN-8a12385fa46e077010677d330e9320d5.zip"},
{"FA506IHR", "7823-15HGA0-44d621a3c0f0dd2c407f67d262871be0.zip"}, {"FA506IHR", "7823-15HGA0-44d621a3c0f0dd2c407f67d262871be0.zip"},
{"FA506IHRB", "19343-MBMUPH-190cdb28402ba8efd3e11561c9b2eeb9.zip"},
{"FA506II", "3410-9ZXQO2-aa08794537699c5dbfcca49b63fb7f8d.zip"}, {"FA506II", "3410-9ZXQO2-aa08794537699c5dbfcca49b63fb7f8d.zip"},
{"FA506IM", "7824-EKKW9A-21c7e073a81fc868b78e605b17290839.zip"}, {"FA506IM", "7824-EKKW9A-21c7e073a81fc868b78e605b17290839.zip"},
{"FA506IR", "7825-G6XND9-c16ea7e98b58e878c61d1071b100ee60.zip"}, {"FA506IR", "7825-G6XND9-c16ea7e98b58e878c61d1071b100ee60.zip"},
{"FA506IU", "3413-AMCR39-2a8b889a8810da4e8692f87e1ae3ea2c.zip"}, {"FA506IU", "3413-AMCR39-2a8b889a8810da4e8692f87e1ae3ea2c.zip"},
{"FA506IV", "3415-VA0CJ6-266febe84bcecc5ed89fdc286f444ce2.zip"}, {"FA506IV", "3415-VA0CJ6-266febe84bcecc5ed89fdc286f444ce2.zip"},
{"FA506NC", "18359-BM2XCN-3ca9de427310b05afa92dcbe1babf947.zip"}, {"FA506NC", "18359-BM2XCN-3ca9de427310b05afa92dcbe1babf947.zip"},
{"FA506NCR", "19230-KJ866Z-1980e6f6a843b6b31111e38973fa1cda.zip"},
{"FA506NF", "18361-CU7H6I-55beba8445b9aa0fe9cbeb8ec9a47ccf.zip"}, {"FA506NF", "18361-CU7H6I-55beba8445b9aa0fe9cbeb8ec9a47ccf.zip"},
{"FA506NFR", "19231-GARR16-f7052f6be62ddce2048ebcd6ba808563.zip"},
{"FA506QC", "7829-LBYY5U-b14343c260b738563b69ad0e4f4b88d1.zip"}, {"FA506QC", "7829-LBYY5U-b14343c260b738563b69ad0e4f4b88d1.zip"},
{"FA506QE", "7827-75P3DP-b664f4da04e77ed1faa722bf0c781d82.zip"}, {"FA506QE", "7827-75P3DP-b664f4da04e77ed1faa722bf0c781d82.zip"},
{"FA506QM", "9440-87VQKP-48357026f1f3099cfed1161a320587f0.zip"}, {"FA506QM", "9440-87VQKP-48357026f1f3099cfed1161a320587f0.zip"},
@@ -42,9 +33,9 @@ namespace GHelper.Display
{"FA507NI", "14451-N6AX9R-0bc8e15be5cf889c755aaa7052f6fee8.zip"}, {"FA507NI", "14451-N6AX9R-0bc8e15be5cf889c755aaa7052f6fee8.zip"},
{"FA507NJ", "14454-QXKHOE-d28f2eb001f9b7ce0582cbe33961a6ad.zip"}, {"FA507NJ", "14454-QXKHOE-d28f2eb001f9b7ce0582cbe33961a6ad.zip"},
{"FA507NU", "14452-EZXLVF-c64dd3d7efede78df653b029888d9d04.zip"}, {"FA507NU", "14452-EZXLVF-c64dd3d7efede78df653b029888d9d04.zip"},
{"FA507NUR", "19358-JYO79G-f8bc53beeadfdfef80dc6a4eb85c69e2.zip"}, {"FA507NUR", "18871-WR3YMP-6cbcd0502eb9bf200465e36c4de8c9fd.zip"},
{"FA507NV", "14453-VC333P-41549f64788d59c9711eccec892fa8c1.zip"}, {"FA507NV", "14453-VC333P-41549f64788d59c9711eccec892fa8c1.zip"},
{"FA507NVR", "19359-YWEAES-37feeb146db89c3549bac528d67ae209.zip"}, {"FA507NVR", "18872-HVR4UY-220dc7f3f73cf12b2af2505db6ce67ab.zip"},
{"FA507RC", "11448-0TRT8V-7712eb9302300dd82815027efbbe4787.zip"}, {"FA507RC", "11448-0TRT8V-7712eb9302300dd82815027efbbe4787.zip"},
{"FA507RE", "11449-ONC7VG-a7ac70468292336f63532c21204d69d4.zip"}, {"FA507RE", "11449-ONC7VG-a7ac70468292336f63532c21204d69d4.zip"},
{"FA507RF", "14311-X72FIU-66bf16069a82bdf2cc09f8b92cb25c67.zip"}, {"FA507RF", "14311-X72FIU-66bf16069a82bdf2cc09f8b92cb25c67.zip"},
@@ -59,24 +50,17 @@ namespace GHelper.Display
{"FA507XJ", "14820-8RT0TF-9d341fae2a290494206deb5fcf1fd427.zip"}, {"FA507XJ", "14820-8RT0TF-9d341fae2a290494206deb5fcf1fd427.zip"},
{"FA507XU", "14818-3PA2GD-2d1e2d035309ec7282a1c47e27f7c7fd.zip"}, {"FA507XU", "14818-3PA2GD-2d1e2d035309ec7282a1c47e27f7c7fd.zip"},
{"FA507XV", "14819-ET4L73-daf905274776ae9c92a7b74e687dc63d.zip"}, {"FA507XV", "14819-ET4L73-daf905274776ae9c92a7b74e687dc63d.zip"},
{"FA607NU", "20567-VB45RR-ceeec88490fec992f2f8948ece38952e.zip"}, {"FA607PI", "17579-FL63B4-df08bf92fe3c156ce738e43de7824d65.zip"},
{"FA607NUR", "20570-XEDISK-5e1220f6a19492a3e6319697497deaa3.zip"}, {"FA607PU", "17580-WM413K-eff7721ca9ec5b633ef196dbfcd58ff2.zip"},
{"FA607PI", "19157-PL5PW6-2fde4880a46a6b7357d96eaa7a4ec946.zip"}, {"FA607PV", "17581-JNXO2Q-15d026a4ae630d44b28c18aee0a99e51.zip"},
{"FA607PU", "19158-AWQ1FA-f1ed2d008bef71741a9b09b35730b9e7.zip"},
{"FA607PV", "19159-V6UKPP-92f56a3aa89b834d1ab12f229a8ae1a7.zip"},
{"FA607RC", "10190-XHDRTQ-0e6c248e3dab6bb07e052edd963c5218.zip"}, {"FA607RC", "10190-XHDRTQ-0e6c248e3dab6bb07e052edd963c5218.zip"},
{"FA607RE", "10194-AF495K-23a4d74be5132e4babc64bb13237a12b.zip"}, {"FA607RE", "10194-AF495K-23a4d74be5132e4babc64bb13237a12b.zip"},
{"FA607RH", "10191-9BS333-c6deb5f9fd5a37d446d2722da54c0ec3.zip"}, {"FA607RH", "10191-9BS333-c6deb5f9fd5a37d446d2722da54c0ec3.zip"},
{"FA607RM", "10195-4U5EEF-cf98d168cacdd5a60782e881a9c143be.zip"}, {"FA607RM", "10195-4U5EEF-cf98d168cacdd5a60782e881a9c143be.zip"},
{"FA607RR", "10193-FYX2N7-730c76e49ef71a6164804eafd2621dab.zip"}, {"FA607RR", "10193-FYX2N7-730c76e49ef71a6164804eafd2621dab.zip"},
{"FA607RW", "10192-UFOOP3-f52a50dac189ffa96560f73e04c53a6c.zip"}, {"FA607RW", "10192-UFOOP3-f52a50dac189ffa96560f73e04c53a6c.zip"},
{"FA608WI", "20103-UE0O65-d6707b2a2f666d671d728661c981883a.zip"}, {"FA617NS", "15967-YKHJ0B-89095e43578e64c160d2952bb14513f2.zip"},
{"FA608WU", "20102-IQVJL2-edc900ffe25635856729d26dbeac272f.zip"}, {"FA617NT", "15970-C1BW39-2ef1c5d5d9a967cf2fc1f511d3db3a43.zip"},
{"FA608WV", "20104-EE3Q5U-a7695b4d1668b1a8dda2576f64bffad2.zip"},
{"FA617NS", "20225-0J8FEF-cb6ef3732560ed38542d5047e78596f0.zip"},
{"FA617NSR", "20226-B5TAVP-f153443e85ccad055fa12d58eec69c5c.zip"},
{"FA617NT", "20224-YN6NKP-1d0e927ae5c1bb7d15e36b63176460e2.zip"},
{"FA617NTR", "20227-KL8UNI-2b4063b7a52b142fb75e9136570afbf9.zip"},
{"FA617XS", "15968-Y9NFXN-cb420fe6e177fc1cf675e9d42a6fd0ea.zip"}, {"FA617XS", "15968-Y9NFXN-cb420fe6e177fc1cf675e9d42a6fd0ea.zip"},
{"FA617XT", "15969-UKYP5L-ad54051ebbad4b17693b65f5bceda799.zip"}, {"FA617XT", "15969-UKYP5L-ad54051ebbad4b17693b65f5bceda799.zip"},
{"FA706IC", "5215-5J3H5Y-d2cdc2f5e03d68e5e5e562581a77c8e6.zip"}, {"FA706IC", "5215-5J3H5Y-d2cdc2f5e03d68e5e5e562581a77c8e6.zip"},
@@ -88,7 +72,6 @@ namespace GHelper.Display
{"FA706IR", "8825-63J2NY-2496ecf21b5fa71e65671531b670cdac.zip"}, {"FA706IR", "8825-63J2NY-2496ecf21b5fa71e65671531b670cdac.zip"},
{"FA706IU", "2608-EI64MF-64c35bda7789e6e71298e22d793b78d4.zip"}, {"FA706IU", "2608-EI64MF-64c35bda7789e6e71298e22d793b78d4.zip"},
{"FA706NF", "18362-1V7Z1Z-0bc79f01bdfadc5b39342fba622a5b8d.zip"}, {"FA706NF", "18362-1V7Z1Z-0bc79f01bdfadc5b39342fba622a5b8d.zip"},
{"FA706NFR", "19232-FE6TXN-d062445db610ce901453145ebc518efe.zip"},
{"FA706QC", "8826-032S4E-868933565b1a7d762bda8cafc1e77458.zip"}, {"FA706QC", "8826-032S4E-868933565b1a7d762bda8cafc1e77458.zip"},
{"FA706QE", "8824-KZNJL9-9d827f4973d4c9787ff050dc1bf35eef.zip"}, {"FA706QE", "8824-KZNJL9-9d827f4973d4c9787ff050dc1bf35eef.zip"},
{"FA706QM", "8830-6NX7U4-b7bbfe663aa954534d33d2f822181728.zip"}, {"FA706QM", "8830-6NX7U4-b7bbfe663aa954534d33d2f822181728.zip"},
@@ -96,9 +79,7 @@ namespace GHelper.Display
{"FA707NI", "14455-19J6WZ-10282c6083ee018a614e75bc809ecf1f.zip"}, {"FA707NI", "14455-19J6WZ-10282c6083ee018a614e75bc809ecf1f.zip"},
{"FA707NJ", "14457-BGJD0K-d963ff94009c9a2a5b99606eac711a95.zip"}, {"FA707NJ", "14457-BGJD0K-d963ff94009c9a2a5b99606eac711a95.zip"},
{"FA707NU", "14456-VAZ4LS-1d798d3873c55e9d10b43a3f2b12cd15.zip"}, {"FA707NU", "14456-VAZ4LS-1d798d3873c55e9d10b43a3f2b12cd15.zip"},
{"FA707NUR", "20568-IPF4CY-f7bd11b80ffa20b77b75e6a89213db48.zip"},
{"FA707NV", "14458-7G8B40-08117ddb45ed3c6978aa4ad60e3d2c96.zip"}, {"FA707NV", "14458-7G8B40-08117ddb45ed3c6978aa4ad60e3d2c96.zip"},
{"FA707NVR", "20569-1MFNC4-e41979f29c26628eacf1e9067dd3544d.zip"},
{"FA707RC", "10196-81D3O0-94ccf4d908c9bcb44f8f9092ef9fa2e2.zip"}, {"FA707RC", "10196-81D3O0-94ccf4d908c9bcb44f8f9092ef9fa2e2.zip"},
{"FA707RE", "10200-AUS9AW-7f366055be2ae2b4c659aa9590bb4d5e.zip"}, {"FA707RE", "10200-AUS9AW-7f366055be2ae2b4c659aa9590bb4d5e.zip"},
{"FA707RF", "14312-6KGU80-09ba6d3e3b490c3d1dce3d16df62cd8a.zip"}, {"FA707RF", "14312-6KGU80-09ba6d3e3b490c3d1dce3d16df62cd8a.zip"},
@@ -111,9 +92,6 @@ namespace GHelper.Display
{"FA707XJ", "14823-MX6CGK-0d0862cd441f96a72b1c8baeaa8aa3b4.zip"}, {"FA707XJ", "14823-MX6CGK-0d0862cd441f96a72b1c8baeaa8aa3b4.zip"},
{"FA707XU", "14824-O2LZZA-f0ea2bf54bbc4fd4e7391048f4a083e4.zip"}, {"FA707XU", "14824-O2LZZA-f0ea2bf54bbc4fd4e7391048f4a083e4.zip"},
{"FA707XV", "14825-DUSKD1-7d0a055d869a7366105380c44788724b.zip"}, {"FA707XV", "14825-DUSKD1-7d0a055d869a7366105380c44788724b.zip"},
{"FA808WI", "19512-TZ3G4D-60c6849ce49cca1d2177f31ead77df5a.zip"},
{"FA808WU", "19510-ASGCD8-0558641c1b976b901c52d1d72f0bddd7.zip"},
{"FA808WV", "19511-QDVPAJ-f3990996e7a9c0d472b46af286d529f1.zip"},
{"FX_Series", "2174-J1XJKV-bd932ade5eebb0b2f1a36eac85bc5c7d.zip"}, {"FX_Series", "2174-J1XJKV-bd932ade5eebb0b2f1a36eac85bc5c7d.zip"},
{"FX505DD", "3439-CJLCNE-3df3a90619c571de2917a35a402fe6cb.zip"}, {"FX505DD", "3439-CJLCNE-3df3a90619c571de2917a35a402fe6cb.zip"},
{"FX505DT", "3427-H77L9I-2f3f50fbbb1dc4ac6e703b2820acb491.zip"}, {"FX505DT", "3427-H77L9I-2f3f50fbbb1dc4ac6e703b2820acb491.zip"},
@@ -165,18 +143,15 @@ namespace GHelper.Display
{"FX517ZM", "13759-694BOG-7b8f61a1d8a387715721fd2b8e0bd766.zip"}, {"FX517ZM", "13759-694BOG-7b8f61a1d8a387715721fd2b8e0bd766.zip"},
{"FX517ZR", "11463-MCHEWS-7a732705aea49eb663fe1e8930c463de.zip"}, {"FX517ZR", "11463-MCHEWS-7a732705aea49eb663fe1e8930c463de.zip"},
{"FX517ZW", "11464-S41ORA-d99633ecf421ba4ab73800bc9ebf2e5b.zip"}, {"FX517ZW", "11464-S41ORA-d99633ecf421ba4ab73800bc9ebf2e5b.zip"},
{"FX607JI", "19085-6NMHTY-9137eab4a853f284c0ac1f8890735c7b.zip"}, {"FX607JI", "17739-YJBJMA-59c984b28eeb6c02498190f768b12b52.zip"},
{"FX607JIR", "19088-H9SUHL-c75a1547f17e7c69e0a870425d3592b8.zip"}, {"FX607JIR", "17740-78V0QP-43bf1ea30f94d3d3a286f42dd90a1816.zip"},
{"FX607JU", "19086-N1S5J4-c4fc8458bcbefa107fc1c2e1dbe44255.zip"}, {"FX607JU", "17744-JEFX0I-f1ee2104c17a5cc511efefa3dc7b9601.zip"},
{"FX607JUR", "19087-ZBS95F-bc3055487fdc07870c12341042a37222.zip"}, {"FX607JUR", "17743-A2JS5H-224a1f32f7dbfecb0d6b91fdb6ffac8e.zip"},
{"FX607JV", "19089-LLP8ZE-c52cc4765390eba2eae3c798a367df25.zip"}, {"FX607JV", "17741-OWALZC-eb293a03c7b4595270939bccfe891656.zip"},
{"FX607JVR", "19090-XQYJEH-a5aaa078def637077c4d1d3a619ae198.zip"}, {"FX607JVR", "17742-3OOC7N-f28635b55ce56f9e32672b2e409a075c.zip"},
{"FX607VB", "20704-FGKI8R-ac8a18cb35a009bcdb6d18ec7537879a.zip"},
{"FX607VF", "20706-OMC7L2-e66289430eb7decd16fe4c6353edb8c4.zip"},
{"FX607VI", "14072-0Z0LX5-c3145816b5c9b045a3e829e194425624.zip"}, {"FX607VI", "14072-0Z0LX5-c3145816b5c9b045a3e829e194425624.zip"},
{"FX607VJ", "14073-H1KA78-95472184994955393ebf635af4a55c71.zip"}, {"FX607VJ", "14073-H1KA78-95472184994955393ebf635af4a55c71.zip"},
{"FX607VU", "20707-N1HJ0V-31f1da0a565763c625714c39b7bb5bae.zip"}, {"FX607VU", "14074-RCMD10-b606bf5fd03bdf6a8aef412202de86ff.zip"},
{"FX607VUR", "20705-ON83H2-dd9e78d43fb57f06d0e8ef0d9d1e849e.zip"},
{"FX607VV", "14075-BX4NJX-a9e24be091f08e6cc3885397f143bdc5.zip"}, {"FX607VV", "14075-BX4NJX-a9e24be091f08e6cc3885397f143bdc5.zip"},
{"FX607ZC", "9267-SQXQMT-edf1ee77d7f276d9b2f14fbe80e86459.zip"}, {"FX607ZC", "9267-SQXQMT-edf1ee77d7f276d9b2f14fbe80e86459.zip"},
{"FX607ZE", "9268-MI06A0-5f60b76f497adb2c80dc5d34e7ca00ef.zip"}, {"FX607ZE", "9268-MI06A0-5f60b76f497adb2c80dc5d34e7ca00ef.zip"},
@@ -262,14 +237,14 @@ namespace GHelper.Display
{"G533ZX", "11729-XNFMPR-e0aad4e4d4956dba8629f419b1f86026.zip"}, {"G533ZX", "11729-XNFMPR-e0aad4e4d4956dba8629f419b1f86026.zip"},
{"G614JF", "14496-NAATJZ-a3847e890e57aa749645b854b28ead79.zip"}, {"G614JF", "14496-NAATJZ-a3847e890e57aa749645b854b28ead79.zip"},
{"G614JI", "14168-4VTU0U-37decb2df809672eccf1156769eda929.zip"}, {"G614JI", "14168-4VTU0U-37decb2df809672eccf1156769eda929.zip"},
{"G614JIR", "19126-IMXGO5-4cce9f45ad28fa60d016f8d212c50b10.zip"}, {"G614JIR", "18120-52TT5M-28a5c8e138ed1660e9eadc81121f789a.zip"},
{"G614JJ", "14497-P0D5PL-abe178509e0316da9ee56b24e15d0384.zip"}, {"G614JJ", "14497-P0D5PL-abe178509e0316da9ee56b24e15d0384.zip"},
{"G614JU", "14498-5D71EB-2300be03087494ee34356470ca022b7c.zip"}, {"G614JU", "14498-5D71EB-2300be03087494ee34356470ca022b7c.zip"},
{"G614JV", "14500-SPJCAL-a8e2e223857c334ba4c20c8122151bb7.zip"}, {"G614JV", "14500-SPJCAL-a8e2e223857c334ba4c20c8122151bb7.zip"},
{"G614JVR", "19129-EA1WB4-4666564ee013c4df53be44bcdd20bec0.zip"}, {"G614JVR", "18121-2WOF0H-4e7045c7a210693fef2b99b8e032316b.zip"},
{"G614JZ", "18199-P9WWOH-093d361358629a2bddd5bff7b5fb7a5f.zip"}, {"G614JZ", "18199-P9WWOH-093d361358629a2bddd5bff7b5fb7a5f.zip"},
{"G634JY", "14163-JLRBOO-8ea519425efe56cc144e38d22cebd3f0.zip"}, {"G634JY", "14163-JLRBOO-8ea519425efe56cc144e38d22cebd3f0.zip"},
{"G634JYR", "19130-MUAT65-0eced7ca55a61cc41341faa3a48d34f3.zip"}, {"G634JYR", "18087-6Z1W8Q-cd92004b6b9392e2cf07317db8ca9c6d.zip"},
{"G634JZ", "15827-MSW5I1-0f39e92313e54afe3e35f5636dc37fd5.zip"}, {"G634JZ", "15827-MSW5I1-0f39e92313e54afe3e35f5636dc37fd5.zip"},
{"G634JZR", "17891-O7PAGL-5c6e6d059ff7bc1b9245fdf8a8066263.zip"}, {"G634JZR", "17891-O7PAGL-5c6e6d059ff7bc1b9245fdf8a8066263.zip"},
{"G703GX", "105-NMT9XG-76a0810ddf16ee376fa049bd179377fc.zip"}, {"G703GX", "105-NMT9XG-76a0810ddf16ee376fa049bd179377fc.zip"},
@@ -322,15 +297,15 @@ namespace GHelper.Display
{"G733ZW", "10080-HY42QH-aa285046069cfe113953b91f1a28d101.zip"}, {"G733ZW", "10080-HY42QH-aa285046069cfe113953b91f1a28d101.zip"},
{"G733ZX", "10082-JS5F1Y-41bccc831aec7bf1c0a59a309bc607c7.zip"}, {"G733ZX", "10082-JS5F1Y-41bccc831aec7bf1c0a59a309bc607c7.zip"},
{"G814JI", "18243-BAU912-671afb033d3b1c44f9852ff608910f42.zip"}, {"G814JI", "18243-BAU912-671afb033d3b1c44f9852ff608910f42.zip"},
{"G814JIR", "19802-1CGBPH-f1d31bab157b36d109e1e10591d49f4b.zip"}, {"G814JIR", "17315-02XE3O-7a00ed5b91bc305aade5a1830691d0d6.zip"},
{"G814JU", "18193-Y5GMF0-843cee9ed982a3d5aba21e99efbc396c.zip"}, {"G814JU", "18193-Y5GMF0-843cee9ed982a3d5aba21e99efbc396c.zip"},
{"G814JV", "18194-9Q537I-c5c2ca782d26dcd5346c110767347903.zip"}, {"G814JV", "18194-9Q537I-c5c2ca782d26dcd5346c110767347903.zip"},
{"G814JVR", "19801-JK7M4V-617e0c975bf6e2a6f67802d825fa6aa4.zip"}, {"G814JVR", "17313-P6P61Y-5960dc1d0bd8ba2057bc22aaa8bf89e5.zip"},
{"G814JZ", "18195-V98WBX-19d4c2e52916bf9c96fcaed6f1d9bdda.zip"}, {"G814JZ", "18195-V98WBX-19d4c2e52916bf9c96fcaed6f1d9bdda.zip"},
{"G834JY", "15954-HAV3KR-d219c43750d485279e12cf76f5b2569b.zip"}, {"G834JY", "15954-HAV3KR-d219c43750d485279e12cf76f5b2569b.zip"},
{"G834JYR", "19121-GX7FZU-7c449cf7db0033db75da0f4a464ee4d9.zip"}, {"G834JYR", "17314-YYBQF3-a65b1bc3fd1e8de145dc9d606e8c45c8.zip"},
{"G834JZ", "15953-C7XC62-a987058c0a26fa3c929b300d099296a5.zip"}, {"G834JZ", "15953-C7XC62-a987058c0a26fa3c929b300d099296a5.zip"},
{"G834JZR", "19122-CAYURL-f71108b839d923ae92f3f83451ddfa69.zip"}, {"G834JZR", "17316-AFT379-743360d9b36031d91a72fe03e3fafca0.zip"},
{"GA401IC", "5864-KC8TTP-082f9a62dda322ccaed82ff3e3466bf8.zip"}, {"GA401IC", "5864-KC8TTP-082f9a62dda322ccaed82ff3e3466bf8.zip"},
{"GA401IE", "5866-JO8504-dde5402bdecafc1cef55a7dc3d6167ec.zip"}, {"GA401IE", "5866-JO8504-dde5402bdecafc1cef55a7dc3d6167ec.zip"},
{"GA401IHR", "5865-7DV6TB-9833a54c7334dc3aef1b9e99f56b9e95.zip"}, {"GA401IHR", "5865-7DV6TB-9833a54c7334dc3aef1b9e99f56b9e95.zip"},
@@ -358,9 +333,9 @@ namespace GHelper.Display
{"GA402XV", "14902-EL34M9-731ba1cc0d27d2db9a79d872673e7958.zip"}, {"GA402XV", "14902-EL34M9-731ba1cc0d27d2db9a79d872673e7958.zip"},
{"GA402XY", "14903-ICC56W-0456739d8ba5ee543dfba99eb6ad217a.zip"}, {"GA402XY", "14903-ICC56W-0456739d8ba5ee543dfba99eb6ad217a.zip"},
{"GA402XZ", "14904-B3K2NR-928b7272790e7da0079c549cd4885d5d.zip"}, {"GA402XZ", "14904-B3K2NR-928b7272790e7da0079c549cd4885d5d.zip"},
{"GA403UI", "19112-NB8TJ1-e1de0121e30431cc5520ea6eccb6e46f.zip"}, {"GA403UI", "18084-XTMSW5-6cad333378f3b1059688a419a8422fc1.zip"},
{"GA403UU", "19113-C86SAH-4338dac48ad593c4079515b7599b8943.zip"}, {"GA403UU", "18086-WXV037-ad90bc3f20ff056c45dbbb848fa72a67.zip"},
{"GA403UV", "19114-6KR0FP-4740ed98a2ca06bc26c363de380a037d.zip"}, {"GA403UV", "18085-G56QVI-3f24b5bd1eaa8dd9086b86092cb62ffb.zip"},
{"GA502II", "3554-REAPZQ-5f94c7ecd52ae2cad50aaac4341bec7b.zip"}, {"GA502II", "3554-REAPZQ-5f94c7ecd52ae2cad50aaac4341bec7b.zip"},
{"GA502IU", "3555-15UWZ4-d1cd040265773efd61bdfd146140a990.zip"}, {"GA502IU", "3555-15UWZ4-d1cd040265773efd61bdfd146140a990.zip"},
{"GA502IV", "3556-ULLH3K-1f56134e43e1ffa353256fbeb9840d3f.zip"}, {"GA502IV", "3556-ULLH3K-1f56134e43e1ffa353256fbeb9840d3f.zip"},
@@ -381,9 +356,6 @@ namespace GHelper.Display
{"GA503RS", "11745-689QTC-6c441a7161a34b871918fce5997c4e2e.zip"}, {"GA503RS", "11745-689QTC-6c441a7161a34b871918fce5997c4e2e.zip"},
{"GA503RW", "12055-SG6VTH-91cc5782da63cf3dcc16804a47db25a2.zip"}, {"GA503RW", "12055-SG6VTH-91cc5782da63cf3dcc16804a47db25a2.zip"},
{"GA503RX", "12056-MR9J0D-b7dad63f751d2e53aeee479524986bdd.zip"}, {"GA503RX", "12056-MR9J0D-b7dad63f751d2e53aeee479524986bdd.zip"},
{"GA605WI", "20014-K4K912-2a2e5a66fac3cc97fb13394a189bd75e.zip"},
{"GA605WU", "20015-HJM11B-a724c1fe216b73c0b3b24475047f4615.zip"},
{"GA605WV", "20016-BWVQPK-01624c1cdd5a3c05252bad472fab1240.zip"},
{"GL_Series", "2167-P7ELNB-44d357ee720a0c48c2eb37eee785316c.zip"}, {"GL_Series", "2167-P7ELNB-44d357ee720a0c48c2eb37eee785316c.zip"},
{"GL503GE", "57-YI7HPS-9ed36ba45ff6398f3648a44ced4e5e61.zip"}, {"GL503GE", "57-YI7HPS-9ed36ba45ff6398f3648a44ced4e5e61.zip"},
{"GL504GM", "58-JOZ3S5-998677afd41375cb8fd60ace8d11a788.zip"}, {"GL504GM", "58-JOZ3S5-998677afd41375cb8fd60ace8d11a788.zip"},
@@ -423,11 +395,11 @@ namespace GHelper.Display
{"GU604VI", "14284-R38BM3-e2591bfa2582ce68b2c8aba63beac5e3.zip"}, {"GU604VI", "14284-R38BM3-e2591bfa2582ce68b2c8aba63beac5e3.zip"},
{"GU604VY", "14282-78N7V4-25e76896744c53317fa41a80788a2241.zip"}, {"GU604VY", "14282-78N7V4-25e76896744c53317fa41a80788a2241.zip"},
{"GU604VZ", "14283-U4JX5C-f31dff75d52f48ceca0102fd1bc76e31.zip"}, {"GU604VZ", "14283-U4JX5C-f31dff75d52f48ceca0102fd1bc76e31.zip"},
{"GU605MI", "19271-93QRMU-eab4115ee09fb9bbd86facec08a822a1.zip"}, {"GU605MI", "17935-R3OAJH-55a4fbb2be67a37226accd279357268b.zip"},
{"GU605MU", "19272-RDZDEJ-4380e52eab6a3742613c2f694a19da1e.zip"}, {"GU605MU", "17936-VBZ5PL-ad3a380f62bc87ee738c09c8e5255f91.zip"},
{"GU605MV", "19274-1T9PKS-d05273f430d255ad1779cf6a7eb57db3.zip"}, {"GU605MV", "17938-7DGM0T-caed792b162e94846167888f36fc632e.zip"},
{"GU605MY", "19273-F4A493-2bc9083d99e7827b4580311d34f8998b.zip"}, {"GU605MY", "17937-HZWNQ4-72d9c4fed1b31f188874cd6461ffba83.zip"},
{"GU605MZ", "19275-52DG5X-1072d6f4fdc5b9cbb304da7146f05a79.zip"}, {"GU605MZ", "17939-IEJ2X5-fe077100dc4eafbae46d7eb831a791a8.zip"},
{"GV301QC", "5128-RN42GR-9a6049e7adabd1ff2aeed24293fe03a8.zip"}, {"GV301QC", "5128-RN42GR-9a6049e7adabd1ff2aeed24293fe03a8.zip"},
{"GV301QCZ", "6778-152PHS-7a9ad124aef1059471542dfc8912ed7b.zip"}, {"GV301QCZ", "6778-152PHS-7a9ad124aef1059471542dfc8912ed7b.zip"},
{"GV301QE", "5125-PD15GR-9a7f72cbf5bd97d283464d8e407f0231.zip"}, {"GV301QE", "5125-PD15GR-9a7f72cbf5bd97d283464d8e407f0231.zip"},
@@ -514,7 +486,6 @@ namespace GHelper.Display
{"NR2301L", "14736-3DM4T5-41c1b0b5c2d726da7c66e0c39ea08017.zip"}, {"NR2301L", "14736-3DM4T5-41c1b0b5c2d726da7c66e0c39ea08017.zip"},
{"RC71L", "17126-IIDPFS-718c077a118724bb0045b35e30d5ac4e.zip"}, {"RC71L", "17126-IIDPFS-718c077a118724bb0045b35e30d5ac4e.zip"},
{"RC71X", "15182-KWVC62-c754d9ea39f9160df7e21e4538ce60df.zip"}, {"RC71X", "15182-KWVC62-c754d9ea39f9160df7e21e4538ce60df.zip"},
{"RC72LA", "19770-DOSUSI-85f700513af330af6e20fcfdabaeb87f.zip"},
}; };
if (profiles.ContainsKey(model)) if (profiles.ContainsKey(model))

View File

@@ -16,10 +16,7 @@ namespace GHelper.Display
var modes = new DISPLAYCONFIG_MODE_INFO[modeCount]; var modes = new DISPLAYCONFIG_MODE_INFO[modeCount];
err = QueryDisplayConfig(QDC.QDC_ONLY_ACTIVE_PATHS, ref pathCount, paths, ref modeCount, modes, IntPtr.Zero); err = QueryDisplayConfig(QDC.QDC_ONLY_ACTIVE_PATHS, ref pathCount, paths, ref modeCount, modes, IntPtr.Zero);
if (err != 0) if (err != 0)
{ throw new Win32Exception(err);
Logger.WriteLine("HDR Detection Error: " + new Win32Exception(err).Message);
return false;
}
string internalName = AppConfig.GetString("internal_display"); string internalName = AppConfig.GetString("internal_display");

View File

@@ -6,14 +6,7 @@ namespace GHelper.Display
{ {
public const int MAX_REFRESH = 1000; public const int MAX_REFRESH = 1000;
public static int MIN_RATE = AppConfig.Get("min_rate", 60);
public static int MAX_RATE = AppConfig.Get("max_rate");
public static int GetMaxRate(string? laptopScreen)
{
if (MAX_RATE > 0) return MAX_RATE;
else return ScreenNative.GetMaxRefreshRate(laptopScreen);
}
public void AutoScreen(bool force = false) public void AutoScreen(bool force = false)
{ {
@@ -22,7 +15,7 @@ namespace GHelper.Display
if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online) if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online)
SetScreen(MAX_REFRESH, 1); SetScreen(MAX_REFRESH, 1);
else else
SetScreen(MIN_RATE, 0); SetScreen(60, 0);
} }
else else
{ {
@@ -36,7 +29,7 @@ namespace GHelper.Display
var refreshRate = ScreenNative.GetRefreshRate(laptopScreen); var refreshRate = ScreenNative.GetRefreshRate(laptopScreen);
if (refreshRate < 0) return; if (refreshRate < 0) return;
ScreenNative.SetRefreshRate(laptopScreen, refreshRate > MIN_RATE ? MIN_RATE : GetMaxRate(laptopScreen)); ScreenNative.SetRefreshRate(laptopScreen, refreshRate > 60 ? 60 : ScreenNative.GetMaxRefreshRate(laptopScreen));
InitScreen(); InitScreen();
} }
@@ -50,7 +43,7 @@ namespace GHelper.Display
if (frequency >= MAX_REFRESH) if (frequency >= MAX_REFRESH)
{ {
frequency = GetMaxRate(laptopScreen); frequency = ScreenNative.GetMaxRefreshRate(laptopScreen);
} }
if (frequency > 0 && frequency != refreshRate) if (frequency > 0 && frequency != refreshRate)
@@ -158,7 +151,7 @@ namespace GHelper.Display
{ {
var laptopScreen = ScreenNative.FindLaptopScreen(); var laptopScreen = ScreenNative.FindLaptopScreen();
int frequency = ScreenNative.GetRefreshRate(laptopScreen); int frequency = ScreenNative.GetRefreshRate(laptopScreen);
int maxFrequency = GetMaxRate(laptopScreen); int maxFrequency = ScreenNative.GetMaxRefreshRate(laptopScreen);
if (maxFrequency > 0) AppConfig.Set("max_frequency", maxFrequency); if (maxFrequency > 0) AppConfig.Set("max_frequency", maxFrequency);
else maxFrequency = AppConfig.Get("max_frequency"); else maxFrequency = AppConfig.Get("max_frequency");

View File

@@ -1,5 +1,4 @@
using GHelper.Helpers; using GHelper.Helpers;
using Microsoft.Win32;
using System.Management; using System.Management;
namespace GHelper.Display namespace GHelper.Display
@@ -38,7 +37,6 @@ namespace GHelper.Display
Cinema = 25, Cinema = 25,
Vivid = 13, Vivid = 13,
Eyecare = 17, Eyecare = 17,
Disabled = 18,
} }
public static class VisualControl public static class VisualControl
{ {
@@ -46,7 +44,6 @@ namespace GHelper.Display
private static int _brightness = 100; private static int _brightness = 100;
private static bool _init = true; private static bool _init = true;
private static bool _download = true;
private static string? _splendidPath = null; private static string? _splendidPath = null;
private static System.Timers.Timer brightnessTimer = new System.Timers.Timer(200); private static System.Timers.Timer brightnessTimer = new System.Timers.Timer(200);
@@ -101,7 +98,7 @@ namespace GHelper.Display
foreach (FileInfo icm in icms) foreach (FileInfo icm in icms)
{ {
//Logger.WriteLine(icm.FullName); //Logger.WriteLine(icm.FullName);
if (icm.Name.Contains("sRGB")) if (icm.Name.Contains("sRGB"))
{ {
try try
@@ -109,7 +106,7 @@ namespace GHelper.Display
_modes.Add(isVivo ? SplendidGamut.VivoSRGB : SplendidGamut.sRGB, "Gamut: sRGB"); _modes.Add(isVivo ? SplendidGamut.VivoSRGB : SplendidGamut.sRGB, "Gamut: sRGB");
Logger.WriteLine(icm.FullName + " sRGB"); Logger.WriteLine(icm.FullName + " sRGB");
} }
catch catch
{ {
} }
} }
@@ -177,8 +174,7 @@ namespace GHelper.Display
{ SplendidCommand.FPS, "FPS"}, { SplendidCommand.FPS, "FPS"},
{ SplendidCommand.Cinema, "Cinema"}, { SplendidCommand.Cinema, "Cinema"},
{ SplendidCommand.Vivid, "Vivid" }, { SplendidCommand.Vivid, "Vivid" },
{ SplendidCommand.Eyecare, "Eyecare"}, { SplendidCommand.Eyecare, "Eyecare"}
{ SplendidCommand.Disabled, "Disabled"}
}; };
} }
@@ -208,20 +204,6 @@ namespace GHelper.Display
}; };
} }
const string GameVisualKey = @"HKEY_CURRENT_USER\Software\ASUS\ARMOURY CRATE Service\GameVisual";
const string GameVisualValue = "ActiveGVStatus";
public static bool IsEnabled()
{
var status = (int?)Registry.GetValue(GameVisualKey, GameVisualValue, 1);
return status > 0;
}
public static void SetRegStatus(int status = 1)
{
Registry.SetValue(GameVisualKey, GameVisualValue, status, RegistryValueKind.DWord);
}
public static void SetGamut(int mode = -1) public static void SetGamut(int mode = -1)
{ {
if (skipGamut) return; if (skipGamut) return;
@@ -229,19 +211,9 @@ namespace GHelper.Display
AppConfig.Set("gamut", mode); AppConfig.Set("gamut", mode);
var result = RunSplendid(SplendidCommand.GamutMode, 0, mode); if (RunSplendid(SplendidCommand.GamutMode, 0, mode)) return;
if (result == 0) return;
if (result == -1) if (_init)
{
Logger.WriteLine("Gamut setting refused, reverting.");
RunSplendid(SplendidCommand.GamutMode, 0, (int)GetDefaultGamut());
if (ProcessHelper.IsUserAdministrator() && _download)
{
_download = false;
ColorProfileHelper.InstallProfile();
}
}
if (result == 1 && _init)
{ {
_init = false; _init = false;
RunSplendid(SplendidCommand.Init); RunSplendid(SplendidCommand.Init);
@@ -252,7 +224,7 @@ namespace GHelper.Display
public static void SetVisual(SplendidCommand mode = SplendidCommand.Default, int whiteBalance = DefaultColorTemp, bool init = false) public static void SetVisual(SplendidCommand mode = SplendidCommand.Default, int whiteBalance = DefaultColorTemp, bool init = false)
{ {
if (mode == SplendidCommand.None) return; if (mode == SplendidCommand.None) return;
if ((mode == SplendidCommand.Disabled || mode == SplendidCommand.Default || mode == SplendidCommand.VivoNormal) && init) return; // Skip default setting on init if (mode == SplendidCommand.Default && init) return; // Skip default setting on init
if (!forceVisual && ScreenCCD.GetHDRStatus(true)) return; if (!forceVisual && ScreenCCD.GetHDRStatus(true)) return;
if (!forceVisual && ScreenNative.GetRefreshRate(ScreenNative.FindLaptopScreen(true)) < 0) return; if (!forceVisual && ScreenNative.GetRefreshRate(ScreenNative.FindLaptopScreen(true)) < 0) return;
@@ -262,16 +234,12 @@ namespace GHelper.Display
if (whiteBalance != DefaultColorTemp && !init) ProcessHelper.RunAsAdmin(); if (whiteBalance != DefaultColorTemp && !init) ProcessHelper.RunAsAdmin();
int? balance = null; int? balance;
int command = 0;
switch (mode) switch (mode)
{ {
case SplendidCommand.Disabled:
command = 2;
break;
case SplendidCommand.Eyecare: case SplendidCommand.Eyecare:
balance = 4; balance = 2;
break; break;
case SplendidCommand.VivoNormal: case SplendidCommand.VivoNormal:
case SplendidCommand.VivoVivid: case SplendidCommand.VivoVivid:
@@ -285,19 +253,9 @@ namespace GHelper.Display
break; break;
} }
int result = RunSplendid(mode, command, balance); if (RunSplendid(mode, 0, balance)) return;
if (result == 0) return;
if (result == -1) if (_init)
{
Logger.WriteLine("Visual mode setting refused, reverting.");
RunSplendid(SplendidCommand.Default, 0, DefaultColorTemp);
if (ProcessHelper.IsUserAdministrator() && _download)
{
_download = false;
ColorProfileHelper.InstallProfile();
}
}
if (result == 1 && _init)
{ {
_init = false; _init = false;
RunSplendid(SplendidCommand.Init); RunSplendid(SplendidCommand.Init);
@@ -330,7 +288,7 @@ namespace GHelper.Display
return _splendidPath; return _splendidPath;
} }
private static int RunSplendid(SplendidCommand command, int? param1 = null, int? param2 = null) private static bool RunSplendid(SplendidCommand command, int? param1 = null, int? param2 = null)
{ {
var splendid = GetSplendidPath(); var splendid = GetSplendidPath();
bool isVivo = AppConfig.IsVivoZenPro(); bool isVivo = AppConfig.IsVivoZenPro();
@@ -340,16 +298,10 @@ namespace GHelper.Display
{ {
if (command == SplendidCommand.DimmingVisual && isVivo) command = SplendidCommand.DimmingVivo; if (command == SplendidCommand.DimmingVisual && isVivo) command = SplendidCommand.DimmingVivo;
var result = ProcessHelper.RunCMD(splendid, (int)command + " " + param1 + " " + param2); var result = ProcessHelper.RunCMD(splendid, (int)command + " " + param1 + " " + param2);
if (result.Contains("file not exist") || (result.Length == 0 && !isVivo)) return 1; if (result.Contains("file not exist") || (result.Length == 0 && !isVivo)) return false;
if (result.Contains("return code: -1")) return -1;
if (result.Contains("Visual is disabled"))
{
SetRegStatus(1);
return 1;
}
} }
return 0; return true;
} }
private static void BrightnessTimerTimer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e) private static void BrightnessTimerTimer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
@@ -357,46 +309,28 @@ namespace GHelper.Display
brightnessTimer.Stop(); brightnessTimer.Stop();
if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6)) == 0) return; if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6))) return;
if (_init) if (_init)
{ {
_init = false; _init = false;
RunSplendid(SplendidCommand.Init); RunSplendid(SplendidCommand.Init);
RunSplendid(SplendidCommand.Init, 4); RunSplendid(SplendidCommand.Init, 4);
if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6)) == 0) return; if (RunSplendid(SplendidCommand.DimmingVisual, 0, (int)(40 + _brightness * 0.6))) return;
} }
// GammaRamp Fallback // GammaRamp Fallback
SetGamma(_brightness); SetGamma(_brightness);
} }
public static void InitBrightness()
{
if (!AppConfig.IsOLED()) return;
if (!AppConfig.SaveDimming()) return;
int brightness = GetBrightness();
if (brightness >= 0) SetBrightness(brightness);
}
private static bool IsOnBattery()
{
return AppConfig.SaveDimming() && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online;
}
public static int GetBrightness()
{
return AppConfig.Get(IsOnBattery() ? "brightness_battery" : "brightness", 100);
}
public static int SetBrightness(int brightness = -1, int delta = 0) public static int SetBrightness(int brightness = -1, int delta = 0)
{ {
if (!AppConfig.IsOLED()) return -1; if (!AppConfig.IsOLED()) return -1;
if (brightness < 0) brightness = GetBrightness();
if (brightness < 0) brightness = AppConfig.Get("brightness", 100);
_brightness = Math.Max(0, Math.Min(100, brightness + delta)); _brightness = Math.Max(0, Math.Min(100, brightness + delta));
AppConfig.Set(IsOnBattery() ? "brightness_battery" : "brightness", _brightness); AppConfig.Set("brightness", _brightness);
brightnessTimer.Start(); brightnessTimer.Start();

628
app/Extra.Designer.cs generated

File diff suppressed because it is too large Load Diff

View File

@@ -37,7 +37,6 @@ namespace GHelper
{"brightness_up", Properties.Strings.BrightnessUp}, {"brightness_up", Properties.Strings.BrightnessUp},
{"visual", Properties.Strings.VisualMode}, {"visual", Properties.Strings.VisualMode},
{"touchscreen", Properties.Strings.ToggleTouchscreen }, {"touchscreen", Properties.Strings.ToggleTouchscreen },
{"micmute", Properties.Strings.MuteMic},
{"ghelper", Properties.Strings.OpenGHelper}, {"ghelper", Properties.Strings.OpenGHelper},
{"custom", Properties.Strings.Custom} {"custom", Properties.Strings.Custom}
}; };
@@ -63,7 +62,6 @@ namespace GHelper
break; break;
case "m3": case "m3":
customActions[""] = Properties.Strings.MuteMic; customActions[""] = Properties.Strings.MuteMic;
customActions.Remove("micmute");
break; break;
case "m4": case "m4":
customActions[""] = Properties.Strings.OpenGHelper; customActions[""] = Properties.Strings.OpenGHelper;
@@ -78,8 +76,7 @@ namespace GHelper
customActions.Remove("fnlock"); customActions.Remove("fnlock");
break; break;
case "fnv": case "fnv":
customActions[""] = Properties.Strings.VisualMode; customActions[""] = EMPTY;
customActions.Remove("visual");
break; break;
case "fne": case "fne":
customActions[""] = "Calculator"; customActions[""] = "Calculator";
@@ -423,7 +420,7 @@ namespace GHelper
var statusLed = Program.acpi.DeviceGet(AsusACPI.StatusLed); var statusLed = Program.acpi.DeviceGet(AsusACPI.StatusLed);
checkStatusLed.Visible = statusLed >= 0; checkStatusLed.Visible = statusLed >= 0;
checkStatusLed.Checked = (statusLed > 0); checkStatusLed.Checked = (statusLed > 0);
checkStatusLed.CheckedChanged += CheckLEDStatus_CheckedChanged; checkStatusLed.CheckedChanged += CheckLEDStatus_CheckedChanged; ;
checkBWIcon.Checked = AppConfig.IsBWIcon(); checkBWIcon.Checked = AppConfig.IsBWIcon();
@@ -460,7 +457,7 @@ namespace GHelper
private void CheckLEDStatus_CheckedChanged(object? sender, EventArgs e) private void CheckLEDStatus_CheckedChanged(object? sender, EventArgs e)
{ {
InputDispatcher.SetStatusLED(checkStatusLed.Checked); Program.acpi.DeviceSet(AsusACPI.StatusLed, (checkStatusLed.Checked ? 7 : 0), "StatusLED");
} }
private void CheckBWIcon_CheckedChanged(object? sender, EventArgs e) private void CheckBWIcon_CheckedChanged(object? sender, EventArgs e)
@@ -507,10 +504,7 @@ namespace GHelper
return; return;
} }
if (eCoresMax == 0) eCoresMax = 8; eCoresMax = Math.Max(8, eCoresMax);
if (pCoresMax == 0) pCoresMax = 6;
eCoresMax = Math.Max(4, eCoresMax);
pCoresMax = Math.Max(6, pCoresMax); pCoresMax = Math.Max(6, pCoresMax);
panelCores.Visible = true; panelCores.Visible = true;
@@ -715,10 +709,7 @@ namespace GHelper
{ {
using (var amdControl = new AmdGpuControl()) using (var amdControl = new AmdGpuControl())
{ {
if (NvidiaSmi.GetDisplayActiveStatus()) return; // Skip if Nvidia GPU is active amdControl.SetVariBright(checkVariBright.Checked ? 1 : 0);
var status = checkVariBright.Checked ? 1 : 0;
var result = amdControl.SetVariBright(status);
Logger.WriteLine($"VariBright {status}: {result}");
ProcessHelper.KillByName("RadeonSoftware"); ProcessHelper.KillByName("RadeonSoftware");
} }
} }

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
@@ -48,7 +48,7 @@
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter

View File

@@ -15,7 +15,7 @@
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly> <ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks> <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<AssemblyVersion>0.199</AssemblyVersion> <AssemblyVersion>0.183</AssemblyVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@@ -63,8 +63,8 @@
<PackageReference Include="NAudio" Version="2.1.0" /> <PackageReference Include="NAudio" Version="2.1.0" />
<PackageReference Include="NvAPIWrapper.Net" Version="0.8.1.101" /> <PackageReference Include="NvAPIWrapper.Net" Version="0.8.1.101" />
<PackageReference Include="System.Management" Version="8.0.0" /> <PackageReference Include="System.Management" Version="8.0.0" />
<PackageReference Include="TaskScheduler" Version="2.11.0" /> <PackageReference Include="TaskScheduler" Version="2.10.1" />
<PackageReference Include="WinForms.DataVisualization" Version="1.9.2" /> <PackageReference Include="WinForms.DataVisualization" Version="1.8.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -62,7 +62,8 @@ public class AmdGpuControl : IGpuControl
public AmdGpuControl() public AmdGpuControl()
{ {
if (AppConfig.NoGpu() || !Adl2.Load()) return; if (!Adl2.Load())
return;
try try
{ {
@@ -118,18 +119,6 @@ public class AmdGpuControl : IGpuControl
} }
public int? GetiGpuUse()
{
if (_adlContextHandle == nint.Zero || _iGPU == null) return null;
if (ADL2_New_QueryPMLogData_Get(_adlContextHandle, ((ADLAdapterInfo)_iGPU).AdapterIndex, out ADLPMLogDataOutput adlpmLogDataOutput) != Adl2.ADL_SUCCESS) return null;
ADLSingleSensorData gpuUsage = adlpmLogDataOutput.Sensors[(int)ADLSensorType.PMLOG_INFO_ACTIVITY_GFX];
if (gpuUsage.Supported == 0) return null;
return gpuUsage.Value;
}
public int? GetGpuPower() public int? GetGpuPower()
{ {
if (_adlContextHandle == nint.Zero || _iGPU == null) return null; if (_adlContextHandle == nint.Zero || _iGPU == null) return null;

View File

@@ -22,12 +22,6 @@ namespace GHelper.Gpu
public void InitGPUMode() public void InitGPUMode()
{ {
if (AppConfig.NoGpu())
{
settings.HideGPUModes(false);
return;
}
int eco = Program.acpi.DeviceGet(AsusACPI.GPUEco); int eco = Program.acpi.DeviceGet(AsusACPI.GPUEco);
int mux = Program.acpi.DeviceGet(AsusACPI.GPUMux); int mux = Program.acpi.DeviceGet(AsusACPI.GPUMux);
@@ -99,15 +93,7 @@ namespace GHelper.Gpu
if (AppConfig.NoAutoUltimate()) if (AppConfig.NoAutoUltimate())
{ {
Program.acpi.SetGPUEco(0); Program.acpi.SetGPUEco(0);
Thread.Sleep(500); Thread.Sleep(100);
int eco = Program.acpi.DeviceGet(AsusACPI.GPUEco);
Logger.WriteLine("Eco flag : " + eco);
if (eco == 1)
{
settings.VisualiseGPUMode();
return;
}
} }
status = Program.acpi.DeviceSet(AsusACPI.GPUMux, 0, "GPUMux"); status = Program.acpi.DeviceSet(AsusACPI.GPUMux, 0, "GPUMux");
restart = true; restart = true;
@@ -236,7 +222,6 @@ namespace GHelper.Gpu
if ((GpuAuto && !IsPlugged()) || (ForceGPU && GpuMode == AsusACPI.GPUModeEco)) if ((GpuAuto && !IsPlugged()) || (ForceGPU && GpuMode == AsusACPI.GPUModeEco))
{ {
if (Program.acpi.IsXGConnected()) return false;
if (HardwareControl.IsUsedGPU()) if (HardwareControl.IsUsedGPU())
{ {
DialogResult dialogResult = MessageBox.Show(Properties.Strings.AlertDGPU, Properties.Strings.AlertDGPUTitle, MessageBoxButtons.YesNo); DialogResult dialogResult = MessageBox.Show(Properties.Strings.AlertDGPU, Properties.Strings.AlertDGPUTitle, MessageBoxButtons.YesNo);

View File

@@ -32,7 +32,7 @@ public static class NvidiaSmi
public static int GetDefaultMaxGPUPower() public static int GetDefaultMaxGPUPower()
{ {
if (AppConfig.ContainsModel("GU605") || AppConfig.ContainsModel("GA605")) return 125; if (AppConfig.ContainsModel("GU605")) return 125;
if (AppConfig.ContainsModel("GA403")) return 90; if (AppConfig.ContainsModel("GA403")) return 90;
if (AppConfig.ContainsModel("FA607")) return 140; if (AppConfig.ContainsModel("FA607")) return 140;
else return 175; else return 175;
@@ -41,7 +41,7 @@ public static class NvidiaSmi
public static int GetMaxGPUPower() public static int GetMaxGPUPower()
{ {
string output = RunNvidiaSmiCommand("--query-gpu=power.max_limit --format csv,noheader,nounits"); string output = RunNvidiaSmiCommand("--query-gpu=power.max_limit --format csv,noheader,nounits");
output = output.Trim().Trim('\n', '\r').Replace(".00","").Replace(",00", ""); output = output.Trim().Trim('\n', '\r');
if (float.TryParse(output, out float floatValue)) if (float.TryParse(output, out float floatValue))
{ {

View File

@@ -94,7 +94,7 @@ namespace GHelper
private void CheckController_CheckedChanged(object? sender, EventArgs e) private void CheckController_CheckedChanged(object? sender, EventArgs e)
{ {
AppConfig.Set("controller_disabled", checkController.Checked ? 1 : 0); AppConfig.Set("controller_disabled", checkController.Checked ? 1 : 0);
AllyControl.DisableXBoxController(checkController.Checked); AllyControl.ApplyXBoxStatus();
} }
private void ComboBinding(RComboBox combo) private void ComboBinding(RComboBox combo)

View File

@@ -24,7 +24,7 @@ public static class HardwareControl
public static decimal? fullCapacity; public static decimal? fullCapacity;
public static decimal? chargeCapacity; public static decimal? chargeCapacity;
public static string? batteryCharge;
public static string? cpuFan; public static string? cpuFan;
public static string? gpuFan; public static string? gpuFan;
@@ -34,20 +34,6 @@ public static class HardwareControl
static long lastUpdate; static long lastUpdate;
static bool _chargeWatt = AppConfig.Is("charge_watt");
public static bool chargeWatt
{
get
{
return _chargeWatt;
}
set
{
AppConfig.Set("charge_watt", value ? 1 : 0);
_chargeWatt = value;
}
}
private static int GetGpuUse() private static int GetGpuUse()
{ {
try try
@@ -240,17 +226,11 @@ public static class HardwareControl
if (fullCapacity > 0 && chargeCapacity > 0) if (fullCapacity > 0 && chargeCapacity > 0)
{ {
batteryCapacity = Math.Min(100, (decimal)chargeCapacity / (decimal)fullCapacity * 100); batteryCapacity = Math.Min(100, ((decimal)chargeCapacity / (decimal)fullCapacity) * 100);
if (batteryCapacity > 99 && BatteryControl.chargeFull) BatteryControl.UnSetBatteryLimitFull(); if (batteryCapacity > 99) BatteryControl.UnSetBatteryLimitFull();
if (chargeWatt)
{
batteryCharge = Math.Round((decimal)chargeCapacity / 1000, 1).ToString() + "Wh";
}
else
{
batteryCharge = Math.Round(batteryCapacity, 1) + "%";
}
} }
} }
public static bool IsUsedGPU(int threshold = 10) public static bool IsUsedGPU(int threshold = 10)
@@ -285,7 +265,6 @@ public static class HardwareControl
public static void RecreateGpuControl() public static void RecreateGpuControl()
{ {
if (AppConfig.NoGpu()) return;
try try
{ {
GpuControl?.Dispose(); GpuControl?.Dispose();

View File

@@ -7,8 +7,6 @@ namespace GHelper.Helpers
public static bool IsEnabled() public static bool IsEnabled()
{ {
if (Environment.OSVersion.Version.Build < 22000) return false;
using var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Lighting"); using var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Lighting");
var registryValueObject = key?.GetValue("AmbientLightingEnabled"); var registryValueObject = key?.GetValue("AmbientLightingEnabled");

View File

@@ -20,8 +20,6 @@ namespace GHelper.Helpers
"AsusCertService" "AsusCertService"
}; };
//"AsusPTPService",
static List<string> processesAC = new() { static List<string> processesAC = new() {
"ArmouryCrateSE.Service", "ArmouryCrateSE.Service",
"ArmouryCrate.Service", "ArmouryCrate.Service",

View File

@@ -1,13 +1,12 @@
using GHelper.Helpers; using GHelper.Helpers;
using Microsoft.Win32.TaskScheduler; using Microsoft.Win32.TaskScheduler;
using System.Diagnostics;
using System.Security.Principal; using System.Security.Principal;
public class Startup public class Startup
{ {
static string taskName = "GHelper"; static string taskName = "GHelper";
static string chargeTaskName = taskName + "Charge";
static string strExeFilePath = Application.ExecutablePath.Trim();
public static bool IsScheduled() public static bool IsScheduled()
{ {
@@ -33,6 +32,7 @@ public class Startup
{ {
try try
{ {
string strExeFilePath = Application.ExecutablePath.Trim();
string action = task.Definition.Actions.FirstOrDefault()!.ToString().Trim(); string action = task.Definition.Actions.FirstOrDefault()!.ToString().Trim();
if (!strExeFilePath.Equals(action, StringComparison.OrdinalIgnoreCase) && !File.Exists(action)) if (!strExeFilePath.Equals(action, StringComparison.OrdinalIgnoreCase) && !File.Exists(action))
{ {
@@ -41,60 +41,11 @@ public class Startup
UnSchedule(); UnSchedule();
Schedule(); Schedule();
} }
} } catch (Exception ex)
catch (Exception ex)
{ {
Logger.WriteLine($"Can't check startup task: {ex.Message}"); Logger.WriteLine($"Can't check startup task: {ex.Message}");
} }
if (taskService.RootFolder.AllTasks.FirstOrDefault(t => t.Name == chargeTaskName) == null) ScheduleCharge();
}
}
}
public static void UnscheduleCharge()
{
using (TaskService taskService = new TaskService())
{
try
{
taskService.RootFolder.DeleteTask(chargeTaskName);
}
catch (Exception e)
{
Logger.WriteLine("Can't remove charge limit task: " + e.Message);
}
}
}
public static void ScheduleCharge()
{
if (strExeFilePath is null) return;
using (TaskDefinition td = TaskService.Instance.NewTask())
{
td.RegistrationInfo.Description = "G-Helper Charge Limit";
td.Triggers.Add(new BootTrigger());
td.Actions.Add(strExeFilePath, "charge");
td.Principal.RunLevel = TaskRunLevel.LUA;
td.Principal.LogonType = TaskLogonType.S4U;
td.Principal.UserId = WindowsIdentity.GetCurrent().Name;
td.Settings.StopIfGoingOnBatteries = false;
td.Settings.DisallowStartIfOnBatteries = false;
td.Settings.ExecutionTimeLimit = TimeSpan.Zero;
try
{
TaskService.Instance.RootFolder.RegisterTaskDefinition(chargeTaskName, td);
Logger.WriteLine("Charge limit task scheduled: " + strExeFilePath);
}
catch (Exception e)
{
Logger.WriteLine("Can't create a charge limit task: " + e.Message);
} }
} }
} }
@@ -102,20 +53,29 @@ public class Startup
public static void Schedule() public static void Schedule()
{ {
string strExeFilePath = Application.ExecutablePath;
if (strExeFilePath is null) return;
var userId = WindowsIdentity.GetCurrent().Name;
using (TaskDefinition td = TaskService.Instance.NewTask()) using (TaskDefinition td = TaskService.Instance.NewTask())
{ {
td.RegistrationInfo.Description = "G-Helper Auto Start"; td.RegistrationInfo.Description = "G-Helper Auto Start";
td.Triggers.Add(new LogonTrigger { UserId = WindowsIdentity.GetCurrent().Name, Delay = TimeSpan.FromSeconds(2) }); td.Triggers.Add(new LogonTrigger { UserId = userId, Delay = TimeSpan.FromSeconds(1) });
td.Actions.Add(strExeFilePath); td.Actions.Add(strExeFilePath);
if (ProcessHelper.IsUserAdministrator()) if (ProcessHelper.IsUserAdministrator())
td.Principal.RunLevel = TaskRunLevel.Highest; td.Principal.RunLevel = TaskRunLevel.Highest;
td.Settings.StopIfGoingOnBatteries = false; td.Settings.StopIfGoingOnBatteries = false;
td.Settings.DisallowStartIfOnBatteries = false; td.Settings.DisallowStartIfOnBatteries = false;
td.Settings.ExecutionTimeLimit = TimeSpan.Zero; td.Settings.ExecutionTimeLimit = TimeSpan.Zero;
Debug.WriteLine(strExeFilePath);
Debug.WriteLine(userId);
try try
{ {
TaskService.Instance.RootFolder.RegisterTaskDefinition(taskName, td); TaskService.Instance.RootFolder.RegisterTaskDefinition(taskName, td);
@@ -127,12 +87,8 @@ public class Startup
else else
ProcessHelper.RunAsAdmin(); ProcessHelper.RunAsAdmin();
} }
Logger.WriteLine("Startup task scheduled: " + strExeFilePath);
} }
ScheduleCharge();
} }
public static void UnSchedule() public static void UnSchedule()
@@ -151,7 +107,5 @@ public class Startup
ProcessHelper.RunAsAdmin(); ProcessHelper.RunAsAdmin();
} }
} }
UnscheduleCharge();
} }
} }

View File

@@ -2,31 +2,21 @@
public static class TouchscreenHelper public static class TouchscreenHelper
{ {
public static bool? ToggleTouchscreen()
public static bool? GetStatus()
{ {
try try
{ {
ProcessHelper.RunAsAdmin(); ProcessHelper.RunAsAdmin();
return ProcessHelper.RunCMD("powershell", "(Get-PnpDevice -FriendlyName '*touch*screen*').Status").Contains("OK");
}
catch (Exception ex)
{
Logger.WriteLine($"Can't get touchscreen status: {ex.Message}");
return null;
}
}
public static void ToggleTouchscreen(bool status) var status = !ProcessHelper.RunCMD("powershell", "(Get-PnpDevice -FriendlyName '*touch*screen*').Status").Contains("OK");
{
try
{
ProcessHelper.RunAsAdmin();
ProcessHelper.RunCMD("powershell", (status ? "Enable-PnpDevice" : "Disable-PnpDevice") + " -InstanceId (Get-PnpDevice -FriendlyName '*touch*screen*').InstanceId -Confirm:$false"); ProcessHelper.RunCMD("powershell", (status ? "Enable-PnpDevice" : "Disable-PnpDevice") + " -InstanceId (Get-PnpDevice -FriendlyName '*touch*screen*').InstanceId -Confirm:$false");
return status;
} }
catch (Exception ex) catch (Exception ex)
{ {
Logger.WriteLine($"Can't toggle touchscreen: {ex.Message}"); Logger.WriteLine($"Can't toggle touchscreen: {ex.Message}");
return null;
} }
} }

View File

@@ -14,16 +14,9 @@ namespace GHelper.Input
{ {
System.Timers.Timer timer = new System.Timers.Timer(1000); System.Timers.Timer timer = new System.Timers.Timer(1000);
public static bool backlightActivity = true; public static bool backlightActivity = true;
public static bool lidClose = false;
public static Keys keyProfile = (Keys)AppConfig.Get("keybind_profile", (int)Keys.F5); public static Keys keyProfile = Keys.F5;
public static Keys keyApp = (Keys)AppConfig.Get("keybind_app", (int)Keys.F12); public static Keys keyApp = Keys.F12;
public static Keys keyProfile0 = (Keys)AppConfig.Get("keybind_profile_0", (int)Keys.F17);
public static Keys keyProfile1 = (Keys)AppConfig.Get("keybind_profile_1", (int)Keys.F18);
public static Keys keyProfile2 = (Keys)AppConfig.Get("keybind_profile_2", (int)Keys.F16);
public static Keys keyProfile3 = (Keys)AppConfig.Get("keybind_profile_3", (int)Keys.F19);
public static Keys keyProfile4 = (Keys)AppConfig.Get("keybind_profile_4", (int)Keys.F20);
static ModeControl modeControl = Program.modeControl; static ModeControl modeControl = Program.modeControl;
static ScreenControl screenControl = new ScreenControl(); static ScreenControl screenControl = new ScreenControl();
@@ -86,18 +79,14 @@ namespace GHelper.Input
Program.acpi.DeviceInit(); Program.acpi.DeviceInit();
if (!OptimizationService.IsRunning()) if (!OptimizationService.IsRunning())
{
Program.acpi.DeviceGet(AsusACPI.CameraShutter);
listener = new KeyboardListener(HandleEvent); listener = new KeyboardListener(HandleEvent);
}
else else
{
Logger.WriteLine("Optimization service is running"); Logger.WriteLine("Optimization service is running");
}
InitBacklightTimer(); InitBacklightTimer();
if (AppConfig.IsHardwareFnLock()) HardwareFnLock(AppConfig.Is("fn_lock")); if (AppConfig.IsVivoZenbook())
Program.acpi.DeviceSet(AsusACPI.FnLock, AppConfig.Is("fn_lock") ^ AppConfig.IsInvertedFNLock() ? 1 : 0, "FnLock");
} }
@@ -113,6 +102,10 @@ namespace GHelper.Input
{ {
hook.UnregisterAll(); hook.UnregisterAll();
// CTRL + SHIFT + F5 to cycle profiles
if (AppConfig.Get("keybind_profile") != -1) keyProfile = (Keys)AppConfig.Get("keybind_profile");
if (AppConfig.Get("keybind_app") != -1) keyApp = (Keys)AppConfig.Get("keybind_app");
string actionM1 = AppConfig.GetString("m1"); string actionM1 = AppConfig.GetString("m1");
string actionM2 = AppConfig.GetString("m2"); string actionM2 = AppConfig.GetString("m2");
@@ -126,24 +119,18 @@ namespace GHelper.Input
if (!AppConfig.Is("skip_hotkeys")) if (!AppConfig.Is("skip_hotkeys"))
{ {
if (AppConfig.IsDUO())
{
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F7);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F8);
}
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F13); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F13);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F14); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F14);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F15); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F15);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F21);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F22);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile0); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F16);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile1); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F17);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile2); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F18);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile3); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F19);
hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, keyProfile4); hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control | ModifierKeys.Alt, Keys.F20);
hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeDown); hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeDown);
hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeUp); hook.RegisterHotKey(ModifierKeys.Control, Keys.VolumeUp);
@@ -168,7 +155,7 @@ namespace GHelper.Input
// FN-Lock group // FN-Lock group
if (AppConfig.Is("fn_lock") && !AppConfig.IsHardwareFnLock()) if (AppConfig.Is("fn_lock") && !AppConfig.IsVivoZenbook())
for (Keys i = Keys.F1; i <= Keys.F11; i++) hook.RegisterHotKey(ModifierKeys.None, i); for (Keys i = Keys.F1; i <= Keys.F11; i++) hook.RegisterHotKey(ModifierKeys.None, i);
// Arrow-lock group // Arrow-lock group
@@ -242,31 +229,24 @@ namespace GHelper.Input
} }
static void SetBrightness(bool up, bool hotkey = false) static void SetBrightness(int delta)
{ {
int brightness = -1; int brightness = -1;
if (isTUF) brightness = ScreenBrightness.Get(); if (isTUF) brightness = ScreenBrightness.Get();
if (AppConfig.SwappedBrightness() && !hotkey) up = !up; if (AppConfig.SwappedBrightness()) delta = -delta;
int step = AppConfig.Get("brightness_step", 10); Program.acpi.DeviceSet(AsusACPI.UniversalControl, delta > 0 ? AsusACPI.Brightness_Up : AsusACPI.Brightness_Down, "Brightness");
if (step != 10)
{
Program.toast.RunToast(ScreenBrightness.Adjust(up ? step : -step) + "%", up ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown);
return;
}
Program.acpi.DeviceSet(AsusACPI.UniversalControl, up ? AsusACPI.Brightness_Up : AsusACPI.Brightness_Down, "Brightness");
if (isTUF) if (isTUF)
{ {
if (AppConfig.SwappedBrightness()) return; if (AppConfig.SwappedBrightness()) return;
if (!up && brightness <= 0) return; if (delta < 0 && brightness <= 0) return;
if (up && brightness >= 100) return; if (delta > 0 && brightness >= 100) return;
Thread.Sleep(100); Thread.Sleep(100);
if (brightness == ScreenBrightness.Get()) if (brightness == ScreenBrightness.Get())
Program.toast.RunToast(ScreenBrightness.Adjust(up ? step : -step) + "%", up ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown); Program.toast.RunToast(ScreenBrightness.Adjust(delta) + "%", (delta < 0) ? ToastIcon.BrightnessDown : ToastIcon.BrightnessUp);
} }
} }
@@ -296,7 +276,7 @@ namespace GHelper.Input
KeyboardHook.KeyPress(Keys.VolumeUp); KeyboardHook.KeyPress(Keys.VolumeUp);
return; return;
case Keys.F4: case Keys.F4:
ToggleMic(); KeyProcess("m3");
return; return;
} }
} }
@@ -315,10 +295,10 @@ namespace GHelper.Input
HandleEvent(199); // Backlight cycle HandleEvent(199); // Backlight cycle
return; return;
case Keys.F5: case Keys.F5:
SetBrightness(false); SetBrightness(-10);
return; return;
case Keys.F6: case Keys.F6:
SetBrightness(true); SetBrightness(+10);
return; return;
case Keys.F7: case Keys.F7:
KeyboardHook.KeyKeyPress(Keys.LWin, Keys.P); KeyboardHook.KeyKeyPress(Keys.LWin, Keys.P);
@@ -327,7 +307,7 @@ namespace GHelper.Input
HandleEvent(126); // Emojis HandleEvent(126); // Emojis
return; return;
case Keys.F9: case Keys.F9:
ToggleMic(); // MicMute KeyProcess("m3"); // MicMute
return; return;
case Keys.F10: case Keys.F10:
HandleEvent(133); // Camera Toggle HandleEvent(133); // Camera Toggle
@@ -386,10 +366,10 @@ namespace GHelper.Input
KeyboardHook.KeyPress(Keys.Snapshot); KeyboardHook.KeyPress(Keys.Snapshot);
break; break;
case Keys.F7: case Keys.F7:
SetBrightness(false); SetBrightness(-10);
break; break;
case Keys.F8: case Keys.F8:
SetBrightness(true); SetBrightness(+10);
break; break;
case Keys.F9: case Keys.F9:
KeyboardHook.KeyKeyPress(Keys.LWin, Keys.P); KeyboardHook.KeyKeyPress(Keys.LWin, Keys.P);
@@ -428,26 +408,20 @@ namespace GHelper.Input
{ {
if (e.Key == keyProfile) modeControl.CyclePerformanceMode(); if (e.Key == keyProfile) modeControl.CyclePerformanceMode();
if (e.Key == keyApp) Program.SettingsToggle(); if (e.Key == keyApp) Program.SettingsToggle();
if (e.Key == Keys.F20) ToggleMic(); if (e.Key == Keys.F20) KeyProcess("m3");
} }
if (e.Modifier == (ModifierKeys.Control | ModifierKeys.Shift | ModifierKeys.Alt)) if (e.Modifier == (ModifierKeys.Control | ModifierKeys.Shift | ModifierKeys.Alt))
{ {
if (e.Key == keyProfile) modeControl.CyclePerformanceMode(true); if (e.Key == keyProfile) modeControl.CyclePerformanceMode(true);
if (e.Key == keyProfile0) modeControl.SetPerformanceMode(0, true);
if (e.Key == keyProfile1) modeControl.SetPerformanceMode(1, true);
if (e.Key == keyProfile2) modeControl.SetPerformanceMode(2, true);
if (e.Key == keyProfile3) modeControl.SetPerformanceMode(3, true);
if (e.Key == keyProfile4) modeControl.SetPerformanceMode(4, true);
switch (e.Key) switch (e.Key)
{ {
case Keys.F1: case Keys.F1:
SetBrightness(false); SetBrightness(-10);
break; break;
case Keys.F2: case Keys.F2:
SetBrightness(true); SetBrightness(10);
break; break;
case Keys.F3: case Keys.F3:
Program.settingsForm.gpuControl.ToggleXGM(true); Program.settingsForm.gpuControl.ToggleXGM(true);
@@ -455,30 +429,29 @@ namespace GHelper.Input
case Keys.F4: case Keys.F4:
Program.settingsForm.BeginInvoke(Program.settingsForm.allyControl.ToggleModeHotkey); Program.settingsForm.BeginInvoke(Program.settingsForm.allyControl.ToggleModeHotkey);
break; break;
case Keys.F7:
SetScreenpad(-10);
break;
case Keys.F8:
SetScreenpad(10);
break;
case Keys.F13: case Keys.F13:
ToggleScreenRate(); ToggleScreenRate();
break; break;
case Keys.F14: case Keys.F14:
Program.toast.RunToast(Properties.Strings.EcoMode);
Program.settingsForm.gpuControl.SetGPUMode(AsusACPI.GPUModeEco); Program.settingsForm.gpuControl.SetGPUMode(AsusACPI.GPUModeEco);
break; break;
case Keys.F15: case Keys.F15:
Program.toast.RunToast(Properties.Strings.StandardMode);
Program.settingsForm.gpuControl.SetGPUMode(AsusACPI.GPUModeStandard); Program.settingsForm.gpuControl.SetGPUMode(AsusACPI.GPUModeStandard);
break; break;
case Keys.F21: case Keys.F16:
Program.toast.RunToast("Activating XGM"); modeControl.SetPerformanceMode(2, true);
Program.settingsForm.gpuControl.ToggleXGM(true);
break; break;
case Keys.F22: case Keys.F17:
Program.toast.RunToast("Deactivating XGM"); modeControl.SetPerformanceMode(0, true);
Program.settingsForm.gpuControl.ToggleXGM(false); break;
case Keys.F18:
modeControl.SetPerformanceMode(1, true);
break;
case Keys.F19:
modeControl.SetPerformanceMode(3, true);
break;
case Keys.F20:
modeControl.SetPerformanceMode(4, true);
break; break;
} }
} }
@@ -490,11 +463,11 @@ namespace GHelper.Input
{ {
case Keys.VolumeDown: case Keys.VolumeDown:
// Screen brightness down on CTRL+VolDown // Screen brightness down on CTRL+VolDown
SetBrightness(false); SetBrightness(-10);
break; break;
case Keys.VolumeUp: case Keys.VolumeUp:
// Screen brightness up on CTRL+VolUp // Screen brightness up on CTRL+VolUp
SetBrightness(true); SetBrightness(+10);
break; break;
} }
} }
@@ -532,8 +505,6 @@ namespace GHelper.Input
action = "micmute"; action = "micmute";
if (name == "fnc") if (name == "fnc")
action = "fnlock"; action = "fnlock";
if (name == "fnv")
action = "visual";
if (name == "fne") if (name == "fne")
action = "calculator"; action = "calculator";
} }
@@ -588,13 +559,15 @@ namespace GHelper.Input
ToggleFnLock(); ToggleFnLock();
break; break;
case "micmute": case "micmute":
ToggleMic(); bool muteStatus = Audio.ToggleMute();
Program.toast.RunToast(muteStatus ? Properties.Strings.Muted : Properties.Strings.Unmuted, muteStatus ? ToastIcon.MicrophoneMute : ToastIcon.Microphone);
if (AppConfig.IsVivoZenbook()) Program.acpi.DeviceSet(AsusACPI.MicMuteLed, muteStatus ? 1 : 0, "MicmuteLed");
break; break;
case "brightness_up": case "brightness_up":
SetBrightness(true); SetBrightness(+10);
break; break;
case "brightness_down": case "brightness_down":
SetBrightness(false); SetBrightness(-10);
break; break;
case "screenpad_up": case "screenpad_up":
SetScreenpad(10); SetScreenpad(10);
@@ -612,27 +585,15 @@ namespace GHelper.Input
Program.settingsForm.BeginInvoke(Program.settingsForm.allyControl.ToggleModeHotkey); Program.settingsForm.BeginInvoke(Program.settingsForm.allyControl.ToggleModeHotkey);
break; break;
case "touchscreen": case "touchscreen":
var status = !TouchscreenHelper.GetStatus(); var touchscreenStatus = TouchscreenHelper.ToggleTouchscreen();
Logger.WriteLine("Touchscreen status: " + status); if (touchscreenStatus is not null)
if (status is not null) Program.toast.RunToast(Properties.Strings.Touchscreen + " " + ((bool)touchscreenStatus ? Properties.Strings.On : Properties.Strings.Off), ToastIcon.Touchpad);
{
Program.toast.RunToast(Properties.Strings.Touchscreen + " " + ((bool)status ? Properties.Strings.On : Properties.Strings.Off), ToastIcon.Touchpad);
TouchscreenHelper.ToggleTouchscreen((bool)status);
}
break; break;
default: default:
break; break;
} }
} }
static void ToggleMic()
{
bool muteStatus = Audio.ToggleMute();
Program.toast.RunToast(muteStatus ? Properties.Strings.Muted : Properties.Strings.Unmuted, muteStatus ? ToastIcon.MicrophoneMute : ToastIcon.Microphone);
if (AppConfig.IsVivoZenbook()) Program.acpi.DeviceSet(AsusACPI.MicMuteLed, muteStatus ? 1 : 0, "MicmuteLed");
}
static bool GetTouchpadState() static bool GetTouchpadState()
{ {
using (var key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad\Status", false)) using (var key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad\Status", false))
@@ -668,19 +629,13 @@ namespace GHelper.Input
Program.toast.RunToast("Arrow-Lock " + (arLock == 1 ? Properties.Strings.On : Properties.Strings.Off), ToastIcon.FnLock); Program.toast.RunToast("Arrow-Lock " + (arLock == 1 ? Properties.Strings.On : Properties.Strings.Off), ToastIcon.FnLock);
} }
public static void HardwareFnLock(bool fnLock)
{
Program.acpi.DeviceSet(AsusACPI.FnLock, fnLock ^ AppConfig.IsInvertedFNLock() ? 1 : 0, "FnLock");
AsusHid.WriteInput([AsusHid.INPUT_ID, 0xD0, 0x4E, fnLock ? (byte)0x00 : (byte)0x01], "USB FnLock");
}
public static void ToggleFnLock() public static void ToggleFnLock()
{ {
bool fnLock = !AppConfig.Is("fn_lock"); bool fnLock = !AppConfig.Is("fn_lock");
AppConfig.Set("fn_lock", fnLock ? 1 : 0); AppConfig.Set("fn_lock", fnLock ? 1 : 0);
if (AppConfig.IsHardwareFnLock()) if (AppConfig.IsVivoZenbook())
HardwareFnLock(fnLock); Program.acpi.DeviceSet(AsusACPI.FnLock, fnLock ^ AppConfig.IsInvertedFNLock() ? 1 : 0, "FnLock");
else else
Program.settingsForm.BeginInvoke(Program.inputDispatcher.RegisterKeys); Program.settingsForm.BeginInvoke(Program.inputDispatcher.RegisterKeys);
@@ -752,12 +707,13 @@ namespace GHelper.Input
case 55: // Arconym case 55: // Arconym
KeyProcess("m6"); KeyProcess("m6");
return; return;
case 136: // FN + F12
if (!AppConfig.IsNoAirplaneMode()) Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Airplane, "Airplane");
return;
case 181: // FN + Numpad Enter case 181: // FN + Numpad Enter
KeyProcess("fne"); KeyProcess("fne");
return; return;
case 174: // FN+F5 case 174: // FN+F5
case 153: // FN+F5 OLD MODELS
case 157: // Zenbook DUO FN+F
modeControl.CyclePerformanceMode(Control.ModifierKeys == Keys.Shift); modeControl.CyclePerformanceMode(Control.ModifierKeys == Keys.Shift);
return; return;
case 179: // FN+F4 case 179: // FN+F4
@@ -770,6 +726,12 @@ namespace GHelper.Input
case 158: // Fn + C case 158: // Fn + C
KeyProcess("fnc"); KeyProcess("fnc");
return; return;
case 78: // Fn + ESC
ToggleFnLock();
return;
case 75: // Fn + Arrow Lock
ToggleArrowLock();
return;
case 189: // Tablet mode case 189: // Tablet mode
TabletMode(); TabletMode();
return; return;
@@ -819,7 +781,7 @@ namespace GHelper.Input
} }
else else
{ {
SetBrightness(false, true); Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Brightness_Down, "Brightness");
} }
break; break;
case 32: // FN+F8 case 32: // FN+F8
@@ -834,7 +796,7 @@ namespace GHelper.Input
} }
else else
{ {
SetBrightness(true, true); Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Brightness_Up, "Brightness");
} }
break; break;
case 133: // Camera Toggle case 133: // Camera Toggle
@@ -859,15 +821,6 @@ namespace GHelper.Input
case 126: // Fn+F8 emojis popup case 126: // Fn+F8 emojis popup
KeyboardHook.KeyKeyPress(Keys.LWin, Keys.OemSemicolon); KeyboardHook.KeyKeyPress(Keys.LWin, Keys.OemSemicolon);
return; return;
case 78: // Fn + ESC
ToggleFnLock();
return;
case 75: // Fn + Arrow Lock
ToggleArrowLock();
return;
case 136: // FN + F12
if (!AppConfig.IsNoAirplaneMode()) Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Airplane, "Airplane");
return;
} }
@@ -888,22 +841,10 @@ namespace GHelper.Input
return Math.Max(Math.Min(3, backlight), 0); return Math.Max(Math.Min(3, backlight), 0);
} }
public static void AutoKeyboard() public static void SetBacklightAuto(bool init = false)
{ {
if (AppConfig.HasTabletMode()) TabletMode(); if (init) Aura.Init();
if (lidClose || AppConfig.Is("skip_aura")) return; Aura.ApplyBrightness(GetBacklight(), "Auto", init);
Aura.Init();
Aura.ApplyPower();
Aura.ApplyAura();
SetBacklightAuto();
}
public static void SetBacklightAuto()
{
if (lidClose) return;
Aura.ApplyBrightness(GetBacklight(), "Auto");
} }
public static void SetBacklight(int delta, bool force = false) public static void SetBacklight(int delta, bool force = false)
@@ -959,60 +900,38 @@ namespace GHelper.Input
public static void ToggleCamera() public static void ToggleCamera()
{ {
int cameraShutter = Program.acpi.DeviceGet(AsusACPI.CameraShutter); if (!ProcessHelper.IsUserAdministrator()) return;
if (cameraShutter == 0) string CameraRegistryKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam";
{ string CameraRegistryValueName = "Value";
Program.acpi.DeviceSet(AsusACPI.CameraShutter, 1, "CameraShutterOn");
Program.toast.RunToast($"Camera Off");
}
else if (cameraShutter == 1)
{
Program.acpi.DeviceSet(AsusACPI.CameraShutter, 0, "CameraShutterOff");
Program.toast.RunToast($"Camera On");
}
else if (cameraShutter == 262144)
{
Program.toast.RunToast($"Camera Off");
}
else if (cameraShutter == 262145)
{
Program.toast.RunToast($"Camera On");
}
else
{
if (!ProcessHelper.IsUserAdministrator()) return;
string CameraRegistryKeyPath = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\CapabilityAccessManager\ConsentStore\webcam"; try
string CameraRegistryValueName = "Value"; {
var status = (string?)Registry.GetValue(CameraRegistryKeyPath, CameraRegistryValueName, "");
try if (status == "Allow") status = "Deny";
else if (status == "Deny") status = "Allow";
else
{ {
var status = (string?)Registry.GetValue(CameraRegistryKeyPath, CameraRegistryValueName, ""); Logger.WriteLine("Unknown camera status");
return;
if (status == "Allow") status = "Deny";
else if (status == "Deny") status = "Allow";
else
{
Logger.WriteLine("Unknown camera status");
return;
}
Registry.SetValue(CameraRegistryKeyPath, CameraRegistryValueName, status, RegistryValueKind.String);
Program.acpi.DeviceSet(AsusACPI.CameraLed, (status == "Deny" ? 1 : 0), "Camera");
Program.toast.RunToast($"Camera " + (status == "Deny" ? "Off" : "On"));
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
} }
Registry.SetValue(CameraRegistryKeyPath, CameraRegistryValueName, status, RegistryValueKind.String);
Program.acpi.DeviceSet(AsusACPI.CameraLed, (status == "Deny" ? 1 : 0), "Camera");
Program.toast.RunToast($"Camera " + (status == "Deny" ? "Off" : "On"));
} }
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
}
} }
private static System.Threading.Timer screenpadActionTimer; private static System.Threading.Timer screenpadActionTimer;
private static int screenpadBrightnessToSet; private static int screenpadBrightnessToSet;
public static void ApplyScreenpadAction(int brightness, bool instant = true) public static void ApplyScreenpadAction(int brightness, bool doToggle = false)
{ {
var delay = AppConfig.Get("screenpad_delay", 1500); var delay = AppConfig.Get("screenpad_delay", 1500);
@@ -1020,12 +939,11 @@ namespace GHelper.Input
Action<int> action = (b) => Action<int> action = (b) =>
{ {
if (b >= 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, 1, "ScreenpadOn"); if (b >= 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, 1, "ScreenpadOn");
int[] brightnessValues = [0, 4, 9, 14, 21, 32, 48, 73, 111, 169, 255]; Program.acpi.DeviceSet(AsusACPI.ScreenPadBrightness, Math.Max(b * 255 / 100, 0), "Screenpad");
Program.acpi.DeviceSet(AsusACPI.ScreenPadBrightness, brightnessValues[Math.Min(brightnessValues.Length - 1, Math.Max(0, b / 10))], "Screenpad");
if (b < 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, 0, "ScreenpadOff"); if (b < 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, 0, "ScreenpadOff");
}; };
if (delay <= 0 || instant) //instant action if(delay <= 0 || (brightness > 0 && brightness < 100 && doToggle == false)) //instant action
{ {
action(brightness); action(brightness);
} }
@@ -1051,46 +969,25 @@ namespace GHelper.Input
if (brightness < 0) brightness = 100; if (brightness < 0) brightness = 100;
else if (brightness >= 100) brightness = 0; else if (brightness >= 100) brightness = 0;
else brightness = -10; else brightness = -10;
ApplyScreenpadAction(brightness, false);
} }
else else
{ {
brightness = Math.Max(Math.Min(100, brightness + delta), 0); brightness = Math.Max(Math.Min(100, brightness + delta), -10);
ApplyScreenpadAction(brightness);
} }
AppConfig.Set("screenpad", brightness); AppConfig.Set("screenpad", brightness);
ApplyScreenpadAction(brightness);
string toast; string toast;
if (brightness < 0) toast = "Off"; if (brightness < 0) toast = "Off";
else if (brightness == 0) toast = "Hidden";
else toast = brightness.ToString() + "%"; else toast = brightness.ToString() + "%";
Program.toast.RunToast($"Screen Pad {toast}", delta > 0 ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown); Program.toast.RunToast($"Screen Pad {toast}", delta > 0 ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown);
} }
public static void InitScreenpad()
{
if (!AppConfig.IsDUO()) return;
int brightness = AppConfig.Get("screenpad");
if (brightness >= 0) ApplyScreenpadAction(brightness);
}
public static void SetStatusLED(bool status)
{
Program.acpi.DeviceSet(AsusACPI.StatusLed, status ? 7 : 0, "StatusLED");
}
public static void InitStatusLed()
{
if (AppConfig.IsAutoStatusLed()) SetStatusLED(true);
}
public static void ShutdownStatusLed()
{
if (AppConfig.IsAutoStatusLed()) SetStatusLED(false);
}
static void LaunchProcess(string command = "") static void LaunchProcess(string command = "")
{ {
if (string.IsNullOrEmpty(command)) return; if (string.IsNullOrEmpty(command)) return;

View File

@@ -10,8 +10,6 @@ namespace GHelper.Input
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(); CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
Action<int> _handler; Action<int> _handler;
static int retry = 0;
public KeyboardListener(Action<int> KeyHandler) public KeyboardListener(Action<int> KeyHandler)
{ {
_handler = KeyHandler; _handler = KeyHandler;
@@ -56,7 +54,6 @@ namespace GHelper.Input
input.ReadTimeout = int.MaxValue; input.ReadTimeout = int.MaxValue;
var data = input.Read(); var data = input.Read();
if (cancellationTokenSource.Token.IsCancellationRequested) break;
if (data.Length > 1 && data[0] == AsusHid.INPUT_ID && data[1] > 0 && data[1] != 236) if (data.Length > 1 && data[0] == AsusHid.INPUT_ID && data[1] > 0 && data[1] != 236)
{ {
Logger.WriteLine($"Key: {data[1]}"); Logger.WriteLine($"Key: {data[1]}");
@@ -70,12 +67,6 @@ namespace GHelper.Input
catch (Exception ex) catch (Exception ex)
{ {
Logger.WriteLine($"Listener exited: {ex.Message}"); Logger.WriteLine($"Listener exited: {ex.Message}");
if (retry++ < 2)
{
Thread.Sleep(300);
Logger.WriteLine($"Restarting listener {retry}");
Listen();
}
} }
} }

View File

@@ -30,7 +30,6 @@ namespace GHelper
labelScaling.Text = Properties.Strings.ScalingQuality; labelScaling.Text = Properties.Strings.ScalingQuality;
labelRotation.Text = Properties.Strings.ImageRotation; labelRotation.Text = Properties.Strings.ImageRotation;
labelContrastTitle.Text = Properties.Strings.Contrast; labelContrastTitle.Text = Properties.Strings.Contrast;
labelGammaTitle.Text = Properties.Strings.Brightness;
buttonPicture.Text = Properties.Strings.PictureGif; buttonPicture.Text = Properties.Strings.PictureGif;
buttonReset.Text = Properties.Strings.Reset; buttonReset.Text = Properties.Strings.Reset;
@@ -81,7 +80,7 @@ namespace GHelper
{ {
AppConfig.Set("matrix_contrast", trackContrast.Value); AppConfig.Set("matrix_contrast", trackContrast.Value);
AppConfig.Set("matrix_gamma", trackGamma.Value); AppConfig.Set("matrix_gamma", trackGamma.Value);
SetMatrixPicture(false); SetMatrixPicture();
} }

View File

@@ -110,24 +110,30 @@ namespace GHelper.Mode
if (notify) Toast(); if (notify) Toast();
if (!AppConfig.Is("skip_powermode")) // Power plan from config or defaulting to balanced
{ if (AppConfig.GetModeString("scheme") is not null)
// Power plan from config or defaulting to balanced PowerNative.SetPowerPlan(AppConfig.GetModeString("scheme"));
if (AppConfig.GetModeString("scheme") is not null) else
PowerNative.SetPowerPlan(AppConfig.GetModeString("scheme")); PowerNative.SetBalancedPowerPlan();
else
PowerNative.SetBalancedPowerPlan();
// Windows power mode // Windows power mode
if (AppConfig.GetModeString("powermode") is not null) if (AppConfig.GetModeString("powermode") is not null)
PowerNative.SetPowerMode(AppConfig.GetModeString("powermode")); PowerNative.SetPowerMode(AppConfig.GetModeString("powermode"));
else else
PowerNative.SetPowerMode(Modes.GetBase(mode)); PowerNative.SetPowerMode(Modes.GetBase(mode));
}
// CPU Boost setting override // CPU Boost setting override
if (AppConfig.GetMode("auto_boost") != -1) if (AppConfig.GetMode("auto_boost") != -1)
PowerNative.SetCPUBoost(AppConfig.GetMode("auto_boost")); PowerNative.SetCPUBoost(AppConfig.GetMode("auto_boost"));
//BatteryControl.SetBatteryChargeLimit();
/*
if (NativeMethods.PowerGetEffectiveOverlayScheme(out Guid activeScheme) == 0)
{
Debug.WriteLine("Effective :" + activeScheme);
}
*/
settings.FansInit(); settings.FansInit();
} }
@@ -156,8 +162,7 @@ namespace GHelper.Mode
modeToggleTimer.Start(); modeToggleTimer.Start();
Modes.SetCurrent(Modes.GetNext(back)); Modes.SetCurrent(Modes.GetNext(back));
Toast(); Toast();
} } else
else
{ {
SetPerformanceMode(Modes.GetNext(back), true); SetPerformanceMode(Modes.GetNext(back), true);
} }
@@ -265,6 +270,9 @@ namespace GHelper.Mode
var stapmResult = SendCommand.set_stapm_limit((uint)limit_total * 1000); var stapmResult = SendCommand.set_stapm_limit((uint)limit_total * 1000);
if (init) Logger.WriteLine($"STAPM: {limit_total} {stapmResult}"); if (init) Logger.WriteLine($"STAPM: {limit_total} {stapmResult}");
var stapmResult2 = SendCommand.set_stapm2_limit((uint)limit_total * 1000);
if (init) Logger.WriteLine($"STAPM2: {limit_total} {stapmResult2}");
var slowResult = SendCommand.set_slow_limit((uint)limit_slow * 1000); var slowResult = SendCommand.set_slow_limit((uint)limit_slow * 1000);
if (init) Logger.WriteLine($"SLOW: {limit_slow} {slowResult}"); if (init) Logger.WriteLine($"SLOW: {limit_slow} {slowResult}");
@@ -380,7 +388,7 @@ namespace GHelper.Mode
if (gpu_power >= AsusACPI.MinGPUPower && gpu_power <= AsusACPI.MaxGPUPower && Program.acpi.DeviceGet(AsusACPI.GPU_POWER) >= 0) if (gpu_power >= AsusACPI.MinGPUPower && gpu_power <= AsusACPI.MaxGPUPower && Program.acpi.DeviceGet(AsusACPI.GPU_POWER) >= 0)
Program.acpi.DeviceSet(AsusACPI.GPU_POWER, gpu_power, "PowerLimit TGP (GPU VAR)"); Program.acpi.DeviceSet(AsusACPI.GPU_POWER, gpu_power, "PowerLimit TGP (GPU VAR)");
if (gpu_boost >= AsusACPI.MinGPUBoost && gpu_boost <= AsusACPI.MaxGPUBoost && Program.acpi.DeviceGet(AsusACPI.PPT_GPUC0) >= 0) if (gpu_boost >= AsusACPI.MinGPUBoost && gpu_boost <= AsusACPI.MaxGPUBoost && Program.acpi.DeviceGet(AsusACPI.PPT_GPUC0) >= 0)
boostResult = Program.acpi.DeviceSet(AsusACPI.PPT_GPUC0, gpu_boost, "PowerLimit C0 (GPU BOOST)"); boostResult = Program.acpi.DeviceSet(AsusACPI.PPT_GPUC0, gpu_boost, "PowerLimit C0 (GPU BOOST)");
if (gpu_temp >= AsusACPI.MinGPUTemp && gpu_temp <= AsusACPI.MaxGPUTemp && Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0) if (gpu_temp >= AsusACPI.MinGPUTemp && gpu_temp <= AsusACPI.MaxGPUTemp && Program.acpi.DeviceGet(AsusACPI.PPT_GPUC2) >= 0)

View File

@@ -175,7 +175,6 @@ namespace GHelper.Mode
if (activeSchemeGuid.ToString() != balanced && !AppConfig.Is("skip_power_plan")) if (activeSchemeGuid.ToString() != balanced && !AppConfig.Is("skip_power_plan"))
{ {
Logger.WriteLine($"Changing power plan from {activeSchemeGuid.ToString()} to Balanced");
SetPowerPlan(balanced); SetPowerPlan(balanced);
} }
} }

View File

@@ -481,8 +481,9 @@ namespace GHelper.Peripherals.Mouse
{ {
try try
{ {
return HidSharp.DeviceList.Local.GetHidDevices(VendorID(), ProductID()) HidSharp.DeviceList.Local.GetHidDevices(VendorID(), ProductID())
.FirstOrDefault(x => x.DevicePath.Contains(path)) != null; .First(x => x.DevicePath.Contains(path));
return true;
} }
catch catch
{ {

View File

@@ -86,7 +86,7 @@
public override int DPIIncrements() public override int DPIIncrements()
{ {
return 50; return 100;
} }

View File

@@ -6,7 +6,6 @@ using GHelper.Helpers;
using GHelper.Input; using GHelper.Input;
using GHelper.Mode; using GHelper.Mode;
using GHelper.Peripherals; using GHelper.Peripherals;
using GHelper.USB;
using Microsoft.Win32; using Microsoft.Win32;
using Ryzen; using Ryzen;
using System.Diagnostics; using System.Diagnostics;
@@ -54,13 +53,6 @@ namespace GHelper
string action = ""; string action = "";
if (args.Length > 0) action = args[0]; if (args.Length > 0) action = args[0];
if (action == "charge")
{
BatteryLimit();
Application.Exit();
return;
}
string language = AppConfig.GetString("language"); string language = AppConfig.GetString("language");
if (language != null && language.Length > 0) if (language != null && language.Length > 0)
@@ -77,10 +69,6 @@ namespace GHelper
Logger.WriteLine("------------"); Logger.WriteLine("------------");
Logger.WriteLine("App launched: " + AppConfig.GetModel() + " :" + Assembly.GetExecutingAssembly().GetName().Version.ToString() + CultureInfo.CurrentUICulture + (ProcessHelper.IsUserAdministrator() ? "." : "")); Logger.WriteLine("App launched: " + AppConfig.GetModel() + " :" + Assembly.GetExecutingAssembly().GetName().Version.ToString() + CultureInfo.CurrentUICulture + (ProcessHelper.IsUserAdministrator() ? "." : ""));
var startCount = AppConfig.Get("start_count") + 1;
AppConfig.Set("start_count", startCount);
Logger.WriteLine("Start Count: " + startCount);
acpi = new AsusACPI(); acpi = new AsusACPI();
if (!acpi.IsConnected() && AppConfig.IsASUS()) if (!acpi.IsConnected() && AppConfig.IsASUS())
@@ -95,8 +83,6 @@ namespace GHelper
return; return;
} }
ProcessHelper.KillByName("ASUSSmartDisplayControl");
Application.EnableVisualStyles(); Application.EnableVisualStyles();
HardwareControl.RecreateGpuControl(); HardwareControl.RecreateGpuControl();
@@ -173,7 +159,6 @@ namespace GHelper
{ {
gpuControl.StandardModeFix(); gpuControl.StandardModeFix();
BatteryControl.AutoBattery(); BatteryControl.AutoBattery();
InputDispatcher.ShutdownStatusLed();
} }
private static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e) private static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e)
@@ -214,7 +199,7 @@ namespace GHelper
if (settingsForm.matrixForm is not null && settingsForm.matrixForm.Text != "") if (settingsForm.matrixForm is not null && settingsForm.matrixForm.Text != "")
settingsForm.matrixForm.InitTheme(); settingsForm.matrixForm.InitTheme();
if (settingsForm.handheldForm is not null && settingsForm.handheldForm.Text != "") if (settingsForm.handheldForm is not null && settingsForm.handheldForm.Text != "")
settingsForm.handheldForm.InitTheme(); settingsForm.handheldForm.InitTheme();
break; break;
@@ -233,10 +218,7 @@ namespace GHelper
Logger.WriteLine("AutoSetting for " + isPlugged.ToString()); Logger.WriteLine("AutoSetting for " + isPlugged.ToString());
BatteryControl.AutoBattery(init); BatteryControl.AutoBattery(init);
if (init) if (init) screenControl.InitMiniled();
{
InputDispatcher.InitScreenpad();
}
inputDispatcher.Init(); inputDispatcher.Init();
@@ -255,17 +237,11 @@ namespace GHelper
if (AppConfig.IsAlly()) if (AppConfig.IsAlly())
{ {
allyControl.Init(); allyControl.Init();
} } else
else
{ {
InputDispatcher.AutoKeyboard(); settingsForm.AutoKeyboard();
} }
screenControl.InitMiniled();
InputDispatcher.InitStatusLed();
XGM.InitLight();
VisualControl.InitBrightness();
return true; return true;
} }
@@ -276,7 +252,6 @@ namespace GHelper
{ {
Logger.WriteLine("Power Mode Changed:" + e.Mode.ToString()); Logger.WriteLine("Power Mode Changed:" + e.Mode.ToString());
gpuControl.StandardModeFix(); gpuControl.StandardModeFix();
InputDispatcher.ShutdownStatusLed();
} }
int delay = AppConfig.Get("charger_delay"); int delay = AppConfig.Get("charger_delay");
@@ -287,7 +262,6 @@ namespace GHelper
} }
if (SystemInformation.PowerStatus.PowerLineStatus == isPlugged) return; if (SystemInformation.PowerStatus.PowerLineStatus == isPlugged) return;
if (AppConfig.Is("disable_power_event")) return;
SetAutoModes(true); SetAutoModes(true);
} }
@@ -308,22 +282,19 @@ namespace GHelper
} }
else else
{ {
var screen = Screen.PrimaryScreen;
if (screen is null) screen = Screen.FromControl(settingsForm);
settingsForm.Location = screen.WorkingArea.Location; settingsForm.Left = Screen.FromControl(settingsForm).WorkingArea.Width - 10 - settingsForm.Width;
settingsForm.Left = screen.WorkingArea.Width - 10 - settingsForm.Width; settingsForm.Top = Screen.FromControl(settingsForm).WorkingArea.Height - 10 - settingsForm.Height;
settingsForm.Top = screen.WorkingArea.Height - 10 - settingsForm.Height;
settingsForm.Show(); settingsForm.Show();
settingsForm.Activate(); settingsForm.Activate();
settingsForm.Left = screen.WorkingArea.Width - 10 - settingsForm.Width; settingsForm.Left = Screen.FromControl(settingsForm).WorkingArea.Width - 10 - settingsForm.Width;
if (AppConfig.IsAlly()) if (AppConfig.IsAlly())
settingsForm.Top = Math.Max(10, screen.Bounds.Height - 110 - settingsForm.Height); settingsForm.Top = Math.Max(10, Screen.FromControl(settingsForm).Bounds.Height - 110 - settingsForm.Height);
else else
settingsForm.Top = screen.WorkingArea.Height - 10 - settingsForm.Height; settingsForm.Top = Screen.FromControl(settingsForm).WorkingArea.Height - 10 - settingsForm.Height;
settingsForm.VisualiseGPUMode(); settingsForm.VisualiseGPUMode();
} }
@@ -348,23 +319,6 @@ namespace GHelper
Application.Exit(); Application.Exit();
} }
static void BatteryLimit()
{
try
{
int limit = AppConfig.Get("charge_limit");
if (limit > 0 && limit < 100)
{
Logger.WriteLine($"------- Startup Battery Limit {limit} -------");
acpi = new AsusACPI();
acpi.DeviceSet(AsusACPI.BatteryLimit, limit, "Limit");
}
}
catch (Exception ex)
{
Logger.WriteLine("Startup Battery Limit Error: " + ex.Message);
}
}
} }
} }

View File

@@ -771,15 +771,6 @@ namespace GHelper.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to Donate.
/// </summary>
internal static string Donate {
get {
return ResourceManager.GetString("Donate", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Download Color Profiles. /// Looks up a localized string similar to Download Color Profiles.
/// </summary> /// </summary>
@@ -1205,42 +1196,6 @@ namespace GHelper.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to Legend.
/// </summary>
internal static string Legend {
get {
return ResourceManager.GetString("Legend", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Can&apos;t check local version.
/// </summary>
internal static string LegendGray {
get {
return ResourceManager.GetString("LegendGray", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Updated.
/// </summary>
internal static string LegendGreen {
get {
return ResourceManager.GetString("LegendGreen", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Update Available.
/// </summary>
internal static string LegendRed {
get {
return ResourceManager.GetString("LegendRed", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Lid. /// Looks up a localized string similar to Lid.
/// </summary> /// </summary>
@@ -1620,7 +1575,7 @@ namespace GHelper.Properties {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to Switch to Eco on battery and to Standard when plugged in. /// Looks up a localized string similar to Switch to Eco on battery and to Standard when plugged.
/// </summary> /// </summary>
internal static string OptimizedGPUTooltip { internal static string OptimizedGPUTooltip {
get { get {
@@ -1980,7 +1935,7 @@ namespace GHelper.Properties {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to Touchscreen. /// Looks up a localized string similar to .
/// </summary> /// </summary>
internal static string Touchscreen { internal static string Touchscreen {
get { get {

View File

@@ -744,7 +744,7 @@ Vil du stadig fortsætte?</value>
<value>Toggle Touchscreen</value> <value>Toggle Touchscreen</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -800,22 +800,4 @@ Vil du stadig fortsætte?</value>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>Zoom</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Donate</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Can't check local version</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update Available</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Updated</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -151,7 +151,7 @@
<value>Animationsgeschwindigkeit</value> <value>Animationsgeschwindigkeit</value>
</data> </data>
<data name="AnimeMatrix" xml:space="preserve"> <data name="AnimeMatrix" xml:space="preserve">
<value>AniMe Matrix</value> <value>AniMeMatrix</value>
</data> </data>
<data name="AppAlreadyRunning" xml:space="preserve"> <data name="AppAlreadyRunning" xml:space="preserve">
<value>Die Anwendung läuft bereits</value> <value>Die Anwendung läuft bereits</value>
@@ -744,7 +744,7 @@ Trotzdem fortfahren?</value>
<value>Touchscreen umschalten</value> <value>Touchscreen umschalten</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -783,7 +783,7 @@ Trotzdem fortfahren?</value>
<value>Darstellungsmodi sind nicht verfügbar, wenn HDR aktiv ist.</value> <value>Darstellungsmodi sind nicht verfügbar, wenn HDR aktiv ist.</value>
</data> </data>
<data name="VisualModesScreen" xml:space="preserve"> <data name="VisualModesScreen" xml:space="preserve">
<value>Modi nicht verfügbar, wenn Laptop-Bildschirm aus ist.</value> <value>Darstellungsmodi sind nicht verfügbar, wenn Laptop-Bildschirm aus ist.</value>
</data> </data>
<data name="VolumeDown" xml:space="preserve"> <data name="VolumeDown" xml:space="preserve">
<value>Lautstärke verringern</value> <value>Lautstärke verringern</value>
@@ -800,22 +800,4 @@ Trotzdem fortfahren?</value>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>Zoom</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Spenden</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legende</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Kann lokale Version nicht überprüfen</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update verfügbar</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Aktuell</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -744,7 +744,7 @@
<value>Alternar pantalla táctil</value> <value>Alternar pantalla táctil</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Pantalla táctil</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -800,22 +800,4 @@
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>Zoom</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Donar</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Leyenda</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>No se puede comprobar la versión local</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Actualización disponible</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Actualizado</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -226,7 +226,7 @@
<value>Tout</value> <value>Tout</value>
</data> </data>
<data name="AuraZoneDock" xml:space="preserve"> <data name="AuraZoneDock" xml:space="preserve">
<value>Station d'accueil</value> <value>Dock</value>
</data> </data>
<data name="AuraZoneLogo" xml:space="preserve"> <data name="AuraZoneLogo" xml:space="preserve">
<value>Logo</value> <value>Logo</value>
@@ -495,7 +495,7 @@ Voulez-vous continuer ?</value>
<value>Écran</value> <value>Écran</value>
</data> </data>
<data name="LEDStatusIndicators" xml:space="preserve"> <data name="LEDStatusIndicators" xml:space="preserve">
<value>Indicateurs d'état LED</value> <value>LED Status Indicators</value>
</data> </data>
<data name="Lid" xml:space="preserve"> <data name="Lid" xml:space="preserve">
<value>Capot</value> <value>Capot</value>
@@ -507,7 +507,7 @@ Voulez-vous continuer ?</value>
<value>Éclairage</value> <value>Éclairage</value>
</data> </data>
<data name="LockScreen" xml:space="preserve"> <data name="LockScreen" xml:space="preserve">
<value>Écran de verrouillage</value> <value>Lock Screen</value>
</data> </data>
<data name="Logo" xml:space="preserve"> <data name="Logo" xml:space="preserve">
<value>Logo</value> <value>Logo</value>
@@ -585,10 +585,10 @@ Voulez-vous continuer ?</value>
<value>Synchroniser avec le pointeur</value> <value>Synchroniser avec le pointeur</value>
</data> </data>
<data name="Multizone" xml:space="preserve"> <data name="Multizone" xml:space="preserve">
<value>Multi-zones</value> <value>Multi Zone</value>
</data> </data>
<data name="MultizoneStrong" xml:space="preserve"> <data name="MultizoneStrong" xml:space="preserve">
<value>Forte zone multiple</value> <value>Multi Zone Strong</value>
</data> </data>
<data name="Muted" xml:space="preserve"> <data name="Muted" xml:space="preserve">
<value>Son désactivé</value> <value>Son désactivé</value>
@@ -741,10 +741,10 @@ Voulez-vous continuer ?</value>
<value>Allumer l'écran</value> <value>Allumer l'écran</value>
</data> </data>
<data name="ToggleTouchscreen" xml:space="preserve"> <data name="ToggleTouchscreen" xml:space="preserve">
<value>Activer/désactiver l'écran tactile</value> <value>Toggle Touchscreen</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -800,22 +800,4 @@ Voulez-vous continuer ?</value>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>Zoom</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Donate</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Can't check local version</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update Available</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Updated</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -744,7 +744,7 @@ Do you still want to continue?</value>
<value>Érintőképernyő ki-/bekapcsolása</value> <value>Érintőképernyő ki-/bekapcsolása</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbó</value> <value>Turbó</value>
@@ -800,22 +800,4 @@ Do you still want to continue?</value>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>Zoom</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Donate</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Can't check local version</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update Available</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Updated</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -744,7 +744,7 @@ Apakah Anda masih ingin melanjutkan?</value>
<value>Toggle Touchscreen</value> <value>Toggle Touchscreen</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -800,22 +800,4 @@ Apakah Anda masih ingin melanjutkan?</value>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Perbesar</value> <value>Perbesar</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Donate</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Can't check local version</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update Available</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Updated</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -744,7 +744,7 @@ Sei sicuro di voler continuare?</value>
<value>Toggle Touchscreen</value> <value>Toggle Touchscreen</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -800,22 +800,4 @@ Sei sicuro di voler continuare?</value>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>Zoom</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Donate</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Can't check local version</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update Available</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Updated</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -744,7 +744,7 @@ Do you still want to continue?</value>
<value>Toggle Touchscreen</value> <value>Toggle Touchscreen</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -800,22 +800,4 @@ Do you still want to continue?</value>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>Zoom</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Donate</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Can't check local version</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update Available</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Updated</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -744,7 +744,7 @@
<value>Toggle Touchscreen</value> <value>Toggle Touchscreen</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>터보</value> <value>터보</value>
@@ -800,22 +800,4 @@
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>확대/축소</value> <value>확대/축소</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Donate</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Can't check local version</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update Available</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Updated</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -124,7 +124,7 @@
<value>Nepavyko prisijungti prie ASUS ACPI. Programėlė be jo negali veikti. Pabandykite įdiegti Asus System Control Interface</value> <value>Nepavyko prisijungti prie ASUS ACPI. Programėlė be jo negali veikti. Pabandykite įdiegti Asus System Control Interface</value>
</data> </data>
<data name="AlertAPUMemoryRestart" xml:space="preserve"> <data name="AlertAPUMemoryRestart" xml:space="preserve">
<value>Norėdami pritaikyti pakeitimus, paleiskite įrenginį iš naujo</value> <value>Restart your device to apply changes</value>
</data> </data>
<data name="AlertAPUMemoryRestartTitle" xml:space="preserve"> <data name="AlertAPUMemoryRestartTitle" xml:space="preserve">
<value>Paleisti iš naujo?</value> <value>Paleisti iš naujo?</value>
@@ -145,7 +145,7 @@
<value>Paleisti iš naujo dabar?</value> <value>Paleisti iš naujo dabar?</value>
</data> </data>
<data name="AllyController" xml:space="preserve"> <data name="AllyController" xml:space="preserve">
<value>Ally“ valdiklis</value> <value>Ally Controller</value>
</data> </data>
<data name="AnimationSpeed" xml:space="preserve"> <data name="AnimationSpeed" xml:space="preserve">
<value>Animacijos greitis</value> <value>Animacijos greitis</value>
@@ -163,7 +163,7 @@
<value>Taikyti</value> <value>Taikyti</value>
</data> </data>
<data name="ApplyFanCurve" xml:space="preserve"> <data name="ApplyFanCurve" xml:space="preserve">
<value>Taikyti tinkintą kreivę</value> <value>Taikyti tinkintą aušintuvo kreivę</value>
</data> </data>
<data name="ApplyPowerLimits" xml:space="preserve"> <data name="ApplyPowerLimits" xml:space="preserve">
<value>Taikyti galios ribas</value> <value>Taikyti galios ribas</value>
@@ -172,7 +172,7 @@
<value>Automatiškai derinti Windows energijos režimus</value> <value>Automatiškai derinti Windows energijos režimus</value>
</data> </data>
<data name="APUMemory" xml:space="preserve"> <data name="APUMemory" xml:space="preserve">
<value>Atmintis priskirta vaizdo plokštei</value> <value>Memory Assigned to GPU</value>
</data> </data>
<data name="AsusServicesRunning" xml:space="preserve"> <data name="AsusServicesRunning" xml:space="preserve">
<value>Veikiančios Asus tarnybos</value> <value>Veikiančios Asus tarnybos</value>
@@ -202,7 +202,7 @@
<value>Apšvietimo režimas</value> <value>Apšvietimo režimas</value>
</data> </data>
<data name="AuraNormal" xml:space="preserve"> <data name="AuraNormal" xml:space="preserve">
<value>Įprastas</value> <value>Normalus</value>
</data> </data>
<data name="AuraRainbow" xml:space="preserve"> <data name="AuraRainbow" xml:space="preserve">
<value>Vaivorykštė</value> <value>Vaivorykštė</value>
@@ -244,31 +244,31 @@
<value>Automatinis</value> <value>Automatinis</value>
</data> </data>
<data name="AutoRefreshTooltip" xml:space="preserve"> <data name="AutoRefreshTooltip" xml:space="preserve">
<value>Nustatomas 60Hz dažn. taupymui, ir atgal, kuomet įkraunama</value> <value>Nustato 60Hz, kad taupytų energiją, ir atgal, kai įjungtas į lizdą</value>
</data> </data>
<data name="Awake" xml:space="preserve"> <data name="Awake" xml:space="preserve">
<value>Pabudęs</value> <value>Pabudęs</value>
</data> </data>
<data name="BacklightLow" xml:space="preserve"> <data name="BacklightLow" xml:space="preserve">
<value>Žem.</value> <value>Low</value>
</data> </data>
<data name="BacklightMax" xml:space="preserve"> <data name="BacklightMax" xml:space="preserve">
<value>Maks.</value> <value>Max</value>
</data> </data>
<data name="BacklightMid" xml:space="preserve"> <data name="BacklightMid" xml:space="preserve">
<value>Vid.</value> <value>Mid</value>
</data> </data>
<data name="BacklightOff" xml:space="preserve"> <data name="BacklightOff" xml:space="preserve">
<value>Išjungta</value> <value>Off</value>
</data> </data>
<data name="BacklightTimeout" xml:space="preserve"> <data name="BacklightTimeout" xml:space="preserve">
<value>Laiko riba su lizdu / akumuliatoriumi (0 ĮJUNGTA)</value> <value>Laiko riba su lizdu / akumuliatoriumi (0 ĮJUNGTA)</value>
</data> </data>
<data name="BacklightTimeoutBattery" xml:space="preserve"> <data name="BacklightTimeoutBattery" xml:space="preserve">
<value>Foninio apšvietimo laikas akumuliatoriaus režimu</value> <value>Backlight Timeout when on battery</value>
</data> </data>
<data name="BacklightTimeoutPlugged" xml:space="preserve"> <data name="BacklightTimeoutPlugged" xml:space="preserve">
<value>Foninio apšvietimo laikas įkraunant</value> <value>Backlight Timeout when plugged</value>
</data> </data>
<data name="Balanced" xml:space="preserve"> <data name="Balanced" xml:space="preserve">
<value>Balansuotas</value> <value>Balansuotas</value>
@@ -280,13 +280,13 @@
<value>Įkrovos riba</value> <value>Įkrovos riba</value>
</data> </data>
<data name="BatteryHealth" xml:space="preserve"> <data name="BatteryHealth" xml:space="preserve">
<value>Baterijos būklė</value> <value>Sveikata</value>
</data> </data>
<data name="BatteryLimitFull" xml:space="preserve"> <data name="BatteryLimitFull" xml:space="preserve">
<value>Vienkartinė įkrova iki 100%</value> <value>Vienkartinė įkrova iki 100%</value>
</data> </data>
<data name="Binding" xml:space="preserve"> <data name="Binding" xml:space="preserve">
<value>Saistymas</value> <value>Binding</value>
</data> </data>
<data name="BindingPrimary" xml:space="preserve"> <data name="BindingPrimary" xml:space="preserve">
<value>Pirminis</value> <value>Pirminis</value>
@@ -313,7 +313,7 @@
<value>Ryškumo didinimas</value> <value>Ryškumo didinimas</value>
</data> </data>
<data name="BWTrayIcon" xml:space="preserve"> <data name="BWTrayIcon" xml:space="preserve">
<value>Naudoti juodai baltą piktogramą</value> <value>Black and white tray icon</value>
</data> </data>
<data name="Calibrate" xml:space="preserve"> <data name="Calibrate" xml:space="preserve">
<value>Kalibruoti</value> <value>Kalibruoti</value>
@@ -325,10 +325,10 @@
<value>Spalva</value> <value>Spalva</value>
</data> </data>
<data name="Contrast" xml:space="preserve"> <data name="Contrast" xml:space="preserve">
<value>Kontrastas</value> <value>Contrast</value>
</data> </data>
<data name="Controller" xml:space="preserve"> <data name="Controller" xml:space="preserve">
<value>Valdiklis</value> <value>Controller</value>
</data> </data>
<data name="CPUBoost" xml:space="preserve"> <data name="CPUBoost" xml:space="preserve">
<value>CPU spartinimas</value> <value>CPU spartinimas</value>
@@ -343,10 +343,10 @@
<value>Numatytas</value> <value>Numatytas</value>
</data> </data>
<data name="DisableController" xml:space="preserve"> <data name="DisableController" xml:space="preserve">
<value>Išjungti valdiklį</value> <value>Disable Controller</value>
</data> </data>
<data name="DisableOnLidClose" xml:space="preserve"> <data name="DisableOnLidClose" xml:space="preserve">
<value>Išjungti uždarius gaubtą</value> <value>Disable on lid close</value>
</data> </data>
<data name="DisableOverdrive" xml:space="preserve"> <data name="DisableOverdrive" xml:space="preserve">
<value>Išjungti ekrano pikselių spartinimą</value> <value>Išjungti ekrano pikselių spartinimą</value>
@@ -355,7 +355,7 @@
<value>Iškrovimas</value> <value>Iškrovimas</value>
</data> </data>
<data name="DownloadColorProfiles" xml:space="preserve"> <data name="DownloadColorProfiles" xml:space="preserve">
<value>Atsisiųsti spalvų profilius</value> <value>Download Color Profiles</value>
</data> </data>
<data name="DownloadUpdate" xml:space="preserve"> <data name="DownloadUpdate" xml:space="preserve">
<value>Atsisiųsti</value> <value>Atsisiųsti</value>
@@ -364,13 +364,13 @@
<value>Tvarkyklės ir programinė įranga</value> <value>Tvarkyklės ir programinė įranga</value>
</data> </data>
<data name="EcoGPUTooltip" xml:space="preserve"> <data name="EcoGPUTooltip" xml:space="preserve">
<value>Išjungia dGPU akumuliatoriaus taupymui</value> <value>Išjungia dGPU, kad taupytų energiją</value>
</data> </data>
<data name="EcoMode" xml:space="preserve"> <data name="EcoMode" xml:space="preserve">
<value>Ekonomiškas</value> <value>Ekonomiškas</value>
</data> </data>
<data name="EnableGPUOnShutdown" xml:space="preserve"> <data name="EnableGPUOnShutdown" xml:space="preserve">
<value>Įgalinti GPU išjungimo metu (apsauga nuo „Eco“ režimo problemos)</value> <value>Enable GPU on shutdown (prevents issue with Eco mode)</value>
</data> </data>
<data name="EnableOptimusText" xml:space="preserve"> <data name="EnableOptimusText" xml:space="preserve">
<value>Jei ekrano režimas NVIDIA valdymo skyde yra nenustatytas į Optimus, kai dGPU yra išjungtas perjungus į ekonominį režimą, gali kilti problemų su ryškumo valdymu iki kito paleidimo iš naujo. <value>Jei ekrano režimas NVIDIA valdymo skyde yra nenustatytas į Optimus, kai dGPU yra išjungtas perjungus į ekonominį režimą, gali kilti problemų su ryškumo valdymu iki kito paleidimo iš naujo.
@@ -384,7 +384,7 @@ Vis tiek norite tęsti?</value>
<value>Energijos nustatymai</value> <value>Energijos nustatymai</value>
</data> </data>
<data name="Export" xml:space="preserve"> <data name="Export" xml:space="preserve">
<value>Eksportuoti profilį</value> <value>Export Profile</value>
</data> </data>
<data name="Extra" xml:space="preserve"> <data name="Extra" xml:space="preserve">
<value>Išplėstiniai</value> <value>Išplėstiniai</value>
@@ -420,16 +420,16 @@ Vis tiek norite tęsti?</value>
<value>Aušintuvai + galia</value> <value>Aušintuvai + galia</value>
</data> </data>
<data name="FlickerFreeDimming" xml:space="preserve"> <data name="FlickerFreeDimming" xml:space="preserve">
<value>Užtamsinimas be mirgėjimo</value> <value>Flicker-free Dimming</value>
</data> </data>
<data name="FnLock" xml:space="preserve"> <data name="FnLock" xml:space="preserve">
<value>Apdoroti Fn+F sparčiuosius klavišus be Fn</value> <value>Apdoroti Fn+F sparčiuosius klavišus be Fn</value>
</data> </data>
<data name="FnLockOff" xml:space="preserve"> <data name="FnLockOff" xml:space="preserve">
<value>FN užraktas išjungtas</value> <value>FN-Lock Off</value>
</data> </data>
<data name="FnLockOn" xml:space="preserve"> <data name="FnLockOn" xml:space="preserve">
<value>FN užraktas įjungtas</value> <value>FN-Lock On</value>
</data> </data>
<data name="GPUBoost" xml:space="preserve"> <data name="GPUBoost" xml:space="preserve">
<value>Dinaminis spartinimas</value> <value>Dinaminis spartinimas</value>
@@ -456,7 +456,7 @@ Vis tiek norite tęsti?</value>
<value>Tik dGPU</value> <value>Tik dGPU</value>
</data> </data>
<data name="GPUPower" xml:space="preserve"> <data name="GPUPower" xml:space="preserve">
<value>GPU galia</value> <value>GPU Power</value>
</data> </data>
<data name="GPUSettings" xml:space="preserve"> <data name="GPUSettings" xml:space="preserve">
<value>GPU nustatymai</value> <value>GPU nustatymai</value>
@@ -465,16 +465,16 @@ Vis tiek norite tęsti?</value>
<value>Temperatūros tikslas</value> <value>Temperatūros tikslas</value>
</data> </data>
<data name="HibernateAfter" xml:space="preserve"> <data name="HibernateAfter" xml:space="preserve">
<value>Užmigimo laikas akumuliatoriaus režimu (0 IŠJUNGTA)</value> <value>Minutės iki miego su akumuliatoriumi (0 IŠJUNGTA)</value>
</data> </data>
<data name="High" xml:space="preserve"> <data name="High" xml:space="preserve">
<value>Aukštas</value> <value>Aukštas</value>
</data> </data>
<data name="ImageRotation" xml:space="preserve"> <data name="ImageRotation" xml:space="preserve">
<value>Atvaizdo pasukimas</value> <value>Image Rotation</value>
</data> </data>
<data name="Import" xml:space="preserve"> <data name="Import" xml:space="preserve">
<value>Importuoti profilį</value> <value>Import Profile</value>
</data> </data>
<data name="KeyBindings" xml:space="preserve"> <data name="KeyBindings" xml:space="preserve">
<value>Klavišų priskyrimas</value> <value>Klavišų priskyrimas</value>
@@ -483,7 +483,7 @@ Vis tiek norite tęsti?</value>
<value>Klaviatūra</value> <value>Klaviatūra</value>
</data> </data>
<data name="KillGpuApps" xml:space="preserve"> <data name="KillGpuApps" xml:space="preserve">
<value>Sustabdyti visas GPU naudojančias programėles, kai perjungiama į ekon. režimą</value> <value>Sustabdyti visas GPU naudojančias programėles, kai perjungiama į ekonomišką režimą</value>
</data> </data>
<data name="LaptopBacklight" xml:space="preserve"> <data name="LaptopBacklight" xml:space="preserve">
<value>Apšvietimas</value> <value>Apšvietimas</value>
@@ -495,7 +495,7 @@ Vis tiek norite tęsti?</value>
<value>Ekranas</value> <value>Ekranas</value>
</data> </data>
<data name="LEDStatusIndicators" xml:space="preserve"> <data name="LEDStatusIndicators" xml:space="preserve">
<value>LED būsenos indikatoriai</value> <value>LED Status Indicators</value>
</data> </data>
<data name="Lid" xml:space="preserve"> <data name="Lid" xml:space="preserve">
<value>Dangtis</value> <value>Dangtis</value>
@@ -507,7 +507,7 @@ Vis tiek norite tęsti?</value>
<value>Apšvietimas</value> <value>Apšvietimas</value>
</data> </data>
<data name="LockScreen" xml:space="preserve"> <data name="LockScreen" xml:space="preserve">
<value>Užrakinimo ekranas</value> <value>Lock Screen</value>
</data> </data>
<data name="Logo" xml:space="preserve"> <data name="Logo" xml:space="preserve">
<value>Logotipas</value> <value>Logotipas</value>
@@ -516,10 +516,10 @@ Vis tiek norite tęsti?</value>
<value>Žemas</value> <value>Žemas</value>
</data> </data>
<data name="LSDeadzones" xml:space="preserve"> <data name="LSDeadzones" xml:space="preserve">
<value>Kairiojo jungiklio nejautrumo zonos</value> <value>Left Stick Deadzones</value>
</data> </data>
<data name="LTDeadzones" xml:space="preserve"> <data name="LTDeadzones" xml:space="preserve">
<value>Kairiojo jungiklio nejautrumo zonos</value> <value>Left Trigger Deadzones</value>
</data> </data>
<data name="MatrixAudio" xml:space="preserve"> <data name="MatrixAudio" xml:space="preserve">
<value>Garso vizualizatorius</value> <value>Garso vizualizatorius</value>
@@ -549,10 +549,10 @@ Vis tiek norite tęsti?</value>
<value>Paveikslėlis</value> <value>Paveikslėlis</value>
</data> </data>
<data name="MaxRefreshTooltip" xml:space="preserve"> <data name="MaxRefreshTooltip" xml:space="preserve">
<value>Maksimalus kadrų dažnis mažesnei delsai</value> <value>Maksimalus kadrų dažnis mažesnę delsą</value>
</data> </data>
<data name="MinRefreshTooltip" xml:space="preserve"> <data name="MinRefreshTooltip" xml:space="preserve">
<value>60Hz kadrų dažnis energijos taupymui</value> <value>60Hz kadrų dažnis, kad taupytumėte energiją</value>
</data> </data>
<data name="Minute" xml:space="preserve"> <data name="Minute" xml:space="preserve">
<value>min.</value> <value>min.</value>
@@ -561,7 +561,7 @@ Vis tiek norite tęsti?</value>
<value>min.</value> <value>min.</value>
</data> </data>
<data name="MouseAngleSnapping" xml:space="preserve"> <data name="MouseAngleSnapping" xml:space="preserve">
<value>Kampinis fiksavimas</value> <value>Angle Snapping</value>
</data> </data>
<data name="MouseAutoPowerOff" xml:space="preserve"> <data name="MouseAutoPowerOff" xml:space="preserve">
<value>Automatiškai išjungti po</value> <value>Automatiškai išjungti po</value>
@@ -570,7 +570,7 @@ Vis tiek norite tęsti?</value>
<value>Klavišo atsakas</value> <value>Klavišo atsakas</value>
</data> </data>
<data name="MouseImportFailed" xml:space="preserve"> <data name="MouseImportFailed" xml:space="preserve">
<value>Importuoti nepavyko. Pasirinktas failas nėra galiojantis pelės profilis arba yra sugadintas.</value> <value>Import failed. Selected file is not a valid mouse profile or corrutpted.</value>
</data> </data>
<data name="MouseLiftOffDistance" xml:space="preserve"> <data name="MouseLiftOffDistance" xml:space="preserve">
<value>Pakilimo atstumas</value> <value>Pakilimo atstumas</value>
@@ -585,13 +585,13 @@ Vis tiek norite tęsti?</value>
<value>Sinchronizuoti su pele</value> <value>Sinchronizuoti su pele</value>
</data> </data>
<data name="Multizone" xml:space="preserve"> <data name="Multizone" xml:space="preserve">
<value>Kelios zonos</value> <value>Multi Zone</value>
</data> </data>
<data name="MultizoneStrong" xml:space="preserve"> <data name="MultizoneStrong" xml:space="preserve">
<value>Kelių zonų stiprumas</value> <value>Multi Zone Strong</value>
</data> </data>
<data name="Muted" xml:space="preserve"> <data name="Muted" xml:space="preserve">
<value>Išjungta</value> <value>Muted</value>
</data> </data>
<data name="MuteMic" xml:space="preserve"> <data name="MuteMic" xml:space="preserve">
<value>Mikrofono nutildymas</value> <value>Mikrofono nutildymas</value>
@@ -609,13 +609,13 @@ Vis tiek norite tęsti?</value>
<value>Neprijungta</value> <value>Neprijungta</value>
</data> </data>
<data name="Off" xml:space="preserve"> <data name="Off" xml:space="preserve">
<value>Išjungta</value> <value>Off</value>
</data> </data>
<data name="On" xml:space="preserve"> <data name="On" xml:space="preserve">
<value>Įjungta</value> <value>On</value>
</data> </data>
<data name="OneZone" xml:space="preserve"> <data name="OneZone" xml:space="preserve">
<value>Viena zona</value> <value>One Zone</value>
</data> </data>
<data name="OpenGHelper" xml:space="preserve"> <data name="OpenGHelper" xml:space="preserve">
<value>Atidaryti G-Helper langą</value> <value>Atidaryti G-Helper langą</value>
@@ -624,10 +624,10 @@ Vis tiek norite tęsti?</value>
<value>Optimizuotas</value> <value>Optimizuotas</value>
</data> </data>
<data name="OptimizedGPUTooltip" xml:space="preserve"> <data name="OptimizedGPUTooltip" xml:space="preserve">
<value>Naudojant akumuliatorių įjungiamas ekon. režimas, įkraunant - stand. režimas</value> <value>Perjungti į ekonomišką, kai naudojamas akumuliatorius, ir į standartinį, kai įjungtas į lizdą</value>
</data> </data>
<data name="OptimizedUSBC" xml:space="preserve"> <data name="OptimizedUSBC" xml:space="preserve">
<value>jungti GPU optimizuotame režime, kai naudojamas USB-C įkroviklis</value> <value>Neįjungti GPU, kai naudojamas USB-C įkroviklis optimizuotame režime</value>
</data> </data>
<data name="Other" xml:space="preserve"> <data name="Other" xml:space="preserve">
<value>Kita</value> <value>Kita</value>
@@ -666,7 +666,7 @@ Vis tiek norite tęsti?</value>
<value>Išeiti</value> <value>Išeiti</value>
</data> </data>
<data name="Reset" xml:space="preserve"> <data name="Reset" xml:space="preserve">
<value>Atstatyti</value> <value>Reset</value>
</data> </data>
<data name="RestartGPU" xml:space="preserve"> <data name="RestartGPU" xml:space="preserve">
<value>Kažkas naudoja dGPU ir neleidžia įjungti ekonomiško režimo. Norite leisti G-Helper bandyti iš naujo paleisti dGPU įrenginių tvarkytuvėje? (Tęskite savo rizika)</value> <value>Kažkas naudoja dGPU ir neleidžia įjungti ekonomiško režimo. Norite leisti G-Helper bandyti iš naujo paleisti dGPU įrenginių tvarkytuvėje? (Tęskite savo rizika)</value>
@@ -675,16 +675,16 @@ Vis tiek norite tęsti?</value>
<value>RPM</value> <value>RPM</value>
</data> </data>
<data name="RSDeadzones" xml:space="preserve"> <data name="RSDeadzones" xml:space="preserve">
<value>Dešiniojo jungiklio nejautrumo zonos</value> <value>Right Stick Deadzones</value>
</data> </data>
<data name="RTDeadzones" xml:space="preserve"> <data name="RTDeadzones" xml:space="preserve">
<value>Dešiniojo jungiklio nejautrumo zonos</value> <value>Right Trigger Deadzones</value>
</data> </data>
<data name="RunOnStartup" xml:space="preserve"> <data name="RunOnStartup" xml:space="preserve">
<value>Paleisti įjungus sistemą</value> <value>Paleisti įjungus sistemą</value>
</data> </data>
<data name="ScalingQuality" xml:space="preserve"> <data name="ScalingQuality" xml:space="preserve">
<value>Mastelio kokybė</value> <value>Scaling Quality</value>
</data> </data>
<data name="ScreenPadDown" xml:space="preserve"> <data name="ScreenPadDown" xml:space="preserve">
<value>Ekrano skydelio ryškumo mažinimas</value> <value>Ekrano skydelio ryškumo mažinimas</value>
@@ -741,10 +741,10 @@ Vis tiek norite tęsti?</value>
<value>Perjungti ekraną</value> <value>Perjungti ekraną</value>
</data> </data>
<data name="ToggleTouchscreen" xml:space="preserve"> <data name="ToggleTouchscreen" xml:space="preserve">
<value>Valdyti jutiklinį ekraną</value> <value>Toggle Touchscreen</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Jutiklinis ekranas</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -756,7 +756,7 @@ Vis tiek norite tęsti?</value>
<value>Išjungti naudojant akumuliatorių</value> <value>Išjungti naudojant akumuliatorių</value>
</data> </data>
<data name="UltimateGPUTooltip" xml:space="preserve"> <data name="UltimateGPUTooltip" xml:space="preserve">
<value>Maksimaliai padidinamas kadrų kiekis, nukreipiant ekraną į dGPU</value> <value>Nukreipia ekraną į dGPU, kad maksimizuotų kadrų dažnį</value>
</data> </data>
<data name="UltimateMode" xml:space="preserve"> <data name="UltimateMode" xml:space="preserve">
<value>Maksimalus</value> <value>Maksimalus</value>
@@ -765,7 +765,7 @@ Vis tiek norite tęsti?</value>
<value>Įtampos mažinimas yra eksperimentinė ir pavojinga funkcija. Jei pritaikytos reikšmės yra per mažos jūsų aparatinei įrangai, ji gali tapti nestabili, išsijungti arba pažeisti duomenų vientisumą. Jei norite pabandyti, iš pirmo pradėkite nuo mažų reikšmių, spustelėkite „Taikyti“ ir išbandykite, kas jums tinka.</value> <value>Įtampos mažinimas yra eksperimentinė ir pavojinga funkcija. Jei pritaikytos reikšmės yra per mažos jūsų aparatinei įrangai, ji gali tapti nestabili, išsijungti arba pažeisti duomenų vientisumą. Jei norite pabandyti, iš pirmo pradėkite nuo mažų reikšmių, spustelėkite „Taikyti“ ir išbandykite, kas jums tinka.</value>
</data> </data>
<data name="Unmuted" xml:space="preserve"> <data name="Unmuted" xml:space="preserve">
<value>Įjungta</value> <value>Unmuted</value>
</data> </data>
<data name="Updates" xml:space="preserve"> <data name="Updates" xml:space="preserve">
<value>Naujinimai</value> <value>Naujinimai</value>
@@ -780,10 +780,10 @@ Vis tiek norite tęsti?</value>
<value>Vizualinis režimas</value> <value>Vizualinis režimas</value>
</data> </data>
<data name="VisualModesHDR" xml:space="preserve"> <data name="VisualModesHDR" xml:space="preserve">
<value>Vizualiniai režimai nepasiekiami, kuomet įjungtas HDR</value> <value>Visual Modes are not available when HDR is active</value>
</data> </data>
<data name="VisualModesScreen" xml:space="preserve"> <data name="VisualModesScreen" xml:space="preserve">
<value>Vizualiniai režimai nepasiekiami, kuomet kompiuterio ekranas išjungtas</value> <value>Visual Modes are not available when laptop screen is off</value>
</data> </data>
<data name="VolumeDown" xml:space="preserve"> <data name="VolumeDown" xml:space="preserve">
<value>Garsumo mažinimas</value> <value>Garsumo mažinimas</value>
@@ -798,24 +798,6 @@ Vis tiek norite tęsti?</value>
<value>Visada rodyti programėlės langą viršuje</value> <value>Visada rodyti programėlės langą viršuje</value>
</data> </data>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Mastelis</value> <value>Zoom</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Paremti</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legenda</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Nepavyko patikrinti vietinės versijos</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Išleista nauja versija</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Atnaujinta</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -744,7 +744,7 @@ Nadal chcesz kontynuować?</value>
<value>Włącz/wyłącz ekran dotykowy</value> <value>Włącz/wyłącz ekran dotykowy</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Ekran dotykowy</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -800,22 +800,4 @@ Nadal chcesz kontynuować?</value>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Przybliżenie</value> <value>Przybliżenie</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Wesprzyj</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legenda</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Brak informacji</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Dostępna aktualizacja</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Wersja aktualna</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -744,7 +744,7 @@ Do you still want to continue?</value>
<value>Toggle Touchscreen</value> <value>Toggle Touchscreen</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -800,22 +800,4 @@ Do you still want to continue?</value>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>Zoom</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Donate</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Can't check local version</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update Available</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Updated</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -744,7 +744,7 @@ Quer prosseguir?</value>
<value>Toggle Touchscreen</value> <value>Toggle Touchscreen</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -800,22 +800,4 @@ Quer prosseguir?</value>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>Zoom</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Donate</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Can't check local version</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update Available</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Updated</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -744,7 +744,7 @@ Do you still want to continue?</value>
<value>Toggle Touchscreen</value> <value>Toggle Touchscreen</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value> <value />
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -800,22 +800,4 @@ Do you still want to continue?</value>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>Zoom</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Donate</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Can't check local version</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update Available</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Updated</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -744,7 +744,7 @@
<value>Toggle Touchscreen</value> <value>Toggle Touchscreen</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -800,22 +800,4 @@
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>Zoom</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Donate</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Can't check local version</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update Available</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Updated</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -744,7 +744,7 @@ Yine de devam etmek istiyor musunuz?</value>
<value>Dokunmatik Ekranı Değiştir</value> <value>Dokunmatik Ekranı Değiştir</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Dokunmatik ekran</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -800,22 +800,4 @@ Yine de devam etmek istiyor musunuz?</value>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Yakınlaştır</value> <value>Yakınlaştır</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Bağış</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Gösterge</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Yerel sürüm denetlenemiyor</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Güncelleme Mevcut</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Güncellendi</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -316,7 +316,7 @@
<value>Чорно-біла іконка трею</value> <value>Чорно-біла іконка трею</value>
</data> </data>
<data name="Calibrate" xml:space="preserve"> <data name="Calibrate" xml:space="preserve">
<value>Калібр.</value> <value>Калібрування</value>
</data> </data>
<data name="Charging" xml:space="preserve"> <data name="Charging" xml:space="preserve">
<value>Зарядка</value> <value>Зарядка</value>
@@ -744,7 +744,7 @@
<value>Сенсорний екран</value> <value>Сенсорний екран</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Сенсорний екран</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Турбо</value> <value>Турбо</value>
@@ -800,22 +800,4 @@
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Зум</value> <value>Зум</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Донат</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Легенда</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Немає даних</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Є оновлення</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Оновлено</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -744,7 +744,7 @@ Do you still want to continue?</value>
<value>Toggle Touchscreen</value> <value>Toggle Touchscreen</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>Touchscreen</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
@@ -800,22 +800,4 @@ Do you still want to continue?</value>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>Zoom</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>Donate</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>Can't check local version</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>Update Available</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>Updated</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -741,10 +741,10 @@
<value>关闭屏幕</value> <value>关闭屏幕</value>
</data> </data>
<data name="ToggleTouchscreen" xml:space="preserve"> <data name="ToggleTouchscreen" xml:space="preserve">
<value>切换触摸屏</value> <value>Toggle Touchscreen</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>触摸屏</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>增强模式</value> <value>增强模式</value>
@@ -800,22 +800,4 @@
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>缩放</value> <value>缩放</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>赞助</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>无法检查本地版本</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>有可用更新</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>已更新</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -157,7 +157,7 @@
<value>程式正在執行</value> <value>程式正在執行</value>
</data> </data>
<data name="AppAlreadyRunningText" xml:space="preserve"> <data name="AppAlreadyRunningText" xml:space="preserve">
<value>G-Helper 正在執行。 請檢查右下系統匣。</value> <value>G-Helper正在執行。 請檢查右下系統匣。</value>
</data> </data>
<data name="Apply" xml:space="preserve"> <data name="Apply" xml:space="preserve">
<value>套用</value> <value>套用</value>
@@ -169,10 +169,10 @@
<value>套用功率限制</value> <value>套用功率限制</value>
</data> </data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve"> <data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>自動調整 Windows 電源模式</value> <value>自動調整Windows電源模式</value>
</data> </data>
<data name="APUMemory" xml:space="preserve"> <data name="APUMemory" xml:space="preserve">
<value>分配給 GPU 的記憶體</value> <value>分配給GPU的記憶體</value>
</data> </data>
<data name="AsusServicesRunning" xml:space="preserve"> <data name="AsusServicesRunning" xml:space="preserve">
<value>執行中的華碩服務</value> <value>執行中的華碩服務</value>
@@ -295,7 +295,7 @@
<value>次要</value> <value>次要</value>
</data> </data>
<data name="BiosAndDriverUpdates" xml:space="preserve"> <data name="BiosAndDriverUpdates" xml:space="preserve">
<value>BIOS 與驅動程式更新</value> <value>BIOS與驅動程式更新</value>
</data> </data>
<data name="Boot" xml:space="preserve"> <data name="Boot" xml:space="preserve">
<value>開機時</value> <value>開機時</value>
@@ -744,7 +744,7 @@
<value>切換螢幕觸控</value> <value>切換螢幕觸控</value>
</data> </data>
<data name="Touchscreen" xml:space="preserve"> <data name="Touchscreen" xml:space="preserve">
<value>觸控螢幕</value> <value/>
</data> </data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>極速</value> <value>極速</value>
@@ -800,22 +800,4 @@
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>縮放</value> <value>縮放</value>
</data> </data>
<data name="Donate" xml:space="preserve"> </root>
<value>捐贈</value>
</data>
<data name="Legend" xml:space="preserve">
<value>Legend</value>
</data>
<data name="LegendGray" xml:space="preserve">
<value>無法檢查本機版本</value>
<comment>Can't check local version</comment>
</data>
<data name="LegendRed" xml:space="preserve">
<value>有可用的更新</value>
<comment>Update Available</comment>
</data>
<data name="LegendGreen" xml:space="preserve">
<value>已更新</value>
<comment>Updated</comment>
</data>
</root>

View File

@@ -41,7 +41,6 @@ namespace Ryzen
//RAPHAEL/DRAGON RANGE - 10 //RAPHAEL/DRAGON RANGE - 10
//MENDOCINO - 11 //MENDOCINO - 11
//HAWKPOINT - 12 //HAWKPOINT - 12
//STRIXPOINT - 13
public static void Init() public static void Init()
{ {
@@ -78,7 +77,7 @@ namespace Ryzen
FAMID = 1; //PICASSO FAMID = 1; //PICASSO
} }
if (CPUModel.Contains("Family " + Convert.ToString(23)) && CPUModel.Contains("Model " + Convert.ToString(32))) if (CPUModel.Contains("Model " + Convert.ToString(32)))
{ {
FAMID = 2; //DALI FAMID = 2; //DALI
} }
@@ -128,11 +127,6 @@ namespace Ryzen
FAMID = 12; //HAWKPOINT FAMID = 12; //HAWKPOINT
} }
if (CPUModel.Contains("Family " + Convert.ToString(26)) && CPUModel.Contains("Model " + Convert.ToString(36)))
{
FAMID = 13; //STRIXPOINT
}
Logger.WriteLine($"CPU: {FAMID} - {CPUName} - {CPUModel}"); Logger.WriteLine($"CPU: {FAMID} - {CPUName} - {CPUModel}");
SetAddresses(); SetAddresses();
@@ -147,7 +141,7 @@ namespace Ryzen
public static bool IsSupportedUV() public static bool IsSupportedUV()
{ {
if (CPUName.Length == 0) Init(); if (CPUName.Length == 0) Init();
return CPUName.Contains("Ryzen AI 9") || CPUName.Contains("Ryzen 9") || CPUName.Contains("4900H") || CPUName.Contains("4800H") || CPUName.Contains("4600H"); return CPUName.Contains("Ryzen 9") || CPUName.Contains("4900H") || CPUName.Contains("4800H") || CPUName.Contains("4600H");
} }
public static bool IsSupportedUViGPU() public static bool IsSupportedUViGPU()
@@ -244,16 +238,6 @@ namespace Ryzen
Smu.PSMU_ADDR_RSP = 0x3B10a80; Smu.PSMU_ADDR_RSP = 0x3B10a80;
Smu.PSMU_ADDR_ARG = 0x3B10a88; Smu.PSMU_ADDR_ARG = 0x3B10a88;
} }
else if (FAMID == 13)
{
Smu.MP1_ADDR_MSG = 0x3B10928;
Smu.MP1_ADDR_RSP = 0x3B10978;
Smu.MP1_ADDR_ARG = 0x3B10998;
Smu.PSMU_ADDR_MSG = 0x3B10a20;
Smu.PSMU_ADDR_RSP = 0x3B10a80;
Smu.PSMU_ADDR_ARG = 0x3B10a88;
}
else if (FAMID == 4 || FAMID == 6) else if (FAMID == 4 || FAMID == 6)
{ {
Smu.MP1_ADDR_MSG = 0x3B10530; Smu.MP1_ADDR_MSG = 0x3B10530;

View File

@@ -22,7 +22,6 @@ namespace Ryzen
//RAPHAEL/DRAGON RANGE - 10 //RAPHAEL/DRAGON RANGE - 10
//MENDOCINO - 11 //MENDOCINO - 11
//HAWKPOINT - 12 //HAWKPOINT - 12
//STRIXPOINT - 13
public static Smu RyzenAccess = new Smu(false); public static Smu RyzenAccess = new Smu(false);
public static int FAMID = RyzenControl.FAMID; public static int FAMID = RyzenControl.FAMID;
@@ -50,8 +49,7 @@ namespace Ryzen
case 9: case 9:
case 11: case 11:
case 12: case 12:
case 13: RyzenAccess.SendMp1(0x14, ref Args);
result = RyzenAccess.SendMp1(0x14, ref Args);
result = RyzenAccess.SendPsmu(0x31, ref Args); result = RyzenAccess.SendPsmu(0x31, ref Args);
break; break;
default: default:
@@ -63,6 +61,32 @@ namespace Ryzen
} }
//STAMP2 Limit
public static Smu.Status? set_stapm2_limit(uint value)
{
RyzenAccess.Initialize();
uint[] Args = new uint[6];
Args[0] = value;
Smu.Status? result = null;
switch (FAMID)
{
case 3:
case 5:
case 7:
case 8:
case 9:
case 11:
case 12:
result = RyzenAccess.SendPsmu(0x31, ref Args);
break;
default:
break;
}
RyzenAccess.Deinitialize();
return result;
}
//Fast Limit //Fast Limit
public static Smu.Status? set_fast_limit(uint value) public static Smu.Status? set_fast_limit(uint value)
{ {
@@ -85,9 +109,7 @@ namespace Ryzen
case 9: case 9:
case 11: case 11:
case 12: case 12:
case 13:
result = RyzenAccess.SendMp1(0x15, ref Args); result = RyzenAccess.SendMp1(0x15, ref Args);
result = RyzenAccess.SendPsmu(0x32, ref Args);
break; break;
default: default:
break; break;
@@ -118,10 +140,7 @@ namespace Ryzen
case 9: case 9:
case 11: case 11:
case 12: case 12:
case 13:
result = RyzenAccess.SendMp1(0x16, ref Args); result = RyzenAccess.SendMp1(0x16, ref Args);
result = RyzenAccess.SendPsmu(0x33, ref Args);
result = RyzenAccess.SendPsmu(0x34, ref Args);
break; break;
default: default:
break; break;
@@ -157,12 +176,11 @@ namespace Ryzen
case 9: case 9:
case 11: case 11:
case 12: case 12:
case 13:
result = RyzenAccess.SendMp1(0x19, ref Args); result = RyzenAccess.SendMp1(0x19, ref Args);
break; break;
case 4: case 4:
case 6: case 6:
result = RyzenAccess.SendMp1(0x23, ref Args); RyzenAccess.SendMp1(0x23, ref Args);
result = RyzenAccess.SendPsmu(0x56, ref Args); result = RyzenAccess.SendPsmu(0x56, ref Args);
break; break;
case 10: case 10:
@@ -176,6 +194,37 @@ namespace Ryzen
return result; return result;
} }
//Skin Temp limit
public static Smu.Status? set_apu_skin_temp_limit(uint value)
{
RyzenAccess.Initialize();
uint[] Args = new uint[6];
Args[0] = value;
Smu.Status? result = null;
switch (FAMID)
{
case 5:
case 8:
case 9:
case 11:
case 12:
result = RyzenAccess.SendMp1(0x33, ref Args);
break;
case 3:
case 7:
result = RyzenAccess.SendMp1(0x38, ref Args);
break;
default:
break;
}
RyzenAccess.Deinitialize();
return result;
}
//Set All Core Curve Optimiser //Set All Core Curve Optimiser
public static Smu.Status? set_coall(int value) public static Smu.Status? set_coall(int value)
{ {
@@ -192,12 +241,12 @@ namespace Ryzen
{ {
case 3: case 3:
case 7: case 7:
result = RyzenAccess.SendMp1(0x55, ref Args); RyzenAccess.SendMp1(0x55, ref Args);
result = RyzenAccess.SendPsmu(0xB1, ref Args); result = RyzenAccess.SendPsmu(0xB1, ref Args);
break; break;
case 4: case 4:
case 6: case 6:
result = RyzenAccess.SendMp1(0x36, ref Args); RyzenAccess.SendMp1(0x36, ref Args);
result = RyzenAccess.SendPsmu(0xB, ref Args); result = RyzenAccess.SendPsmu(0xB, ref Args);
break; break;
case 5: case 5:
@@ -205,7 +254,6 @@ namespace Ryzen
case 9: case 9:
case 11: case 11:
case 12: case 12:
case 13:
result = RyzenAccess.SendPsmu(0x5D, ref Args); result = RyzenAccess.SendPsmu(0x5D, ref Args);
break; break;
case 10: case 10:
@@ -237,7 +285,7 @@ namespace Ryzen
{ {
case 3: case 3:
case 7: case 7:
result = RyzenAccess.SendMp1(0x64, ref Args); RyzenAccess.SendMp1(0x64, ref Args);
result = RyzenAccess.SendPsmu(0x57, ref Args); result = RyzenAccess.SendPsmu(0x57, ref Args);
break; break;
case 5: case 5:
@@ -245,7 +293,6 @@ namespace Ryzen
case 9: case 9:
case 11: case 11:
case 12: case 12:
case 13:
result = RyzenAccess.SendPsmu(0xb7, ref Args); result = RyzenAccess.SendPsmu(0xb7, ref Args);
break; break;
default: default:

View File

@@ -93,7 +93,6 @@ namespace GHelper
buttonMatrix.Text = Properties.Strings.PictureGif; buttonMatrix.Text = Properties.Strings.PictureGif;
buttonQuit.Text = Properties.Strings.Quit; buttonQuit.Text = Properties.Strings.Quit;
buttonUpdates.Text = Properties.Strings.Updates; buttonUpdates.Text = Properties.Strings.Updates;
buttonDonate.Text = Properties.Strings.Donate;
buttonController.Text = Properties.Strings.Controller; buttonController.Text = Properties.Strings.Controller;
labelAlly.Text = Properties.Strings.AllyController; labelAlly.Text = Properties.Strings.AllyController;
@@ -235,7 +234,6 @@ namespace GHelper
labelCharge.MouseEnter += PanelBattery_MouseEnter; labelCharge.MouseEnter += PanelBattery_MouseEnter;
labelCharge.MouseLeave += PanelBattery_MouseLeave; labelCharge.MouseLeave += PanelBattery_MouseLeave;
labelBattery.Click += LabelBattery_Click;
buttonPeripheral1.Click += ButtonPeripheral_Click; buttonPeripheral1.Click += ButtonPeripheral_Click;
buttonPeripheral2.Click += ButtonPeripheral_Click; buttonPeripheral2.Click += ButtonPeripheral_Click;
@@ -273,30 +271,15 @@ namespace GHelper
buttonDonate.Click += ButtonDonate_Click; buttonDonate.Click += ButtonDonate_Click;
int click = AppConfig.Get("donate_click");
if (AppConfig.Get("start_count") >= ((click < 10) ? 10 : click + 50))
{
buttonDonate.BorderColor = colorTurbo;
buttonDonate.Badge = true;
}
labelDynamicLighting.Click += LabelDynamicLighting_Click; labelDynamicLighting.Click += LabelDynamicLighting_Click;
panelPerformance.Focus(); panelPerformance.Focus();
InitVisual(); InitVisual();
} }
private void LabelBattery_Click(object? sender, EventArgs e)
{
HardwareControl.chargeWatt = !HardwareControl.chargeWatt;
RefreshSensors(true);
}
private void ButtonDonate_Click(object? sender, EventArgs e) private void ButtonDonate_Click(object? sender, EventArgs e)
{ {
AppConfig.Set("donate_click", AppConfig.Get("start_count")); Process.Start(new ProcessStartInfo("https://github.com/seerge/g-helper/wiki/Support-Project") { UseShellExecute = true });
buttonDonate.Badge = false;
Process.Start(new ProcessStartInfo("https://g-helper.com/support") { UseShellExecute = true });
} }
private void LabelDynamicLighting_Click(object? sender, EventArgs e) private void LabelDynamicLighting_Click(object? sender, EventArgs e)
@@ -461,7 +444,7 @@ namespace GHelper
Invoke(delegate Invoke(delegate
{ {
sliderGammaIgnore = true; sliderGammaIgnore = true;
sliderGamma.Value = VisualControl.GetBrightness(); sliderGamma.Value = AppConfig.Get("brightness", 100);
labelGamma.Text = sliderGamma.Value + "%"; labelGamma.Text = sliderGamma.Value + "%";
sliderGammaIgnore = false; sliderGammaIgnore = false;
}); });
@@ -675,14 +658,14 @@ namespace GHelper
{ {
case 0: case 0:
Logger.WriteLine("Lid Closed"); Logger.WriteLine("Lid Closed");
InputDispatcher.lidClose = AniMatrixControl.lidClose = true;
Aura.ApplyBrightness(0, "Lid"); Aura.ApplyBrightness(0, "Lid");
AniMatrixControl.lidClose = true;
matrixControl.SetLidMode(); matrixControl.SetLidMode();
break; break;
case 1: case 1:
Logger.WriteLine("Lid Open"); Logger.WriteLine("Lid Open");
InputDispatcher.lidClose = AniMatrixControl.lidClose = false;
Aura.ApplyBrightness(InputDispatcher.GetBacklight(), "Lid"); Aura.ApplyBrightness(InputDispatcher.GetBacklight(), "Lid");
AniMatrixControl.lidClose = false;
matrixControl.SetLidMode(); matrixControl.SetLidMode();
break; break;
} }
@@ -851,7 +834,7 @@ namespace GHelper
private void Button60Hz_MouseHover(object? sender, EventArgs e) private void Button60Hz_MouseHover(object? sender, EventArgs e)
{ {
labelTipScreen.Text = Properties.Strings.MinRefreshTooltip.Replace("60", ScreenControl.MIN_RATE.ToString()); labelTipScreen.Text = Properties.Strings.MinRefreshTooltip;
} }
private void ButtonScreen_MouseLeave(object? sender, EventArgs e) private void ButtonScreen_MouseLeave(object? sender, EventArgs e)
@@ -861,7 +844,7 @@ namespace GHelper
private void ButtonScreenAuto_MouseHover(object? sender, EventArgs e) private void ButtonScreenAuto_MouseHover(object? sender, EventArgs e)
{ {
labelTipScreen.Text = Properties.Strings.AutoRefreshTooltip.Replace("60", ScreenControl.MIN_RATE.ToString()); labelTipScreen.Text = Properties.Strings.AutoRefreshTooltip;
} }
private void ButtonUltimate_MouseHover(object? sender, EventArgs e) private void ButtonUltimate_MouseHover(object? sender, EventArgs e)
@@ -1216,7 +1199,7 @@ namespace GHelper
private void Button60Hz_Click(object? sender, EventArgs e) private void Button60Hz_Click(object? sender, EventArgs e)
{ {
AppConfig.Set("screen_auto", 0); AppConfig.Set("screen_auto", 0);
screenControl.SetScreen(ScreenControl.MIN_RATE, 0); screenControl.SetScreen(60, 0);
} }
@@ -1247,18 +1230,16 @@ namespace GHelper
{ {
buttonScreenAuto.Activated = true; buttonScreenAuto.Activated = true;
} }
else if (frequency == ScreenControl.MIN_RATE) else if (frequency == 60)
{ {
button60Hz.Activated = true; button60Hz.Activated = true;
} }
else if (frequency > ScreenControl.MIN_RATE) else if (frequency > 60)
{ {
button120Hz.Activated = true; button120Hz.Activated = true;
} }
button60Hz.Text = ScreenControl.MIN_RATE + "Hz"; if (maxFrequency > 60)
if (maxFrequency > ScreenControl.MIN_RATE)
{ {
button120Hz.Text = maxFrequency.ToString() + "Hz" + (overdriveSetting ? " + OD" : ""); button120Hz.Text = maxFrequency.ToString() + "Hz" + (overdriveSetting ? " + OD" : "");
panelScreen.Visible = true; panelScreen.Visible = true;
@@ -1430,9 +1411,7 @@ namespace GHelper
cpuTemp = ": " + Math.Round((decimal)HardwareControl.cpuTemp).ToString() + "°C"; cpuTemp = ": " + Math.Round((decimal)HardwareControl.cpuTemp).ToString() + "°C";
if (HardwareControl.batteryCapacity > 0) if (HardwareControl.batteryCapacity > 0)
{ charge = Properties.Strings.BatteryCharge + ": " + Math.Round(HardwareControl.batteryCapacity, 1) + "% ";
charge = Properties.Strings.BatteryCharge + ": " + HardwareControl.batteryCharge;
}
if (HardwareControl.batteryRate < 0) if (HardwareControl.batteryRate < 0)
battery = Properties.Strings.Discharging + ": " + Math.Round(-(decimal)HardwareControl.batteryRate, 1).ToString() + "W"; battery = Properties.Strings.Discharging + ": " + Math.Round(-(decimal)HardwareControl.batteryRate, 1).ToString() + "W";
@@ -1542,6 +1521,24 @@ namespace GHelper
} }
public void AutoKeyboard()
{
InputDispatcher.SetBacklightAuto(true);
if (!AppConfig.Is("skip_aura"))
{
Aura.ApplyPower();
Aura.ApplyAura();
}
if (Program.acpi.IsXGConnected())
XGM.Light(AppConfig.Is("xmg_light"));
if (AppConfig.HasTabletMode()) InputDispatcher.TabletMode();
}
public void VisualizeXGM(int GPUMode = -1) public void VisualizeXGM(int GPUMode = -1)
{ {
@@ -1769,7 +1766,7 @@ namespace GHelper
public void VisualiseBatteryFull() public void VisualiseBatteryFull()
{ {
if (BatteryControl.chargeFull) if (AppConfig.Is("charge_full"))
{ {
buttonBatteryFull.BackColor = colorStandard; buttonBatteryFull.BackColor = colorStandard;
buttonBatteryFull.ForeColor = SystemColors.ControlLightLight; buttonBatteryFull.ForeColor = SystemColors.ControlLightLight;

View File

@@ -1,141 +0,0 @@
using System.Globalization;
using System.Text.RegularExpressions;
public class NumericUpDownWithUnit : NumericUpDown
{
#region| Fields |
private string unit = null;
private bool unitFirst = false;
#endregion
#region| Properties |
public string Unit
{
get => unit;
set
{
unit = value;
UpdateEditText();
}
}
public bool UnitFirst
{
get => unitFirst;
set
{
unitFirst = value;
UpdateEditText();
}
}
#endregion
#region| Methods |
/// <summary>
/// Method called when updating the numeric updown text.
/// </summary>
protected override void UpdateEditText()
{
// If there is a unit we handle it ourselfs, if there is not we leave it to the base class.
if (Unit != null && Unit != string.Empty)
{
if (UnitFirst)
{
Text = $"({Unit}) {Value}";
}
else
{
Text = $"{Value} ({Unit})";
}
}
else
{
base.UpdateEditText();
}
}
/// <summary>
/// Validate method called before actually updating the text.
/// This is exactly the same as the base class but it will use the new ParseEditText from this class instead.
/// </summary>
protected override void ValidateEditText()
{
// See if the edit text parses to a valid decimal considering the label unit
ParseEditText();
UpdateEditText();
}
/// <summary>
/// Converts the text displayed in the up-down control to a numeric value and evaluates it.
/// </summary>
protected new void ParseEditText()
{
try
{
// The only difference of this methods to the base one is that text is replaced directly
// with the property Text instead of using the regex.
// We now that the only characters that may be on the textbox are from the unit we provide.
// because the NumericUpDown handles invalid input from user for us.
// This is where the magic happens. This regex will match all characters from the unit
// (so your unit cannot have numbers). You can change this regex to fill your needs
var regex = new Regex($@"[^(?!{Unit} )]+");
var match = regex.Match(Text);
if (match.Success)
{
var text = match.Value;
// VSWhidbey 173332: Verify that the user is not starting the string with a "-"
// before attempting to set the Value property since a "-" is a valid character with
// which to start a string representing a negative number.
if (!string.IsNullOrEmpty(text) && !(text.Length == 1 && text == "-"))
{
if (Hexadecimal)
{
Value = Constrain(Convert.ToDecimal(Convert.ToInt32(Text, 16)));
}
else
{
Value = Constrain(Decimal.Parse(text, CultureInfo.CurrentCulture));
}
}
}
}
catch
{
// Leave value as it is
}
finally
{
UserEdit = false;
}
}
/// </summary>
/// Returns the provided value constrained to be within the min and max.
/// This is exactly the same as the one in base class (which is private so we can't directly use it).
/// </summary>
private decimal Constrain(decimal value)
{
if (value < Minimum)
{
value = Minimum;
}
if (value > Maximum)
{
value = Maximum;
}
return value;
}
#endregion
}

View File

@@ -52,16 +52,6 @@ namespace GHelper.UI
} }
} }
private bool badge = false;
public bool Badge
{
get { return badge; }
set
{
badge = value;
}
}
public RButton() public RButton()
{ {
DoubleBuffered = true; DoubleBuffered = true;
@@ -109,15 +99,6 @@ namespace GHelper.UI
pevent.Graphics.DrawPath(penBorder, pathBorder); pevent.Graphics.DrawPath(penBorder, pathBorder);
} }
if (badge)
{
using (Brush brush = new SolidBrush(borderColor))
{
var radius = ratio * 10;
pevent.Graphics.FillEllipse(brush, rectSurface.Width - rectSurface.Height / 2 - radius, rectSurface.Height / 2 - radius, radius + radius, radius + radius);
}
}
if (!Enabled && ForeColor != SystemColors.ControlText) if (!Enabled && ForeColor != SystemColors.ControlText)
{ {
var rect = pevent.ClipRectangle; var rect = pevent.ClipRectangle;

View File

@@ -268,16 +268,6 @@ namespace GHelper.USB
Encoding.ASCII.GetBytes("]ASUS Tech.Inc."), Encoding.ASCII.GetBytes("]ASUS Tech.Inc."),
new byte[] { AsusHid.AURA_ID, 0x05, 0x20, 0x31, 0, 0x1A }, new byte[] { AsusHid.AURA_ID, 0x05, 0x20, 0x31, 0, 0x1A },
}, "Init"); }, "Init");
if (AppConfig.IsProArt())
{
AsusHid.WriteInput([AsusHid.INPUT_ID, 0x05, 0x20, 0x31, 0x00, 0x08], "ProArt Init");
//AsusHid.WriteInput([AsusHid.INPUT_ID, 0xD0, 0x4E], "ProArt Init");
AsusHid.WriteInput([AsusHid.INPUT_ID, 0xBA, 0xC5, 0xC4], "ProArt Init");
AsusHid.WriteInput([AsusHid.INPUT_ID, 0xD0, 0x8F, 0x01], "ProArt Init");
AsusHid.WriteInput([AsusHid.INPUT_ID, 0xD0, 0x85, 0xFF], "ProArt Init");
//AsusHid.WriteInput([AsusHid.INPUT_ID, 0xD0, 0x4E], "ProArt Init");
}
} }
@@ -361,11 +351,6 @@ namespace GHelper.USB
AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xD1, 0x09, 0x01, power }, "Aura"); AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xD1, 0x09, 0x01, power }, "Aura");
} }
public static void ApplyPowerOff()
{
AsusHid.Write(AuraPowerMessage(new AuraPower()));
}
public static void ApplyPower() public static void ApplyPower()
{ {

View File

@@ -52,10 +52,6 @@ namespace GHelper.USB
Write(new byte[] { 0x5e, 0xc5, status ? (byte)0x50 : (byte)0 }); Write(new byte[] { 0x5e, 0xc5, status ? (byte)0x50 : (byte)0 });
} }
public static void InitLight()
{
if (Program.acpi.IsXGConnected()) Light(AppConfig.Is("xmg_light"));
}
public static void Reset() public static void Reset()
{ {

View File

@@ -78,7 +78,7 @@ namespace GHelper
// labelBIOS // labelBIOS
// //
labelBIOS.AutoSize = true; labelBIOS.AutoSize = true;
labelBIOS.Font = new Font("Segoe UI", 9F, FontStyle.Bold); labelBIOS.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelBIOS.Location = new Point(68, 23); labelBIOS.Location = new Point(68, 23);
labelBIOS.Margin = new Padding(4, 0, 4, 0); labelBIOS.Margin = new Padding(4, 0, 4, 0);
labelBIOS.Name = "labelBIOS"; labelBIOS.Name = "labelBIOS";
@@ -113,7 +113,7 @@ namespace GHelper
// labelUpdates // labelUpdates
// //
labelUpdates.Anchor = AnchorStyles.Top | AnchorStyles.Right; labelUpdates.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelUpdates.Font = new Font("Segoe UI", 9F, FontStyle.Bold); labelUpdates.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelUpdates.Location = new Point(864, 19); labelUpdates.Location = new Point(864, 19);
labelUpdates.Name = "labelUpdates"; labelUpdates.Name = "labelUpdates";
labelUpdates.Size = new Size(302, 32); labelUpdates.Size = new Size(302, 32);
@@ -125,7 +125,6 @@ namespace GHelper
buttonRefresh.Activated = false; buttonRefresh.Activated = false;
buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Right; buttonRefresh.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonRefresh.BackColor = SystemColors.ControlLight; buttonRefresh.BackColor = SystemColors.ControlLight;
buttonRefresh.Badge = false;
buttonRefresh.BorderColor = Color.Transparent; buttonRefresh.BorderColor = Color.Transparent;
buttonRefresh.BorderRadius = 5; buttonRefresh.BorderRadius = 5;
buttonRefresh.FlatAppearance.BorderSize = 0; buttonRefresh.FlatAppearance.BorderSize = 0;
@@ -193,7 +192,7 @@ namespace GHelper
// labelDrivers // labelDrivers
// //
labelDrivers.AutoSize = true; labelDrivers.AutoSize = true;
labelDrivers.Font = new Font("Segoe UI", 9F, FontStyle.Bold); labelDrivers.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelDrivers.Location = new Point(68, 6); labelDrivers.Location = new Point(68, 6);
labelDrivers.Margin = new Padding(4, 0, 4, 0); labelDrivers.Margin = new Padding(4, 0, 4, 0);
labelDrivers.Name = "labelDrivers"; labelDrivers.Name = "labelDrivers";
@@ -281,7 +280,7 @@ namespace GHelper
// //
labelLegend.AutoSize = true; labelLegend.AutoSize = true;
labelLegend.Dock = DockStyle.Top; labelLegend.Dock = DockStyle.Top;
labelLegend.Font = new Font("Segoe UI", 9F, FontStyle.Bold); labelLegend.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelLegend.Location = new Point(20, 10); labelLegend.Location = new Point(20, 10);
labelLegend.Margin = new Padding(10); labelLegend.Margin = new Padding(10);
labelLegend.Name = "labelLegend"; labelLegend.Name = "labelLegend";

View File

@@ -49,11 +49,6 @@ namespace GHelper
labelBIOS.Text = "BIOS"; labelBIOS.Text = "BIOS";
labelDrivers.Text = Properties.Strings.DriverAndSoftware; labelDrivers.Text = Properties.Strings.DriverAndSoftware;
labelLegend.Text = Properties.Strings.Legend;
labelLegendGray.Text = Properties.Strings.LegendGray;
labelLegendRed.Text = Properties.Strings.LegendRed;
labelLegendGreen.Text = Properties.Strings.LegendGreen;
SuspendLayout(); SuspendLayout();
tableBios.Visible = false; tableBios.Visible = false;
@@ -211,26 +206,17 @@ namespace GHelper
public void VisualiseNewCount(int updatesCount, TableLayoutPanel table) public void VisualiseNewCount(int updatesCount, TableLayoutPanel table)
{ {
if (InvokeRequired) Invoke(delegate
{ {
Invoke(delegate labelUpdates.Text = $"{Properties.Strings.NewUpdates}: {updatesCount}";
{ labelUpdates.ForeColor = colorTurbo;
_VisualiseNewCount(updatesCount, table); labelUpdates.Font = new Font(labelUpdates.Font, FontStyle.Bold);
});
} panelBios.AccessibleName = labelUpdates.Text;
else
{ });
_VisualiseNewCount(updatesCount, table);
}
} }
public void _VisualiseNewCount(int updatesCount, TableLayoutPanel table)
{
labelUpdates.Text = $"{Properties.Strings.NewUpdates}: {updatesCount}";
labelUpdates.ForeColor = colorTurbo;
labelUpdates.Font = new Font(labelUpdates.Font, FontStyle.Bold);
panelBios.AccessibleName = labelUpdates.Text;
}
static string CleanupDeviceId(string input) static string CleanupDeviceId(string input)
{ {

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<root> <root>
<!-- <!--
Microsoft ResX Schema Microsoft ResX Schema
Version 2.0 Version 2.0
@@ -48,7 +48,7 @@
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding. : and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64 mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter : System.Runtime.Serialization.Formatters.Soap.SoapFormatter

View File

@@ -1,181 +0,0 @@
# G-Helper - Asusートパソコン用の軽量コントロールツール
[![United24](https://raw.githubusercontent.com/seerge/g-helper/main/docs/ua.png)](https://u24.gov.ua/)
[![GitHub release](https://img.shields.io/github/release/seerge/g-helper)](https://GitHub.com/seerge/g-helper/releases/)
[![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social)](https://GitHub.com/seerge/g-helper/stargazers/) <sup>[中文版点这里](https://github.com/seerge/g-helper/blob/main/docs/README.zh-CN.md)</sup>
Asusートパソコン用の軽量なArmoury Crate代替ツールで、余分な負荷や不要なサービスなしでほぼ同じ機能を提供します。
ROG Zephyrus G14、G15、G16、M16、Flow X13、Flow X16、Flow Z13、TUFシリーズ、StrixまたはScarシリーズ、ProArt、Vivobook、Zenbook、ROG Ally / Ally Xなど、すべての人気モデルで動作します
# [:floppy_disk:ダウンロード](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
**⭐ アプリが気に入ったら、ぜひオンラインで広めてください**
<table>
<tr>
<td><b>プロジェクトをサポート</b></td>
<td >
<a href="https://bit.ly/4c0ZWs9"><img src="https://raw.githubusercontent.com/seerge/g-helper/main/docs/paypal-eur.png" height="36" alt="PayPal EUR"></a>&nbsp;
<a href="https://bit.ly/4aGTyW8"><img src="https://raw.githubusercontent.com/seerge/g-helper/main/docs/paypal-usd.png" height="36" alt="PayPal USD"></a>&nbsp;
<a href="https://buy.stripe.com/8wM6pt8HbgK50tWbIK"><img src="https://raw.githubusercontent.com/seerge/g-helper/main/docs/stripe.png" height="36" alt="Stripe"></a>&nbsp;
<a href="https://buy.stripe.com/6oE29dg9D3Xj7Wo28b"><img src="https://raw.githubusercontent.com/seerge/g-helper/main/docs/alipay.png" height="36" alt="Alipay"></a>
</td>
</tr>
</table>
- [FAQ](https://github.com/seerge/g-helper/wiki/FAQ)
- [セットアップと要件](https://github.com/seerge/g-helper/wiki/Requirements)
- [トラブルシューティング](https://github.com/seerge/g-helper/wiki/Troubleshooting)
- [パワーユーザー設定](https://github.com/seerge/g-helper/wiki/Power-user-settings)
[![G-Helper Download](https://github.com/seerge/g-helper/assets/5920850/4d98465a-63a5-4498-ae14-afb3e67e7e82)](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
## :loudspeaker: YouTubeレビューとガイド
| [![Youtube review Josh Cravey](https://i.ytimg.com/vi/hqe-PjuE-K8/hqdefault.jpg)](https://www.youtube.com/watch?v=hqe-PjuE-K8) | [![Youtube review cbutters Tech](https://i.ytimg.com/vi/6aVdwJKZSSc/hqdefault.jpg)](https://www.youtube.com/watch?v=6aVdwJKZSSc) |
| ----------------- | ---------------- |
| [Josh Cravey](https://www.youtube.com/watch?v=hqe-PjuE-K8) | [cbutters Tech](https://www.youtube.com/watch?v=6aVdwJKZSSc) |
## 📰 記事
1. https://www.digitaltrends.com/computing/g-helper-armoury-crate-alternative/
2. https://binaryfork.com/ghelper-armoury-crate-alternative-10216/
## :gift: 利点
1. シームレスで自動的なGPU切り替え
2. すべてのパフォーマンスモードを電力制限とファンカーブで完全にカスタマイズ可能
3. 軽量。システムに何もインストールしません。実行するための単一のexeファイルのみ
4. シンプルでクリーンなネイティブUIで、すべての設定に簡単にアクセス
5. FNロックとカスタムホットキー
![Screenshot 2024-03-11 104354](https://github.com/seerge/g-helper/assets/5920850/626a5a6e-fdae-431c-843e-92886c8420ee)
### :zap: 機能
1. パフォーマンスモード: サイレント - バランス - ターボ (内蔵、デフォルトのファンカーブ付き)
2. GPUモード: エコ - スタンダード - アルティメット - オプティマイズド
3. ディスプレイのリフレッシュレート制御とディスプレイオーバードライブ (OD)
4. カスタムファンカーブエディタ、電力制限、ターボブースト選択
5. アニメマトリックスまたはスラッシュライティングの制御、アニメーションGIF、時計、オーディオビジュアライザー
6. バックライトのアニメーションモードとカラー
7. ホットキーの処理
8. CPUとGPUの温度、ファン速度、バッテリーステータスの監視
9. バッテリーの充電制限
10. NVidia GPUのオーバークロックとアンダーボルティング
11. XG Mobileの制御
12. AMD CPUのアンダーボルティング
13. BIOSとドライバの更新
14. Asusマウスの設定
15. ミニLEDのマルチゾーンスイッチ
16. フリッカーフリーディミングとビジュアルモード
### :gear: 自動化
- バッテリー使用時または電源接続時のパフォーマンスモードの切り替え
- オプティマイズドGPUモード - バッテリー使用時にdGPUを無効化し、電源接続時に有効化
- 自動ディスプレイリフレッシュレート (バッテリー使用時に60Hz、電源接続時に最大Hz)
- バッテリー使用時または電源接続時のキーボードバックライトのタイムアウト
### :rocket: パフォーマンスモード
<img align="right" width="300" src="https://github.com/seerge/g-helper/assets/5920850/3e119674-db8d-486b-aa65-2bf9b61f9aa6">
すべてのモードはBIOSに組み込まれており、デフォルトのファンカーブと電力制限が設定されています。これらはArmoury Crateと同じです。
各BIOSモードは対応するWindowsパワーモードとペアになっています。これを「ファン + 電源」設定で調整できます。
1. BIOSの「サイレント」 + Windowsの「最高の電力効率」パワーモード
2. BIOSの「バランス」 (AC時のパフォーマンス) + Windowsの「バランス」パワーモード
3. BIOSの「ターボ」 + Windowsの「最高のパフォーマンス」パワーモード
### :video_game: GPUモード
1. エコ: 低電力の統合GPUのみが有効、iGPUが内蔵ディスプレイを駆動
2. スタンダード (MS Hybrid): iGPUとdGPUが有効、iGPUが内蔵ディスプレイを駆動
3. アルティメット: iGPUとdGPUが有効、dGPUが内蔵ディスプレイを駆動 (2022年以降のモデルでサポート)
4. オプティマイズド: バッテリー使用時にdGPUを無効化 (エコ)し、電源接続時に有効化 (スタンダード)
![Screenshot 2024-03-11 111818](https://github.com/seerge/g-helper/assets/5920850/fd69a81e-978d-4d5c-a0a8-26da51f90a5b)
![GPU Modes](https://github.com/seerge/g-helper/assets/5920850/65c6bdd5-728c-4965-b544-fcf5a85ed6a2)
### :mouse: Asusマウスとその他の周辺機器のサポート
[現在サポートされているモデル](https://github.com/seerge/g-helper/discussions/900)
- ROG Chakram X (P708)
- ROG Chakram Core (P511)
- ROG Gladius II and Gladius II Origin (P502 and P504)
- ROG Gladius II Wireless
- ROG Gladius III
- ROG Gladius III Wireless
- ROG Harpe Ace Aim Lab Edition
- ROG Keris Wireless
- ROG Keris II Ace
- ROG Strix Carry (P508)
- ROG Strix III Gladius III Aimpoint Wireless (P711)
- ROG Strix Impact III (P518)
- ROG Spatha X
- ROG Strix Impact II Wireless
- ROG Pugio
- ROG Pugio II
- TUF Gaming M4 Wireless (P306)
- TUF Gaming M3
- TUF Gaming M3 Gen II
- TUF Gaming M4 AIR
- TUF Gaming M5
- TX Gaming Mini
[@IceStormNG](https://github.com/IceStormNG) 👑 の貢献と研究に大いに感謝します。
### ⌨️ キーバインディング
- ``Fn + F5 / Fn + Shift + F5`` - パフォーマンスモードを前方/後方に切り替え
- ``Ctrl + Shift + F5 / Ctrl + Shift + Alt + F5`` - パフォーマンスモードを前方/後方に切り替え
- ``Ctrl + Shift + F12`` - G-Helperウィンドウを開く
- ``Ctrl + M1 / M2`` - ディスプレイの明るさを下げる/上げる
- ``Shift + M1 / M2`` - バックライトの明るさを下げる/上げる
- ``Fn + C`` - Fnロック
- ``Fn + Ctrl + F7 / F8`` - フリッカーフリーディミングを下げる/上げる
- ``Fn + Shift + F7 / F8`` - マトリックス/スラッシュライティングの明るさを下げる/上げる
- ``Fn + Shift + F7 / F8`` - スクリーンパッドの明るさを下げる/上げる
- ``Ctrl + Shift + F20`` - マイクをミュート
- ``Ctrl + Shift + Alt + F13`` - ディスプレイのリフレッシュレートを切り替え
- ``Ctrl + Shift + Alt + F14`` - エコGPUモード
- ``Ctrl + Shift + Alt + F15`` - スタンダードGPUモード
- ``Ctrl + Shift + Alt + F16`` - サイレント
- ``Ctrl + Shift + Alt + F17`` - バランス
- ``Ctrl + Shift + Alt + F18`` - ターボ
- ``Ctrl + Shift + Alt + F19`` - カスタム1 (存在する場合)
- ``Ctrl + Shift + Alt + F20`` - カスタム2 (存在する場合)
- [カスタムキーバインディング/ホットキー](https://github.com/seerge/g-helper/wiki/Power-user-settings#custom-hotkey-actions)
### 🎮ROG Allyバインディング
- ``M + DPad Left / Right`` - ディスプレイの明るさ
- ``M + DPad Up`` - タッチキーボード
- ``M + DPad Down`` - デスクトップを表示
- ``M + Y`` - AMDオーバーレイを切り替え
- ``M + X`` - スクリーンショット
- ``M + Right Stick Click`` - コントローラーモード
------------------
### 🔖 重要な注意事項
G-Helperはオペレーティングシステム、ファームウェア、またはドライバではありません。ハードウェアをリアルタイムで「実行」することはありません。
これは、製造元が作成し、BIOSに保存されている事前定義された操作モードの1つを選択し、オプションでいくつかの設定を行うアプリケーションです。Armoury Crateと同じように機能します。Asus System Control Interface「ドライバ」を使用してすべての機能を実現します。
Armoury Crateと同じモード/設定を使用する場合、デバイスのパフォーマンスや動作に違いはありません。
G-Helperの役割は、リモコンがテレビに対して果たす役割に似ています。
### 使用ライブラリとプロジェクト
- [Linux Kernel](https://github.com/torvalds/linux/blob/master/include/linux/platform_data/x86/asus-wmi.h) - ASUS ACPI/WMIインターフェースの基本エンドポイント
- [NvAPIWrapper](https://github.com/falahati/NvAPIWrapper) - Nvidia APIへのアクセス
- [Starlight](https://github.com/vddCore/Starlight) - アニメマトリックス通信プロトコル
- [UXTU](https://github.com/JamesCJ60/Universal-x86-Tuning-Utility) - Ryzen System Management Unitを使用したアンダーボルティング
- [AsusCtl](https://gitlab.com/asus-linux/asusctl) - インスピレーションと逆アセンブル
### 免責事項
"Asus"、"ROG"、"TUF"、および"Armoury Crate"は、AsusTek Computer, Inc.の商標であり、AsusTek Computerに属する資産に対して一切の権利を主張しません。これらの資産は純粋に情報提供の目的で使用されています。
ソフトウェアは「現状のまま」提供され、明示または黙示のいかなる保証もなく、商品性、特定の目的への適合性、および非侵害の保証を含みますが、これに限定されません。このソフトウェアの誤用は、システムの不安定性や誤動作を引き起こす可能性があります。

View File

@@ -1,11 +1,13 @@
# G-Helper - Lightweight control tool for Asus laptops # G-Helper - Lightweight control tool for Asus laptops
[![United24](https://raw.githubusercontent.com/seerge/g-helper/main/docs/ua.png)](https://u24.gov.ua/) [![United24](https://raw.githubusercontent.com/seerge/g-helper/main/docs/ua.png)](https://u24.gov.ua/)
[![GitHub release](https://img.shields.io/github/release/seerge/g-helper)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub release](https://img.shields.io/github/release/seerge/g-helper)](https://GitHub.com/seerge/g-helper/releases/)
[![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social)](https://GitHub.com/seerge/g-helper/stargazers/) <sup>[中文版点这里](https://github.com/seerge/g-helper/blob/main/docs/README.zh-CN.md)</sup> <sup>[日本語はこちら](https://github.com/seerge/g-helper/blob/main/docs/README.ja-JP.md)</sup> [![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social)](https://GitHub.com/seerge/g-helper/stargazers/) <sup>[中文版点这里](https://github.com/seerge/g-helper/blob/main/docs/README.zh-CN.md)</sup>
Small and lightweight Armoury Crate alternative for Asus laptops offering almost same functionality with a much smaller footprint. Works with all popular models, such as ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, Flow Z13, DUO, TUF Series, Strix or Scar Series, ProArt, Vivobook, Zenbook, ROG Ally or Ally X and many more! Small and lightweight Armoury Crate alternative for Asus laptops offering almost same functionality without extra load and unnecessary services.
# [:floppy_disk: Download](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip) Works with all popular models, such as ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, Flow Z13, TUF Series, Strix / Scar Series, ProArt, Vivobook, Zenbook, ROG Ally and many more!
# [:floppy_disk:Download](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
**⭐ If you like the app - please spread the word about it online** **⭐ If you like the app - please spread the word about it online**
<table> <table>
@@ -14,8 +16,8 @@ Small and lightweight Armoury Crate alternative for Asus laptops offering almost
<td > <td >
<a href="https://bit.ly/4c0ZWs9"><img src="https://raw.githubusercontent.com/seerge/g-helper/main/docs/paypal-eur.png" height="36" alt="PayPal EUR"></a>&nbsp; <a href="https://bit.ly/4c0ZWs9"><img src="https://raw.githubusercontent.com/seerge/g-helper/main/docs/paypal-eur.png" height="36" alt="PayPal EUR"></a>&nbsp;
<a href="https://bit.ly/4aGTyW8"><img src="https://raw.githubusercontent.com/seerge/g-helper/main/docs/paypal-usd.png" height="36" alt="PayPal USD"></a>&nbsp; <a href="https://bit.ly/4aGTyW8"><img src="https://raw.githubusercontent.com/seerge/g-helper/main/docs/paypal-usd.png" height="36" alt="PayPal USD"></a>&nbsp;
<a href="https://buy.stripe.com/8wM6pt8HbgK50tWbIK"><img src="https://raw.githubusercontent.com/seerge/g-helper/main/docs/stripe.png" height="36" alt="Stripe"></a>&nbsp; <a href="https://buy.stripe.com/bIY4hl8HbalH3G8bIJ"><img src="https://raw.githubusercontent.com/seerge/g-helper/main/docs/stripe.png" height="36" alt="Stripe"></a>&nbsp;
<a href="https://buy.stripe.com/6oE29dg9D3Xj7Wo28b"><img src="https://raw.githubusercontent.com/seerge/g-helper/main/docs/alipay.png" height="36" alt="Alipay"></a> <a href="https://buy.stripe.com/bIY4hl8HbalH3G8bIJ"><img src="https://raw.githubusercontent.com/seerge/g-helper/main/docs/alipay.png" height="36" alt="Alipay"></a>
</td> </td>
</tr> </tr>
</table> </table>

View File

@@ -4,7 +4,7 @@
[![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social)](https://GitHub.com/seerge/g-helper/stargazers/) [![Github all releases](https://img.shields.io/github/downloads/seerge/g-helper/total)](https://GitHub.com/seerge/g-helper/releases/) [![GitHub stars](https://img.shields.io/github/stars/seerge/g-helper.svg?style=social)](https://GitHub.com/seerge/g-helper/stargazers/)
语言: [English](https://github.com/seerge/g-helper#readme) | 中文 | [日本語](https://github.com/seerge/g-helper/blob/main/docs/README.ja-JP.md) 语言: [English](https://github.com/seerge/g-helper#readme) | 中文
适用于华硕Asus笔记本电脑的轻量级 Armoury Crate (奥创控制中心)替代品,在功能几乎相同的同时减少不必要的服务以减轻负载。 适用于华硕Asus笔记本电脑的轻量级 Armoury Crate (奥创控制中心)替代品,在功能几乎相同的同时减少不必要的服务以减轻负载。
G-helper兼容所有主流型号例如 ROG 幻14、幻15、幻16、幻13、幻X、天选飞行堡垒系列、枪神/魔霸系列、创系列、灵耀系列、无畏系列、ROG Ally 等! G-helper兼容所有主流型号例如 ROG 幻14、幻15、幻16、幻13、幻X、天选飞行堡垒系列、枪神/魔霸系列、创系列、灵耀系列、无畏系列、ROG Ally 等!