Compare commits

...

35 Commits

Author SHA1 Message Date
Serge
a6b2291586 Init 2024-05-13 17:05:03 +02:00
Serge
c7d3b4ea3a Merge branch 'main' of https://github.com/seerge/g-helper 2024-05-11 18:42:34 +02:00
Serge
a0c15e6732 Touchscreen toggle binding https://github.com/seerge/g-helper/issues/2575 2024-05-11 18:42:31 +02:00
Serge
6ab48b1540 New Crowdin updates (#2576)
* New translations strings.resx (Indonesian)

* New translations strings.resx (Indonesian)
2024-05-11 14:14:33 +02:00
Serge
5b383b2884 Merge branch 'main' of https://github.com/seerge/g-helper 2024-05-10 21:21:41 +02:00
Serge
df56e2af23 Show current installed driver version in Updates tooltips https://github.com/seerge/g-helper/issues/2572 2024-05-10 21:21:38 +02:00
Serge
a618866804 Update README.zh-CN.md 2024-05-10 20:47:33 +02:00
Serge
877feeab02 Update README.md 2024-05-09 11:19:31 +02:00
Serge
b697ed5a66 AutoTDP tuning 2024-05-07 21:56:03 +02:00
Serge
e642c550f9 Merge branch 'main' of https://github.com/seerge/g-helper 2024-05-07 13:31:26 +02:00
Serge
660aae0f3e Added ASUSLiveUpdateAgent to the services list https://github.com/seerge/g-helper/issues/2558 2024-05-07 13:31:24 +02:00
Serge
ed41766108 New translations strings.resx (Korean) (#2554) 2024-05-06 19:07:48 +02:00
Serge
a43479dbba Save boot sounds status https://github.com/seerge/g-helper/issues/2555 2024-05-06 19:04:46 +02:00
Serge
43c71b833d Exception handling https://github.com/seerge/g-helper/issues/2556 2024-05-06 19:01:32 +02:00
Serge
2948a29b71 Extended process list 2024-05-04 22:21:23 +02:00
Serge
8f2a13b1ad Extended process list 2024-05-04 15:38:08 +02:00
Serge
b75471a052 Merge branch 'main' of https://github.com/seerge/g-helper 2024-05-04 15:34:38 +02:00
Serge
c8bd2a9c1c Option to stop AC service 2024-05-04 15:34:36 +02:00
Serge
9eb853d8b2 Update README.md 2024-05-03 20:39:18 +02:00
Serge
ba0bac11b5 Exception wrapping 2024-05-02 12:35:36 +02:00
Serge
8241700fe7 Merge branch 'main' of https://github.com/seerge/g-helper 2024-05-02 11:05:50 +02:00
Serge
2ff1a59ff9 ASUS Rog Keris Wired #2517 2024-05-02 11:05:48 +02:00
Serge
18d6f694a0 New Crowdin updates (#2525)
* New translations strings.resx (Korean)

* New translations strings.resx (Korean)
2024-05-02 00:44:00 +02:00
Serge
9fe283b620 Multizone toggle improvements https://github.com/seerge/g-helper/issues/1957 2024-05-01 21:27:31 +02:00
Serge
b7e4ec50a6 Version bump 2024-05-01 21:09:05 +02:00
Serge
927fc382a5 Miniled toggle tweaks 2024-05-01 21:08:39 +02:00
Serge
ed728de661 UI fix https://github.com/seerge/g-helper/issues/2515 2024-05-01 21:05:08 +02:00
Serge
a1a317d952 Added S540 to the Oled list #2519 2024-04-30 12:31:41 +02:00
Serge
123fbc414f Overdrive UI Tweaks https://github.com/seerge/g-helper/issues/2497 2024-04-28 10:39:21 +02:00
Serge
d26d9c46ad Merge branch 'main' of https://github.com/seerge/g-helper 2024-04-26 20:41:00 +02:00
Serge
a58230fdd2 Version bump 2024-04-26 20:40:58 +02:00
Serge
00393ef67d New Crowdin updates (#2506)
* New translations strings.resx (Turkish)

* New translations strings.resx (Danish)
2024-04-26 20:40:22 +02:00
Serge
a687d074ee Configurable min GPU clock 2024-04-26 20:30:12 +02:00
Serge
201ef48cd4 Lowered possible GPU Clock limit https://github.com/seerge/g-helper/discussions/2500 2024-04-26 19:44:44 +02:00
Serge
7b16adf0f5 Ally TDP (#2503)
* Init

* TDP fixes

* TDP tweaks

* AutoTDP toggle

* AutoTDP tweaks

* AutoTDP tweaks

* TDP tweaks

* Cleanup

* Power based AutoTDP

* TDP tweaks
2024-04-26 19:42:11 +02:00
31 changed files with 508 additions and 199 deletions

View File

@@ -1,10 +1,13 @@
using GHelper.Gpu.AMD; using GHelper.Gpu.AMD;
using GHelper.Helpers; using GHelper.Helpers;
using GHelper.Input; using GHelper.Input;
using GHelper.Mode;
using GHelper.USB; using GHelper.USB;
using HidSharp; using HidSharp;
using System.Text; using System.Text;
namespace GHelper.Ally namespace GHelper.Ally
{ {
@@ -32,17 +35,28 @@ namespace GHelper.Ally
public class AllyControl public class AllyControl
{ {
System.Timers.Timer timer = default!; static System.Timers.Timer timer = default!;
static AmdGpuControl amdControl = new AmdGpuControl(); static AmdGpuControl amdControl = new AmdGpuControl();
SettingsForm settings; SettingsForm settings;
static ControllerMode _mode = ControllerMode.Auto; static ControllerMode _mode = ControllerMode.Auto;
static ControllerMode _applyMode = ControllerMode.Mouse; static ControllerMode _applyMode = ControllerMode.Mouse;
static int _autoCount = 0; static int _autoCount = 0;
static int _upCount = 0;
static int _downCount = 0;
static int tdpMin = 6;
static int tdpStable = tdpMin;
static int tdpCurrent = -1;
static bool autoTDP = false;
static int fpsLimit = -1; static int fpsLimit = -1;
public const string BindA = "01-01"; public const string BindA = "01-01";
public const string BindB = "01-02"; public const string BindB = "01-02";
public const string BindX = "01-03"; public const string BindX = "01-03";
@@ -280,32 +294,116 @@ namespace GHelper.Ally
public AllyControl(SettingsForm settingsForm) public AllyControl(SettingsForm settingsForm)
{ {
if (!AppConfig.IsAlly()) return; if (!AppConfig.IsAlly()) return;
settings = settingsForm; settings = settingsForm;
timer = new System.Timers.Timer(300); if (timer is null)
timer.Elapsed += Timer_Elapsed; {
timer = new System.Timers.Timer(300);
timer.Elapsed += Timer_Elapsed;
Logger.WriteLine("Ally timer");
}
}
private int GetMaxTDP()
{
int tdp = AppConfig.GetMode("limit_total");
if (tdp > 0) return tdp;
switch (Modes.GetCurrentBase())
{
case 1:
return 25;
case 2:
return 10;
default:
return 15;
}
}
private int GetTDP()
{
if (tdpCurrent < 0) tdpCurrent = GetMaxTDP();
return tdpCurrent;
}
private void SetTDP(int tdp, string log)
{
if (tdp < tdpStable) tdp = tdpStable;
int max = GetMaxTDP();
if (tdp > max) tdp = max;
if (tdp == tdpCurrent) return;
if (!autoTDP) return;
Program.acpi.DeviceSet(AsusACPI.PPT_APUA0, tdp, log);
Program.acpi.DeviceSet(AsusACPI.PPT_APUA3, tdp, null);
Program.acpi.DeviceSet(AsusACPI.PPT_APUC1, tdp, null);
tdpCurrent = tdp;
} }
private void Timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e) private void Timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
{ {
if (!autoTDP && _mode != ControllerMode.Auto) return;
float fps = amdControl.GetFPS(); float fps = amdControl.GetFPS();
ControllerMode newMode = (fps > 0) ? ControllerMode.Gamepad : ControllerMode.Mouse; if (autoTDP && fpsLimit > 0 && fpsLimit <= 120)
if (_applyMode != newMode) _autoCount++;
else _autoCount = 0;
if (_mode != ControllerMode.Auto) return;
if (_autoCount > 2)
{ {
_autoCount = 0; int power = (int)amdControl.GetGpuPower();
ApplyMode(newMode); //Debug.WriteLine($"{power}: {fps}");
Logger.WriteLine(fps.ToString());
if (fps <= Math.Min(fpsLimit * 0.9, fpsLimit - 4)) _upCount++;
else _upCount = 0;
if (fps >= Math.Min(fpsLimit * 0.95, fpsLimit - 2)) _downCount++;
else _downCount = 0;
var tdp = GetTDP();
if (_upCount >= 1)
{
_downCount = 0;
_upCount = 0;
SetTDP(tdp + 1, $"AutoTDP+ [{power}]{fps}");
}
if (_downCount >= 8 && power < tdp)
{
_upCount = 0;
_downCount--;
SetTDP(tdp - 1, $"AutoTDP- [{power}]{fps}");
}
} }
if (_mode == ControllerMode.Auto)
{
ControllerMode newMode = (fps > 0) ? ControllerMode.Gamepad : ControllerMode.Mouse;
if (_applyMode != newMode) _autoCount++;
else _autoCount = 0;
if (_autoCount == 3)
{
_autoCount = 0;
ApplyMode(newMode);
Logger.WriteLine($"Controller Mode {fps}: {newMode}");
}
}
}
public void ToggleAutoTDP()
{
autoTDP = !autoTDP;
tdpCurrent = -1;
if (!autoTDP)
{
Program.modeControl.SetPerformanceMode();
}
settings.VisualiseAutoTDP(autoTDP);
} }
public void Init() public void Init()
@@ -319,7 +417,6 @@ namespace GHelper.Ally
fpsLimit = amdControl.GetFPSLimit(); fpsLimit = amdControl.GetFPSLimit();
settings.VisualiseFPSLimit(fpsLimit); settings.VisualiseFPSLimit(fpsLimit);
} }
public void ToggleFPSLimit() public void ToggleFPSLimit()
@@ -327,9 +424,15 @@ namespace GHelper.Ally
switch (fpsLimit) switch (fpsLimit)
{ {
case 30: case 30:
fpsLimit = 40;
break;
case 40:
fpsLimit = 45; fpsLimit = 45;
break; break;
case 45: case 45:
fpsLimit = 50;
break;
case 50:
fpsLimit = 60; fpsLimit = 60;
break; break;
case 60: case 60:
@@ -479,7 +582,7 @@ namespace GHelper.Ally
DecodeBinding(KeyR2).CopyTo(bindings, 38); DecodeBinding(KeyR2).CopyTo(bindings, 38);
//AsusHid.WriteInput(CommandReady, null); //AsusHid.WriteInput(CommandReady, null);
AsusHid.WriteInput(bindings, $"B{zone}"); AsusHid.WriteInput(bindings, null);
} }
@@ -495,19 +598,19 @@ namespace GHelper.Ally
(byte)AppConfig.Get("ls_max", 100), (byte)AppConfig.Get("ls_max", 100),
(byte)AppConfig.Get("rs_min", 0), (byte)AppConfig.Get("rs_min", 0),
(byte)AppConfig.Get("rs_max", 100) (byte)AppConfig.Get("rs_max", 100)
}, "StickDeadzone"); }, null);
AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xd1, 5, 4, AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xd1, 5, 4,
(byte)AppConfig.Get("lt_min", 0), (byte)AppConfig.Get("lt_min", 0),
(byte)AppConfig.Get("lt_max", 100), (byte)AppConfig.Get("lt_max", 100),
(byte)AppConfig.Get("rt_min", 0), (byte)AppConfig.Get("rt_min", 0),
(byte)AppConfig.Get("rt_max", 100) (byte)AppConfig.Get("rt_max", 100)
}, "TriggerDeadzone"); }, null);
AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xd1, 6, 2, AsusHid.WriteInput(new byte[] { AsusHid.INPUT_ID, 0xd1, 6, 2,
(byte)AppConfig.Get("vibra", 100), (byte)AppConfig.Get("vibra", 100),
(byte)AppConfig.Get("vibra", 100) (byte)AppConfig.Get("vibra", 100)
}, "Vibration"); }, null);
} }
@@ -572,18 +675,11 @@ namespace GHelper.Ally
_mode = mode; _mode = mode;
AppConfig.Set("controller_mode", (int)mode); AppConfig.Set("controller_mode", (int)mode);
amdControl.StopFPS();
ApplyMode(mode, init); ApplyMode(mode, init);
if (mode == ControllerMode.Auto) amdControl.StartFPS();
{ timer.Start();
amdControl.StartFPS();
timer.Start();
}
else
{
timer.Stop();
amdControl.StopFPS();
}
settings.VisualiseController(mode); settings.VisualiseController(mode);
} }

View File

@@ -411,12 +411,12 @@ 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("K340") || ContainsModel("K350") || ContainsModel("M140") || ContainsModel("UM340"); 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");
} }
public static bool IsNoOverdrive() public static bool IsNoOverdrive()
{ {
return Is("no_overdrive") || IsOLED(); return Is("no_overdrive");
} }
public static bool IsNoSleepEvent() public static bool IsNoSleepEvent()
@@ -615,6 +615,11 @@ public static class AppConfig
return Is("bw_icon"); return Is("bw_icon");
} }
public static bool IsStopAC()
{
return IsAlly() || Is("stop_ac");
}
} }

View File

@@ -167,6 +167,9 @@ public class AsusACPI
public const int PCoreMax = 16; public const int PCoreMax = 16;
public const int ECoreMax = 16; public const int ECoreMax = 16;
private bool? _allAMD = null;
private bool? _overdrive = null;
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern IntPtr CreateFile( private static extern IntPtr CreateFile(
@@ -636,8 +639,14 @@ public class AsusACPI
public bool IsAllAmdPPT() public bool IsAllAmdPPT()
{ {
//return false; if (_allAMD is null) _allAMD = DeviceGet(PPT_CPUB0) >= 0 && DeviceGet(PPT_GPUC0) < 0;
return DeviceGet(PPT_CPUB0) >= 0 && DeviceGet(PPT_GPUC0) < 0; return (bool)_allAMD;
}
public bool IsOverdriveSupported()
{
if (_overdrive is null) _overdrive = DeviceGet(ScreenOverdrive) >= 0;
return (bool)_overdrive;
} }
public bool IsNVidiaGPU() public bool IsNVidiaGPU()

View File

@@ -51,10 +51,10 @@ namespace GHelper.Display
ScreenNative.SetRefreshRate(laptopScreen, frequency); ScreenNative.SetRefreshRate(laptopScreen, frequency);
} }
if (overdrive >= 0) if (Program.acpi.IsOverdriveSupported() && overdrive >= 0)
{ {
if (AppConfig.IsNoOverdrive()) overdrive = 0; if (AppConfig.IsNoOverdrive()) overdrive = 0;
if (!AppConfig.IsOLED() && overdrive != Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive)) if (overdrive != Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive))
{ {
Program.acpi.DeviceSet(AsusACPI.ScreenOverdrive, overdrive, "ScreenOverdrive"); Program.acpi.DeviceSet(AsusACPI.ScreenOverdrive, overdrive, "ScreenOverdrive");
} }
@@ -65,7 +65,10 @@ namespace GHelper.Display
if (Program.acpi.DeviceGet(AsusACPI.ScreenMiniled1) >= 0) if (Program.acpi.DeviceGet(AsusACPI.ScreenMiniled1) >= 0)
Program.acpi.DeviceSet(AsusACPI.ScreenMiniled1, miniled, "Miniled1"); Program.acpi.DeviceSet(AsusACPI.ScreenMiniled1, miniled, "Miniled1");
else else
{
Program.acpi.DeviceSet(AsusACPI.ScreenMiniled2, miniled, "Miniled2"); Program.acpi.DeviceSet(AsusACPI.ScreenMiniled2, miniled, "Miniled2");
Thread.Sleep(100);
}
} }
InitScreen(); InitScreen();
@@ -84,7 +87,7 @@ namespace GHelper.Display
} }
} }
public int ToogleMiniled() public string ToogleMiniled()
{ {
int miniled1 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled1); int miniled1 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled1);
int miniled2 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled2); int miniled2 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled2);
@@ -92,24 +95,45 @@ namespace GHelper.Display
Logger.WriteLine($"MiniledToggle: {miniled1} {miniled2}"); Logger.WriteLine($"MiniledToggle: {miniled1} {miniled2}");
int miniled; int miniled;
string name;
if (miniled1 >= 0) if (miniled1 >= 0)
{ {
miniled = (miniled1 == 1) ? 0 : 1; switch (miniled1)
{
case 1:
miniled = 0;
name = Properties.Strings.OneZone;
break;
default:
miniled = 1;
name = Properties.Strings.Multizone;
break;
}
} }
else else
{ {
switch (miniled2) switch (miniled2)
{ {
case 1: miniled = 2; break; case 1:
case 2: miniled = 0; break; miniled = 2;
default: miniled = 1; break; name = Properties.Strings.OneZone;
break;
case 2:
miniled = 0;
name = Properties.Strings.Multizone;
break;
default:
miniled = 1;
name = Properties.Strings.MultizoneStrong;
break;
} }
} }
AppConfig.Set("miniled", miniled); AppConfig.Set("miniled", miniled);
SetScreen(miniled: miniled); SetScreen(miniled: miniled);
return miniled;
return name;
} }
public void InitScreen() public void InitScreen()
@@ -119,7 +143,7 @@ namespace GHelper.Display
int maxFrequency = ScreenNative.GetMaxRefreshRate(laptopScreen); int maxFrequency = ScreenNative.GetMaxRefreshRate(laptopScreen);
bool screenAuto = AppConfig.Is("screen_auto"); bool screenAuto = AppConfig.Is("screen_auto");
bool overdriveSetting = !AppConfig.IsNoOverdrive(); bool overdriveSetting = Program.acpi.IsOverdriveSupported() && !AppConfig.IsNoOverdrive();
int overdrive = AppConfig.IsNoOverdrive() ? 0 : Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive); int overdrive = AppConfig.IsNoOverdrive() ? 0 : Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive);
@@ -135,7 +159,13 @@ namespace GHelper.Display
AppConfig.Set("miniled", miniled); AppConfig.Set("miniled", miniled);
} }
hdr = ScreenCCD.GetHDRStatus(); try
{
hdr = ScreenCCD.GetHDRStatus();
} catch (Exception ex)
{
Logger.WriteLine(ex.Message);
}
bool screenEnabled = (frequency >= 0); bool screenEnabled = (frequency >= 0);

View File

@@ -166,7 +166,8 @@ namespace GHelper.Display
{ {
try try
{ {
var devices = GetAllDevices().ToArray(); var devicesList = GetAllDevices();
var devices = devicesList.ToArray();
string internalName = AppConfig.GetString("internal_display"); string internalName = AppConfig.GetString("internal_display");
foreach (var device in devices) foreach (var device in devices)

View File

@@ -36,6 +36,7 @@ namespace GHelper
{"brightness_down", Properties.Strings.BrightnessDown}, {"brightness_down", Properties.Strings.BrightnessDown},
{"brightness_up", Properties.Strings.BrightnessUp}, {"brightness_up", Properties.Strings.BrightnessUp},
{"visual", Properties.Strings.VisualMode}, {"visual", Properties.Strings.VisualMode},
{"touchscreen", Properties.Strings.ToggleTouchscreen },
{"ghelper", Properties.Strings.OpenGHelper}, {"ghelper", Properties.Strings.OpenGHelper},
{"custom", Properties.Strings.Custom} {"custom", Properties.Strings.Custom}
}; };
@@ -223,10 +224,7 @@ namespace GHelper
checkUSBC.Visible = false; checkUSBC.Visible = false;
} }
if (AppConfig.IsOLED()) checkNoOverdrive.Visible = Program.acpi.IsOverdriveSupported();
{
checkNoOverdrive.Visible = false;
}
// Change text and hide irrelevant options on the ROG Ally, // Change text and hide irrelevant options on the ROG Ally,
// which is a bit of a special case piece of hardware. // which is a bit of a special case piece of hardware.
@@ -256,7 +254,6 @@ namespace GHelper
checkGpuApps.Visible = false; checkGpuApps.Visible = false;
checkUSBC.Visible = false; checkUSBC.Visible = false;
checkAutoToggleClamshellMode.Visible = false; checkAutoToggleClamshellMode.Visible = false;
checkNoOverdrive.Visible = false;
int apuMem = Program.acpi.GetAPUMem(); int apuMem = Program.acpi.GetAPUMem();
if (apuMem >= 0) if (apuMem >= 0)
@@ -402,7 +399,10 @@ namespace GHelper
checkGpuApps.Checked = AppConfig.Is("kill_gpu_apps"); checkGpuApps.Checked = AppConfig.Is("kill_gpu_apps");
checkGpuApps.CheckedChanged += CheckGpuApps_CheckedChanged; checkGpuApps.CheckedChanged += CheckGpuApps_CheckedChanged;
checkBootSound.Checked = (Program.acpi.DeviceGet(AsusACPI.BootSound) == 1); int bootSound = Program.acpi.DeviceGet(AsusACPI.BootSound);
if (bootSound < 0 || bootSound > UInt16.MaxValue) bootSound = AppConfig.Get("boot_sound", 0);
checkBootSound.Checked = (bootSound == 1);
checkBootSound.CheckedChanged += CheckBootSound_CheckedChanged; checkBootSound.CheckedChanged += CheckBootSound_CheckedChanged;
var statusLed = Program.acpi.DeviceGet(AsusACPI.StatusLed); var statusLed = Program.acpi.DeviceGet(AsusACPI.StatusLed);
@@ -540,7 +540,9 @@ namespace GHelper
private void CheckBootSound_CheckedChanged(object? sender, EventArgs e) private void CheckBootSound_CheckedChanged(object? sender, EventArgs e)
{ {
Program.acpi.DeviceSet(AsusACPI.BootSound, (checkBootSound.Checked ? 1 : 0), "BootSound"); int bootSound = checkBootSound.Checked ? 1 : 0;
Program.acpi.DeviceSet(AsusACPI.BootSound, bootSound, "BootSound");
AppConfig.Set("boot_sound", bootSound);
} }
private void CheckGPUFix_CheckedChanged(object? sender, EventArgs e) private void CheckGPUFix_CheckedChanged(object? sender, EventArgs e)

View File

@@ -674,7 +674,7 @@ namespace GHelper
private void trackGPUClockLimit_Scroll(object? sender, EventArgs e) private void trackGPUClockLimit_Scroll(object? sender, EventArgs e)
{ {
int maxClock = (int)Math.Round((float)trackGPUClockLimit.Value / 50) * 50; int maxClock = (int)Math.Round((float)trackGPUClockLimit.Value / 5) * 5;
trackGPUClockLimit.Value = maxClock; trackGPUClockLimit.Value = maxClock;
AppConfig.SetMode("gpu_clock_limit", maxClock); AppConfig.SetMode("gpu_clock_limit", maxClock);

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.168</AssemblyVersion> <AssemblyVersion>0.170</AssemblyVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -119,6 +119,18 @@ public class AmdGpuControl : IGpuControl
} }
public int? GetGpuPower()
{
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_ASIC_POWER];
if (gpuUsage.Supported == 0) return null;
return gpuUsage.Value;
}
public bool SetVariBright(int enabled) public bool SetVariBright(int enabled)
{ {

View File

@@ -18,7 +18,7 @@ public class NvidiaGpuControl : IGpuControl
public static int MinCoreOffset = AppConfig.Get("min_gpu_core", -250); public static int MinCoreOffset = AppConfig.Get("min_gpu_core", -250);
public static int MinMemoryOffset = AppConfig.Get("min_gpu_memory", -500); public static int MinMemoryOffset = AppConfig.Get("min_gpu_memory", -500);
public const int MinClockLimit = 400; public static int MinClockLimit = AppConfig.Get("min_gpu_clock", 400);
public const int MaxClockLimit = 3000; public const int MaxClockLimit = 3000;
private static PhysicalGPU? _internalGpu; private static PhysicalGPU? _internalGpu;

View File

@@ -15,22 +15,29 @@ namespace GHelper.Helpers
public bool IsExternalDisplayConnected() public bool IsExternalDisplayConnected()
{ {
var devices = ScreenInterrogatory.GetAllDevices().ToArray(); try
string internalName = AppConfig.GetString("internal_display");
foreach (var device in devices)
{ {
if (device.outputTechnology != ScreenInterrogatory.DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL && var devicesList = ScreenInterrogatory.GetAllDevices();
device.outputTechnology != ScreenInterrogatory.DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED var devices = devicesList.ToArray();
&& device.monitorFriendlyDeviceName != internalName)
string internalName = AppConfig.GetString("internal_display");
foreach (var device in devices)
{ {
Logger.WriteLine("Found external screen: " + device.monitorFriendlyDeviceName + ":" + device.outputTechnology.ToString()); if (device.outputTechnology != ScreenInterrogatory.DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL &&
device.outputTechnology != ScreenInterrogatory.DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED
&& device.monitorFriendlyDeviceName != internalName)
{
Logger.WriteLine("Found external screen: " + device.monitorFriendlyDeviceName + ":" + device.outputTechnology.ToString());
//Already found one, we do not have to check whether there are more
return true;
}
//Already found one, we do not have to check whether there are more
return true;
} }
} catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
} }
return false; return false;

View File

@@ -13,6 +13,7 @@ namespace GHelper.Helpers
"ASUSLinkNear", "ASUSLinkNear",
"ASUSLinkRemote", "ASUSLinkRemote",
"ASUSSoftwareManager", "ASUSSoftwareManager",
"ASUSLiveUpdateAgent",
"ASUSSwitch", "ASUSSwitch",
"ASUSSystemAnalysis", "ASUSSystemAnalysis",
"ASUSSystemDiagnosis", "ASUSSystemDiagnosis",
@@ -21,11 +22,13 @@ namespace GHelper.Helpers
static List<string> processesAC = new() { static List<string> processesAC = new() {
"ArmouryCrateSE.Service", "ArmouryCrateSE.Service",
"ArmouryCrate.Service",
"LightingService", "LightingService",
}; };
static List<string> servicesAC = new() { static List<string> servicesAC = new() {
"ArmouryCrateSEService", "ArmouryCrateSEService",
"ArmouryCrateService",
"LightingService", "LightingService",
}; };
@@ -48,7 +51,7 @@ namespace GHelper.Helpers
if (Process.GetProcessesByName(service).Count() > 0) count++; if (Process.GetProcessesByName(service).Count() > 0) count++;
} }
if (AppConfig.IsAlly()) if (AppConfig.IsStopAC())
foreach (string service in processesAC) foreach (string service in processesAC)
{ {
if (Process.GetProcessesByName(service).Count() > 0) if (Process.GetProcessesByName(service).Count() > 0)
@@ -69,7 +72,7 @@ namespace GHelper.Helpers
ProcessHelper.StopDisableService(service); ProcessHelper.StopDisableService(service);
} }
if (AppConfig.IsAlly()) if (AppConfig.IsStopAC())
{ {
foreach (string service in servicesAC) foreach (string service in servicesAC)
{ {
@@ -87,7 +90,7 @@ namespace GHelper.Helpers
ProcessHelper.StartEnableService(service); ProcessHelper.StartEnableService(service);
} }
if (AppConfig.IsAlly()) if (AppConfig.IsStopAC())
{ {
foreach (string service in servicesAC) foreach (string service in servicesAC)
{ {

View File

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

View File

@@ -490,8 +490,8 @@ namespace GHelper.Input
break; break;
case "miniled": case "miniled":
if (ScreenCCD.GetHDRStatus()) return; if (ScreenCCD.GetHDRStatus()) return;
int miniled = screenControl.ToogleMiniled(); string miniledName = screenControl.ToogleMiniled();
Program.toast.RunToast(miniled == 1 ? "Multi-Zone" : "Single-Zone", miniled == 1 ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown); Program.toast.RunToast(miniledName, miniledName == Properties.Strings.OneZone ? ToastIcon.BrightnessDown : ToastIcon.BrightnessUp);
break; break;
case "aura": case "aura":
Program.settingsForm.BeginInvoke(Program.settingsForm.CycleAuraMode); Program.settingsForm.BeginInvoke(Program.settingsForm.CycleAuraMode);
@@ -544,6 +544,11 @@ namespace GHelper.Input
case "controller": case "controller":
Program.settingsForm.BeginInvoke(Program.settingsForm.allyControl.ToggleModeHotkey); Program.settingsForm.BeginInvoke(Program.settingsForm.allyControl.ToggleModeHotkey);
break; break;
case "touchscreen":
var touchscreenStatus = TouchscreenHelper.ToggleTouchscreen();
if (touchscreenStatus is not null)
Program.toast.RunToast(Properties.Strings.Touchscreen + " " + ((bool)touchscreenStatus ? Properties.Strings.On : Properties.Strings.Off), ToastIcon.Touchpad);
break;
default: default:
break; break;
} }

View File

@@ -1,5 +1,6 @@
using GHelper.AnimeMatrix.Communication; using GHelper.AnimeMatrix.Communication;
using GHelper.AnimeMatrix.Communication.Platform; using GHelper.AnimeMatrix.Communication.Platform;
using GHelper.Input;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Text; using System.Text;
@@ -1744,6 +1745,17 @@ namespace GHelper.Peripherals.Mouse
} }
} }
public void SetColor(Color color)
{
var ls = new LightingSetting();
ls.RGBColor = color;
ls.Brightness = InputDispatcher.GetBacklight() * 25;
WriteForResponse(GetUpdateLightingModePacket(ls, LightingZone.All));
WriteForResponse(GetSaveProfilePacket());
}
public void SetLightingSetting(LightingSetting lightingSetting, LightingZone zone) public void SetLightingSetting(LightingSetting lightingSetting, LightingZone zone)
{ {
if (!HasRGB() || lightingSetting is null) if (!HasRGB() || lightingSetting is null)

View File

@@ -159,6 +159,18 @@
} }
} }
public class ROGKerisWirelessWiredC : ROGKerisWireless
{
public ROGKerisWirelessWiredC() : base(0x195C, false)
{
}
public override string GetDisplayName()
{
return "ROG Keris (Wired)";
}
}
public class ROGKerisWirelessWired : ROGKerisWireless public class ROGKerisWirelessWired : ROGKerisWireless
{ {
public ROGKerisWirelessWired() : base(0x195E, false) public ROGKerisWirelessWired() : base(0x195E, false)

View File

@@ -191,6 +191,7 @@ namespace GHelper.Peripherals
DetectMouse(new GladiusII()); DetectMouse(new GladiusII());
DetectMouse(new ROGKerisWireless()); DetectMouse(new ROGKerisWireless());
DetectMouse(new ROGKerisWirelessWired()); DetectMouse(new ROGKerisWirelessWired());
DetectMouse(new ROGKerisWirelessWiredC());
DetectMouse(new ROGKerisWirelessEvaEdition()); DetectMouse(new ROGKerisWirelessEvaEdition());
DetectMouse(new ROGKerisWirelessEvaEditionWired()); DetectMouse(new ROGKerisWirelessEvaEditionWired());
DetectMouse(new TUFM4Wirelss()); DetectMouse(new TUFM4Wirelss());

View File

@@ -1925,6 +1925,24 @@ namespace GHelper.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to Toggle Touchscreen.
/// </summary>
internal static string ToggleTouchscreen {
get {
return ResourceManager.GetString("ToggleTouchscreen", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to .
/// </summary>
internal static string Touchscreen {
get {
return ResourceManager.GetString("Touchscreen", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Turbo. /// Looks up a localized string similar to Turbo.
/// </summary> /// </summary>

View File

@@ -154,7 +154,7 @@
<value>Anime Matrix</value> <value>Anime Matrix</value>
</data> </data>
<data name="AppAlreadyRunning" xml:space="preserve"> <data name="AppAlreadyRunning" xml:space="preserve">
<value>Appen kører allerede</value> <value>App'en kører allerede</value>
</data> </data>
<data name="AppAlreadyRunningText" xml:space="preserve"> <data name="AppAlreadyRunningText" xml:space="preserve">
<value>G-Helper kører allerede. Tjek systembakken for et ikon.</value> <value>G-Helper kører allerede. Tjek systembakken for et ikon.</value>
@@ -175,7 +175,7 @@
<value>Hukommelse tildelt til GPU</value> <value>Hukommelse tildelt til GPU</value>
</data> </data>
<data name="AsusServicesRunning" xml:space="preserve"> <data name="AsusServicesRunning" xml:space="preserve">
<value>Kørende Asus-tjenester</value> <value>Kørende ASUS-tjenester</value>
</data> </data>
<data name="AuraBatteryState" xml:space="preserve"> <data name="AuraBatteryState" xml:space="preserve">
<value>Batteritilstand</value> <value>Batteritilstand</value>
@@ -301,7 +301,7 @@
<value>Boot</value> <value>Boot</value>
</data> </data>
<data name="BootSound" xml:space="preserve"> <data name="BootSound" xml:space="preserve">
<value>Boot-lyd</value> <value>Opstarts-lyd</value>
</data> </data>
<data name="Brightness" xml:space="preserve"> <data name="Brightness" xml:space="preserve">
<value>Lysstyrke</value> <value>Lysstyrke</value>
@@ -313,7 +313,7 @@
<value>Lysstyrke op</value> <value>Lysstyrke op</value>
</data> </data>
<data name="BWTrayIcon" xml:space="preserve"> <data name="BWTrayIcon" xml:space="preserve">
<value>Sort og hvid bakkeikon</value> <value>Sort/hvid bakkeikon</value>
</data> </data>
<data name="Calibrate" xml:space="preserve"> <data name="Calibrate" xml:space="preserve">
<value>Kalibrer</value> <value>Kalibrer</value>
@@ -349,7 +349,7 @@
<value>Deaktiver ved lukning af låg</value> <value>Deaktiver ved lukning af låg</value>
</data> </data>
<data name="DisableOverdrive" xml:space="preserve"> <data name="DisableOverdrive" xml:space="preserve">
<value>Deaktiver overdrive på skærmen</value> <value>Deaktiver Overdrive på skærmen</value>
</data> </data>
<data name="Discharging" xml:space="preserve"> <data name="Discharging" xml:space="preserve">
<value>Aflader</value> <value>Aflader</value>
@@ -393,7 +393,7 @@ Vil du stadig fortsætte?</value>
<value>Ekstra indstillinger</value> <value>Ekstra indstillinger</value>
</data> </data>
<data name="FactoryDefaults" xml:space="preserve"> <data name="FactoryDefaults" xml:space="preserve">
<value>Standard fabriksindstillinger</value> <value>Gendan standarder</value>
</data> </data>
<data name="FanCurves" xml:space="preserve"> <data name="FanCurves" xml:space="preserve">
<value>Blæserkurver</value> <value>Blæserkurver</value>
@@ -411,13 +411,13 @@ Vil du stadig fortsætte?</value>
<value>Blæserprofiler</value> <value>Blæserprofiler</value>
</data> </data>
<data name="FansAndPower" xml:space="preserve"> <data name="FansAndPower" xml:space="preserve">
<value>Blæsere og kraft</value> <value>Blæsere og strøm</value>
</data> </data>
<data name="FanSpeed" xml:space="preserve"> <data name="FanSpeed" xml:space="preserve">
<value>Blæser</value> <value>Blæser</value>
</data> </data>
<data name="FansPower" xml:space="preserve"> <data name="FansPower" xml:space="preserve">
<value>Blæser + Kraft</value> <value>Blæser + Strøm</value>
</data> </data>
<data name="FlickerFreeDimming" xml:space="preserve"> <data name="FlickerFreeDimming" xml:space="preserve">
<value>Flimmerfri dæmpning</value> <value>Flimmerfri dæmpning</value>
@@ -426,10 +426,10 @@ Vil du stadig fortsætte?</value>
<value>Aktiver Fn + F genvejstaster uden Fn</value> <value>Aktiver Fn + F genvejstaster uden Fn</value>
</data> </data>
<data name="FnLockOff" xml:space="preserve"> <data name="FnLockOff" xml:space="preserve">
<value>FN-lås fra</value> <value>Fn-lås fra</value>
</data> </data>
<data name="FnLockOn" xml:space="preserve"> <data name="FnLockOn" xml:space="preserve">
<value>FN-lås til</value> <value>Fn-lås til</value>
</data> </data>
<data name="GPUBoost" xml:space="preserve"> <data name="GPUBoost" xml:space="preserve">
<value>Dynamisk boost</value> <value>Dynamisk boost</value>
@@ -438,13 +438,13 @@ Vil du stadig fortsætte?</value>
<value>Skifter</value> <value>Skifter</value>
</data> </data>
<data name="GPUCoreClockOffset" xml:space="preserve"> <data name="GPUCoreClockOffset" xml:space="preserve">
<value>Core Clock forskydning</value> <value>Core Clock offset</value>
</data> </data>
<data name="GPUMemoryClockOffset" xml:space="preserve"> <data name="GPUMemoryClockOffset" xml:space="preserve">
<value>Memory Clock forskydning</value> <value>Memory Clock offset</value>
</data> </data>
<data name="GPUMode" xml:space="preserve"> <data name="GPUMode" xml:space="preserve">
<value>GPU- tilstand</value> <value>GPU-tilstand</value>
</data> </data>
<data name="GPUModeEco" xml:space="preserve"> <data name="GPUModeEco" xml:space="preserve">
<value>Kun iGPU</value> <value>Kun iGPU</value>
@@ -456,7 +456,7 @@ Vil du stadig fortsætte?</value>
<value>dGPU eksklusivt</value> <value>dGPU eksklusivt</value>
</data> </data>
<data name="GPUPower" xml:space="preserve"> <data name="GPUPower" xml:space="preserve">
<value>GPU- strøm</value> <value>GPU-strøm</value>
</data> </data>
<data name="GPUSettings" xml:space="preserve"> <data name="GPUSettings" xml:space="preserve">
<value>GPU-indstillinger</value> <value>GPU-indstillinger</value>
@@ -486,13 +486,13 @@ Vil du stadig fortsætte?</value>
<value>Stop alle apps der bruger GPU når du skifter til Øko</value> <value>Stop alle apps der bruger GPU når du skifter til Øko</value>
</data> </data>
<data name="LaptopBacklight" xml:space="preserve"> <data name="LaptopBacklight" xml:space="preserve">
<value>Bærbar baggrundsbelysning</value> <value>Laptop baggrundsbelysning</value>
</data> </data>
<data name="LaptopKeyboard" xml:space="preserve"> <data name="LaptopKeyboard" xml:space="preserve">
<value>Bærbar tastatur</value> <value>Laptop-tastatur</value>
</data> </data>
<data name="LaptopScreen" xml:space="preserve"> <data name="LaptopScreen" xml:space="preserve">
<value>Bærbar skærm</value> <value>Laptop-skærm</value>
</data> </data>
<data name="LEDStatusIndicators" xml:space="preserve"> <data name="LEDStatusIndicators" xml:space="preserve">
<value>LED statusindikatorer</value> <value>LED statusindikatorer</value>
@@ -561,7 +561,7 @@ Vil du stadig fortsætte?</value>
<value>minutter</value> <value>minutter</value>
</data> </data>
<data name="MouseAngleSnapping" xml:space="preserve"> <data name="MouseAngleSnapping" xml:space="preserve">
<value>Vinkel snapping</value> <value>Vinkel-snapping</value>
</data> </data>
<data name="MouseAutoPowerOff" xml:space="preserve"> <data name="MouseAutoPowerOff" xml:space="preserve">
<value>Automatisk slukning efter</value> <value>Automatisk slukning efter</value>
@@ -627,7 +627,7 @@ Vil du stadig fortsætte?</value>
<value>Skift til Øko på batteri og til Standard, når tilsluttet strøm</value> <value>Skift til Øko på batteri og til Standard, når tilsluttet strøm</value>
</data> </data>
<data name="OptimizedUSBC" xml:space="preserve"> <data name="OptimizedUSBC" xml:space="preserve">
<value>Hold GPU deaktiveret på USB-C-oplader i optimeret tilstand</value> <value>Hold GPU deaktiveret på USB-C oplader i optimeret tilstand</value>
</data> </data>
<data name="Other" xml:space="preserve"> <data name="Other" xml:space="preserve">
<value>Andet</value> <value>Andet</value>
@@ -651,10 +651,10 @@ Vil du stadig fortsætte?</value>
<value>Polling Rate</value> <value>Polling Rate</value>
</data> </data>
<data name="PowerLimits" xml:space="preserve"> <data name="PowerLimits" xml:space="preserve">
<value>Kraftgrænser</value> <value>Strømgrænser</value>
</data> </data>
<data name="PPTExperimental" xml:space="preserve"> <data name="PPTExperimental" xml:space="preserve">
<value>Kraftgrænser er en eksperimentel funktion. Brug omhyggeligt og på egen risiko!</value> <value>Strømgrænser er en eksperimentel funktion. Brug omhyggeligt og på egen risiko!</value>
</data> </data>
<data name="PrintScreen" xml:space="preserve"> <data name="PrintScreen" xml:space="preserve">
<value>PrintScreen</value> <value>PrintScreen</value>
@@ -729,10 +729,10 @@ Vil du stadig fortsætte?</value>
<value>Slå Aura til/fra</value> <value>Slå Aura til/fra</value>
</data> </data>
<data name="ToggleClamshellMode" xml:space="preserve"> <data name="ToggleClamshellMode" xml:space="preserve">
<value>Automatisk slå Clamshell tilstand til/fra</value> <value>Slå automatisk Clamshell-tilstand til/fra</value>
</data> </data>
<data name="ToggleFnLock" xml:space="preserve"> <data name="ToggleFnLock" xml:space="preserve">
<value>Slå Fn-Lock til/fra</value> <value>Slå Fn-lås til/fra</value>
</data> </data>
<data name="ToggleMiniled" xml:space="preserve"> <data name="ToggleMiniled" xml:space="preserve">
<value>Slå MiniLED til/fra (hvis understøttet)</value> <value>Slå MiniLED til/fra (hvis understøttet)</value>
@@ -750,7 +750,7 @@ Vil du stadig fortsætte?</value>
<value>Deaktiver på batteri</value> <value>Deaktiver på batteri</value>
</data> </data>
<data name="UltimateGPUTooltip" xml:space="preserve"> <data name="UltimateGPUTooltip" xml:space="preserve">
<value>Kobler bærbar skærm direkte til dGPU, hvilket maksimerer FPS</value> <value>Kobler laptop-skærmen direkte til dGPU, hvilket maksimerer FPS</value>
</data> </data>
<data name="UltimateMode" xml:space="preserve"> <data name="UltimateMode" xml:space="preserve">
<value>Ultimativ</value> <value>Ultimativ</value>
@@ -759,7 +759,7 @@ Vil du stadig fortsætte?</value>
<value>Undervolting er en eksperimentel og risikabel funktion. Hvis de anvendte værdier er for lave for din hardware, kan det blive ustabilt, lukke ned eller forårsage datakorruption. Hvis du ønsker at prøve - start fra små værdier først, klik på Anvend og test hvad der virker for dig.</value> <value>Undervolting er en eksperimentel og risikabel funktion. Hvis de anvendte værdier er for lave for din hardware, kan det blive ustabilt, lukke ned eller forårsage datakorruption. Hvis du ønsker at prøve - start fra små værdier først, klik på Anvend og test hvad der virker for dig.</value>
</data> </data>
<data name="Unmuted" xml:space="preserve"> <data name="Unmuted" xml:space="preserve">
<value>Ikke muted</value> <value>Ikke lydløs</value>
</data> </data>
<data name="Updates" xml:space="preserve"> <data name="Updates" xml:space="preserve">
<value>Opdateringer</value> <value>Opdateringer</value>

View File

@@ -124,10 +124,10 @@
<value>Tidak dapat terhubung ke ASUS ACPI. tanpanya aplikasi tidak dapat berfungsi. Cobalah untuk menginstal Asus System Control Interface</value> <value>Tidak dapat terhubung ke ASUS ACPI. tanpanya aplikasi tidak dapat berfungsi. Cobalah untuk menginstal Asus System Control Interface</value>
</data> </data>
<data name="AlertAPUMemoryRestart" xml:space="preserve"> <data name="AlertAPUMemoryRestart" xml:space="preserve">
<value>Restart your device to apply changes</value> <value>Muat ulang perangkat anda untuk menerapkan perubahan</value>
</data> </data>
<data name="AlertAPUMemoryRestartTitle" xml:space="preserve"> <data name="AlertAPUMemoryRestartTitle" xml:space="preserve">
<value>Restart now?</value> <value>Mulai ulang sekarang?</value>
</data> </data>
<data name="AlertDGPU" xml:space="preserve"> <data name="AlertDGPU" xml:space="preserve">
<value>Tampaknya GPU sedang digunakan intensif, nonaktifkan?</value> <value>Tampaknya GPU sedang digunakan intensif, nonaktifkan?</value>
@@ -250,16 +250,16 @@
<value>Bangun</value> <value>Bangun</value>
</data> </data>
<data name="BacklightLow" xml:space="preserve"> <data name="BacklightLow" xml:space="preserve">
<value>Low</value> <value>Lemah</value>
</data> </data>
<data name="BacklightMax" xml:space="preserve"> <data name="BacklightMax" xml:space="preserve">
<value>Max</value> <value>Kuat</value>
</data> </data>
<data name="BacklightMid" xml:space="preserve"> <data name="BacklightMid" xml:space="preserve">
<value>Mid</value> <value>Sedang</value>
</data> </data>
<data name="BacklightOff" xml:space="preserve"> <data name="BacklightOff" xml:space="preserve">
<value>Off</value> <value>Mati</value>
</data> </data>
<data name="BacklightTimeout" xml:space="preserve"> <data name="BacklightTimeout" xml:space="preserve">
<value>Waktu tunggu dicolokan / menggunakan baterai (0 - Hidup)</value> <value>Waktu tunggu dicolokan / menggunakan baterai (0 - Hidup)</value>
@@ -289,10 +289,10 @@
<value>Binding</value> <value>Binding</value>
</data> </data>
<data name="BindingPrimary" xml:space="preserve"> <data name="BindingPrimary" xml:space="preserve">
<value>Primary</value> <value>Utama</value>
</data> </data>
<data name="BindingSecondary" xml:space="preserve"> <data name="BindingSecondary" xml:space="preserve">
<value>Secondary</value> <value>Sekunder</value>
</data> </data>
<data name="BiosAndDriverUpdates" xml:space="preserve"> <data name="BiosAndDriverUpdates" xml:space="preserve">
<value>Pembaruan BIOS dan Driver</value> <value>Pembaruan BIOS dan Driver</value>
@@ -325,7 +325,7 @@
<value>Warna</value> <value>Warna</value>
</data> </data>
<data name="Contrast" xml:space="preserve"> <data name="Contrast" xml:space="preserve">
<value>Contrast</value> <value>Kontras</value>
</data> </data>
<data name="Controller" xml:space="preserve"> <data name="Controller" xml:space="preserve">
<value>Controller</value> <value>Controller</value>
@@ -352,7 +352,7 @@
<value>Nonaktifkan screen overdrive</value> <value>Nonaktifkan screen overdrive</value>
</data> </data>
<data name="Discharging" xml:space="preserve"> <data name="Discharging" xml:space="preserve">
<value>Discharging</value> <value>Tidak mengisi</value>
</data> </data>
<data name="DownloadColorProfiles" xml:space="preserve"> <data name="DownloadColorProfiles" xml:space="preserve">
<value>Download Color Profiles</value> <value>Download Color Profiles</value>
@@ -384,7 +384,7 @@ Apakah Anda masih ingin melanjutkan?</value>
<value>Pengaturan Energi</value> <value>Pengaturan Energi</value>
</data> </data>
<data name="Export" xml:space="preserve"> <data name="Export" xml:space="preserve">
<value>Export Profile</value> <value>Ekspor Profil</value>
</data> </data>
<data name="Extra" xml:space="preserve"> <data name="Extra" xml:space="preserve">
<value>Ekstra</value> <value>Ekstra</value>
@@ -471,10 +471,10 @@ Apakah Anda masih ingin melanjutkan?</value>
<value>Tinggi</value> <value>Tinggi</value>
</data> </data>
<data name="ImageRotation" xml:space="preserve"> <data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value> <value>Rotasi Gambar</value>
</data> </data>
<data name="Import" xml:space="preserve"> <data name="Import" xml:space="preserve">
<value>Import Profile</value> <value>Impor Profil</value>
</data> </data>
<data name="KeyBindings" xml:space="preserve"> <data name="KeyBindings" xml:space="preserve">
<value>Pintasan Keyboard</value> <value>Pintasan Keyboard</value>
@@ -507,7 +507,7 @@ Apakah Anda masih ingin melanjutkan?</value>
<value>Lighting</value> <value>Lighting</value>
</data> </data>
<data name="LockScreen" xml:space="preserve"> <data name="LockScreen" xml:space="preserve">
<value>Lock Screen</value> <value>Layar Kunci</value>
</data> </data>
<data name="Logo" xml:space="preserve"> <data name="Logo" xml:space="preserve">
<value>Logo</value> <value>Logo</value>
@@ -591,7 +591,7 @@ Apakah Anda masih ingin melanjutkan?</value>
<value>Multi Zone Strong</value> <value>Multi Zone Strong</value>
</data> </data>
<data name="Muted" xml:space="preserve"> <data name="Muted" xml:space="preserve">
<value>Muted</value> <value>Di Bisukan</value>
</data> </data>
<data name="MuteMic" xml:space="preserve"> <data name="MuteMic" xml:space="preserve">
<value>Bisukan Mic</value> <value>Bisukan Mic</value>
@@ -609,10 +609,10 @@ Apakah Anda masih ingin melanjutkan?</value>
<value>Tidak Tersambung</value> <value>Tidak Tersambung</value>
</data> </data>
<data name="Off" xml:space="preserve"> <data name="Off" xml:space="preserve">
<value>Off</value> <value>Mati</value>
</data> </data>
<data name="On" xml:space="preserve"> <data name="On" xml:space="preserve">
<value>On</value> <value>Hidup</value>
</data> </data>
<data name="OneZone" xml:space="preserve"> <data name="OneZone" xml:space="preserve">
<value>One Zone</value> <value>One Zone</value>
@@ -759,7 +759,7 @@ Apakah Anda masih ingin melanjutkan?</value>
<value>Undervolting adalah fitur eksperimental dan berisiko. Jika nilai yang diterapkan terlalu rendah untuk perangkat keras Anda, ini dapat menjadi tidak stabil, mati mendadak, atau menyebabkan kerusakan data. Jika Anda ingin mencobanya, mulailah dengan nilai kecil terlebih dahulu, klik Terapkan, dan uji apa yang cocok untuk Anda.</value> <value>Undervolting adalah fitur eksperimental dan berisiko. Jika nilai yang diterapkan terlalu rendah untuk perangkat keras Anda, ini dapat menjadi tidak stabil, mati mendadak, atau menyebabkan kerusakan data. Jika Anda ingin mencobanya, mulailah dengan nilai kecil terlebih dahulu, klik Terapkan, dan uji apa yang cocok untuk Anda.</value>
</data> </data>
<data name="Unmuted" xml:space="preserve"> <data name="Unmuted" xml:space="preserve">
<value>Unmuted</value> <value>Bunyikan</value>
</data> </data>
<data name="Updates" xml:space="preserve"> <data name="Updates" xml:space="preserve">
<value>Pembaruan</value> <value>Pembaruan</value>
@@ -768,16 +768,16 @@ Apakah Anda masih ingin melanjutkan?</value>
<value>Versi</value> <value>Versi</value>
</data> </data>
<data name="VibrationStrength" xml:space="preserve"> <data name="VibrationStrength" xml:space="preserve">
<value>Vibration Strength</value> <value>Kekuatan Getaran</value>
</data> </data>
<data name="VisualMode" xml:space="preserve"> <data name="VisualMode" xml:space="preserve">
<value>Visual Mode</value> <value>Mode Visual</value>
</data> </data>
<data name="VisualModesHDR" xml:space="preserve"> <data name="VisualModesHDR" xml:space="preserve">
<value>Visual Modes are not available when HDR is active</value> <value>Mode Visual tidak tersedia saat HDR aktif</value>
</data> </data>
<data name="VisualModesScreen" xml:space="preserve"> <data name="VisualModesScreen" xml:space="preserve">
<value>Visual Modes are not available when laptop screen is off</value> <value>Mode Visual tidak tersedia saat layar laptop mati</value>
</data> </data>
<data name="VolumeDown" xml:space="preserve"> <data name="VolumeDown" xml:space="preserve">
<value>Volume Turun</value> <value>Volume Turun</value>
@@ -792,6 +792,6 @@ Apakah Anda masih ingin melanjutkan?</value>
<value>Jaga agar jendela aplikasi selalu di atas</value> <value>Jaga agar jendela aplikasi selalu di atas</value>
</data> </data>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>Perbesar</value>
</data> </data>
</root> </root>

View File

@@ -118,16 +118,16 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<data name="Acceleration" xml:space="preserve"> <data name="Acceleration" xml:space="preserve">
<value>Acceleration</value> <value>가속</value>
</data> </data>
<data name="ACPIError" xml:space="preserve"> <data name="ACPIError" xml:space="preserve">
<value>ASUS ACPI에 연결할 수 없어 응용 프로그램이 작동하지 않습니다. Asus System Control Interface를 먼저 설치하십시오.</value> <value>ASUS ACPI에 연결할 수 없어 응용 프로그램이 작동하지 않습니다. Asus System Control Interface를 먼저 설치하십시오.</value>
</data> </data>
<data name="AlertAPUMemoryRestart" xml:space="preserve"> <data name="AlertAPUMemoryRestart" xml:space="preserve">
<value>Restart your device to apply changes</value> <value>변경사항을 적용하려면 기기를 다시 시작하십시오.</value>
</data> </data>
<data name="AlertAPUMemoryRestartTitle" xml:space="preserve"> <data name="AlertAPUMemoryRestartTitle" xml:space="preserve">
<value>Restart now?</value> <value>지금 다시 시작하시겠습니까?</value>
</data> </data>
<data name="AlertDGPU" xml:space="preserve"> <data name="AlertDGPU" xml:space="preserve">
<value>GPU 사용량이 높습니다. 비활성화 하시겠습니까?</value> <value>GPU 사용량이 높습니다. 비활성화 하시겠습니까?</value>
@@ -142,10 +142,10 @@
<value>Ultimate 모드를 켜기 위해서는 다시 시작해야 합니다.</value> <value>Ultimate 모드를 켜기 위해서는 다시 시작해야 합니다.</value>
</data> </data>
<data name="AlertUltimateTitle" xml:space="preserve"> <data name="AlertUltimateTitle" xml:space="preserve">
<value>다시 시작하시겠습니까?</value> <value>지금 다시 시작하시겠습니까?</value>
</data> </data>
<data name="AllyController" xml:space="preserve"> <data name="AllyController" xml:space="preserve">
<value>Ally Controller</value> <value>Ally 컨트롤러</value>
</data> </data>
<data name="AnimationSpeed" xml:space="preserve"> <data name="AnimationSpeed" xml:space="preserve">
<value>애니메이션 속도</value> <value>애니메이션 속도</value>
@@ -247,28 +247,28 @@
<value>배터리 사용 중에만 60Hz 설정</value> <value>배터리 사용 중에만 60Hz 설정</value>
</data> </data>
<data name="Awake" xml:space="preserve"> <data name="Awake" xml:space="preserve">
<value>절전 모드 해제</value> <value>활성</value>
</data> </data>
<data name="BacklightLow" xml:space="preserve"> <data name="BacklightLow" xml:space="preserve">
<value>Low</value> <value>낮음</value>
</data> </data>
<data name="BacklightMax" xml:space="preserve"> <data name="BacklightMax" xml:space="preserve">
<value>Max</value> <value>최대</value>
</data> </data>
<data name="BacklightMid" xml:space="preserve"> <data name="BacklightMid" xml:space="preserve">
<value>Mid</value> <value>중간</value>
</data> </data>
<data name="BacklightOff" xml:space="preserve"> <data name="BacklightOff" xml:space="preserve">
<value>Off</value> <value>꺼짐</value>
</data> </data>
<data name="BacklightTimeout" xml:space="preserve"> <data name="BacklightTimeout" xml:space="preserve">
<value>전원 / 배터리 사용 중 자동 꺼짐 시간 (0 - 항상 켜짐)</value> <value>전원 / 배터리 사용 중 자동 꺼짐 시간 (0 - 항상 켜짐)</value>
</data> </data>
<data name="BacklightTimeoutBattery" xml:space="preserve"> <data name="BacklightTimeoutBattery" xml:space="preserve">
<value>Backlight Timeout when on battery</value> <value>배터리 사용 중 백라이트 자동 꺼짐</value>
</data> </data>
<data name="BacklightTimeoutPlugged" xml:space="preserve"> <data name="BacklightTimeoutPlugged" xml:space="preserve">
<value>Backlight Timeout when plugged</value> <value>전원 사용 중 백라이트 자동 꺼짐</value>
</data> </data>
<data name="Balanced" xml:space="preserve"> <data name="Balanced" xml:space="preserve">
<value>균형</value> <value>균형</value>
@@ -283,7 +283,7 @@
<value>배터리 수명</value> <value>배터리 수명</value>
</data> </data>
<data name="BatteryLimitFull" xml:space="preserve"> <data name="BatteryLimitFull" xml:space="preserve">
<value>One time charge to 100%</value> <value>이번만 100%까지 충전</value>
</data> </data>
<data name="Binding" xml:space="preserve"> <data name="Binding" xml:space="preserve">
<value>Binding</value> <value>Binding</value>
@@ -301,7 +301,7 @@
<value>부팅</value> <value>부팅</value>
</data> </data>
<data name="BootSound" xml:space="preserve"> <data name="BootSound" xml:space="preserve">
<value>Boot Sound</value> <value>부팅 사운드</value>
</data> </data>
<data name="Brightness" xml:space="preserve"> <data name="Brightness" xml:space="preserve">
<value>밝기</value> <value>밝기</value>
@@ -313,10 +313,10 @@
<value>밝기 증가</value> <value>밝기 증가</value>
</data> </data>
<data name="BWTrayIcon" xml:space="preserve"> <data name="BWTrayIcon" xml:space="preserve">
<value>Black and white tray icon</value> <value>흑백 트레이 아이콘</value>
</data> </data>
<data name="Calibrate" xml:space="preserve"> <data name="Calibrate" xml:space="preserve">
<value>Calibrate</value> <value>보정</value>
</data> </data>
<data name="Charging" xml:space="preserve"> <data name="Charging" xml:space="preserve">
<value>충전 중</value> <value>충전 중</value>
@@ -325,10 +325,10 @@
<value>색상</value> <value>색상</value>
</data> </data>
<data name="Contrast" xml:space="preserve"> <data name="Contrast" xml:space="preserve">
<value>Contrast</value> <value>대비</value>
</data> </data>
<data name="Controller" xml:space="preserve"> <data name="Controller" xml:space="preserve">
<value>Controller</value> <value>컨트롤러</value>
</data> </data>
<data name="CPUBoost" xml:space="preserve"> <data name="CPUBoost" xml:space="preserve">
<value>CPU 부스트</value> <value>CPU 부스트</value>
@@ -337,16 +337,16 @@
<value>사용자 설정</value> <value>사용자 설정</value>
</data> </data>
<data name="Deceleration" xml:space="preserve"> <data name="Deceleration" xml:space="preserve">
<value>Deceleration</value> <value>감속</value>
</data> </data>
<data name="Default" xml:space="preserve"> <data name="Default" xml:space="preserve">
<value>기본</value> <value>기본</value>
</data> </data>
<data name="DisableController" xml:space="preserve"> <data name="DisableController" xml:space="preserve">
<value>Disable Controller</value> <value>컨트롤러 비활성화</value>
</data> </data>
<data name="DisableOnLidClose" xml:space="preserve"> <data name="DisableOnLidClose" xml:space="preserve">
<value>Disable on lid close</value> <value>덮개를 닫을 시 비활성화</value>
</data> </data>
<data name="DisableOverdrive" xml:space="preserve"> <data name="DisableOverdrive" xml:space="preserve">
<value>화면 OD 끄기</value> <value>화면 OD 끄기</value>
@@ -355,7 +355,7 @@
<value>방전 중</value> <value>방전 중</value>
</data> </data>
<data name="DownloadColorProfiles" xml:space="preserve"> <data name="DownloadColorProfiles" xml:space="preserve">
<value>Download Color Profiles</value> <value>색 프로필 다운로드</value>
</data> </data>
<data name="DownloadUpdate" xml:space="preserve"> <data name="DownloadUpdate" xml:space="preserve">
<value>다운로드</value> <value>다운로드</value>
@@ -384,7 +384,7 @@
<value>Energy Settings</value> <value>Energy Settings</value>
</data> </data>
<data name="Export" xml:space="preserve"> <data name="Export" xml:space="preserve">
<value>Export Profile</value> <value>프로필 내보내기</value>
</data> </data>
<data name="Extra" xml:space="preserve"> <data name="Extra" xml:space="preserve">
<value>추가 설정</value> <value>추가 설정</value>
@@ -426,16 +426,16 @@
<value>Fn 키를 누르지 않고 Fn+F 핫키 작동</value> <value>Fn 키를 누르지 않고 Fn+F 핫키 작동</value>
</data> </data>
<data name="FnLockOff" xml:space="preserve"> <data name="FnLockOff" xml:space="preserve">
<value>FN-Lock Off</value> <value>FN-Lock 꺼짐</value>
</data> </data>
<data name="FnLockOn" xml:space="preserve"> <data name="FnLockOn" xml:space="preserve">
<value>FN-Lock On</value> <value>FN-Lock 켜짐</value>
</data> </data>
<data name="GPUBoost" xml:space="preserve"> <data name="GPUBoost" xml:space="preserve">
<value>다이나믹 부스트</value> <value>다이나믹 부스트</value>
</data> </data>
<data name="GPUChanging" xml:space="preserve"> <data name="GPUChanging" xml:space="preserve">
<value>충전 중</value> <value>바꾸는 중</value>
</data> </data>
<data name="GPUCoreClockOffset" xml:space="preserve"> <data name="GPUCoreClockOffset" xml:space="preserve">
<value>코어 클럭 오프셋</value> <value>코어 클럭 오프셋</value>
@@ -471,10 +471,10 @@
<value>높게</value> <value>높게</value>
</data> </data>
<data name="ImageRotation" xml:space="preserve"> <data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value> <value>이미지 방향</value>
</data> </data>
<data name="Import" xml:space="preserve"> <data name="Import" xml:space="preserve">
<value>Import Profile</value> <value>프로필 가져오기</value>
</data> </data>
<data name="KeyBindings" xml:space="preserve"> <data name="KeyBindings" xml:space="preserve">
<value>키 설정</value> <value>키 설정</value>
@@ -495,7 +495,7 @@
<value>화면</value> <value>화면</value>
</data> </data>
<data name="LEDStatusIndicators" xml:space="preserve"> <data name="LEDStatusIndicators" xml:space="preserve">
<value>LED Status Indicators</value> <value>LED 상태 표시등</value>
</data> </data>
<data name="Lid" xml:space="preserve"> <data name="Lid" xml:space="preserve">
<value>덮개</value> <value>덮개</value>
@@ -507,7 +507,7 @@
<value>조명</value> <value>조명</value>
</data> </data>
<data name="LockScreen" xml:space="preserve"> <data name="LockScreen" xml:space="preserve">
<value>Lock Screen</value> <value>잠금화면</value>
</data> </data>
<data name="Logo" xml:space="preserve"> <data name="Logo" xml:space="preserve">
<value>로고</value> <value>로고</value>
@@ -516,10 +516,10 @@
<value>낮게</value> <value>낮게</value>
</data> </data>
<data name="LSDeadzones" xml:space="preserve"> <data name="LSDeadzones" xml:space="preserve">
<value>Left Stick Deadzones</value> <value>왼쪽 스틱 데드존</value>
</data> </data>
<data name="LTDeadzones" xml:space="preserve"> <data name="LTDeadzones" xml:space="preserve">
<value>Left Trigger Deadzones</value> <value>왼쪽 트리거 데드존</value>
</data> </data>
<data name="MatrixAudio" xml:space="preserve"> <data name="MatrixAudio" xml:space="preserve">
<value>오디오 비주얼라이저</value> <value>오디오 비주얼라이저</value>
@@ -591,7 +591,7 @@
<value>Multi Zone Strong</value> <value>Multi Zone Strong</value>
</data> </data>
<data name="Muted" xml:space="preserve"> <data name="Muted" xml:space="preserve">
<value>Muted</value> <value>음소거</value>
</data> </data>
<data name="MuteMic" xml:space="preserve"> <data name="MuteMic" xml:space="preserve">
<value>마이크 음소거</value> <value>마이크 음소거</value>
@@ -609,10 +609,10 @@
<value>연결되지 않음</value> <value>연결되지 않음</value>
</data> </data>
<data name="Off" xml:space="preserve"> <data name="Off" xml:space="preserve">
<value>Off</value> <value>꺼짐</value>
</data> </data>
<data name="On" xml:space="preserve"> <data name="On" xml:space="preserve">
<value>On</value> <value>켜짐</value>
</data> </data>
<data name="OneZone" xml:space="preserve"> <data name="OneZone" xml:space="preserve">
<value>One Zone</value> <value>One Zone</value>
@@ -666,7 +666,7 @@
<value>종료</value> <value>종료</value>
</data> </data>
<data name="Reset" xml:space="preserve"> <data name="Reset" xml:space="preserve">
<value>Reset</value> <value>초기화</value>
</data> </data>
<data name="RestartGPU" xml:space="preserve"> <data name="RestartGPU" xml:space="preserve">
<value>dGPU가 사용중이기 때문에 Eco 모드로 전환할 수 없습니다. 장치 관리자에서 dGPU를 재시작하시겠습니까?</value> <value>dGPU가 사용중이기 때문에 Eco 모드로 전환할 수 없습니다. 장치 관리자에서 dGPU를 재시작하시겠습니까?</value>
@@ -675,10 +675,10 @@
<value>RPM</value> <value>RPM</value>
</data> </data>
<data name="RSDeadzones" xml:space="preserve"> <data name="RSDeadzones" xml:space="preserve">
<value>Right Stick Deadzones</value> <value>오른쪽 스틱 데드존</value>
</data> </data>
<data name="RTDeadzones" xml:space="preserve"> <data name="RTDeadzones" xml:space="preserve">
<value>Right Trigger Deadzones</value> <value>오른쪽 트리거 데드존</value>
</data> </data>
<data name="RunOnStartup" xml:space="preserve"> <data name="RunOnStartup" xml:space="preserve">
<value>시스템 시작 시 실행</value> <value>시스템 시작 시 실행</value>
@@ -693,13 +693,13 @@
<value>Screenpad 밝기 증가</value> <value>Screenpad 밝기 증가</value>
</data> </data>
<data name="Shutdown" xml:space="preserve"> <data name="Shutdown" xml:space="preserve">
<value>시스템 종료</value> <value>종료</value>
</data> </data>
<data name="Silent" xml:space="preserve"> <data name="Silent" xml:space="preserve">
<value>조용</value> <value>조용</value>
</data> </data>
<data name="Sleep" xml:space="preserve"> <data name="Sleep" xml:space="preserve">
<value>절전 모드</value> <value>절전</value>
</data> </data>
<data name="StandardGPUTooltip" xml:space="preserve"> <data name="StandardGPUTooltip" xml:space="preserve">
<value>Standard 모드에서 dGPU 켜기</value> <value>Standard 모드에서 dGPU 켜기</value>
@@ -759,7 +759,7 @@
<value>언더볼팅은 실험적이며 위험한 기능입니다. 적용 값이 너무 낮은 경우 시스템이 불안정해지고, 강제 종료되거나 데이터 손상을 유발할 수 있습니다. 낮은 값부터 적용하여 잘 작동하는지 확인해 보십시오.</value> <value>언더볼팅은 실험적이며 위험한 기능입니다. 적용 값이 너무 낮은 경우 시스템이 불안정해지고, 강제 종료되거나 데이터 손상을 유발할 수 있습니다. 낮은 값부터 적용하여 잘 작동하는지 확인해 보십시오.</value>
</data> </data>
<data name="Unmuted" xml:space="preserve"> <data name="Unmuted" xml:space="preserve">
<value>Unmuted</value> <value>음소거 해제</value>
</data> </data>
<data name="Updates" xml:space="preserve"> <data name="Updates" xml:space="preserve">
<value>업데이트</value> <value>업데이트</value>
@@ -768,16 +768,16 @@
<value>버전</value> <value>버전</value>
</data> </data>
<data name="VibrationStrength" xml:space="preserve"> <data name="VibrationStrength" xml:space="preserve">
<value>Vibration Strength</value> <value>진동 세기</value>
</data> </data>
<data name="VisualMode" xml:space="preserve"> <data name="VisualMode" xml:space="preserve">
<value>Visual Mode</value> <value>비주얼 모드</value>
</data> </data>
<data name="VisualModesHDR" xml:space="preserve"> <data name="VisualModesHDR" xml:space="preserve">
<value>Visual Modes are not available when HDR is active</value> <value>HDR이 켜져 있을 때에는 비주얼 모드를 사용할 수 없습니다.</value>
</data> </data>
<data name="VisualModesScreen" xml:space="preserve"> <data name="VisualModesScreen" xml:space="preserve">
<value>Visual Modes are not available when laptop screen is off</value> <value>노트북의 화면이 꺼져 있을 때에는 비주얼 모드를 사용할 수 없습니다.</value>
</data> </data>
<data name="VolumeDown" xml:space="preserve"> <data name="VolumeDown" xml:space="preserve">
<value>볼륨 작게</value> <value>볼륨 작게</value>
@@ -792,6 +792,6 @@
<value>창을 항상 맨 위로 유지</value> <value>창을 항상 맨 위로 유지</value>
</data> </data>
<data name="Zoom" xml:space="preserve"> <data name="Zoom" xml:space="preserve">
<value>Zoom</value> <value>확대/축소</value>
</data> </data>
</root> </root>

View File

@@ -740,6 +740,12 @@ Do you still want to continue?</value>
<data name="ToggleScreen" xml:space="preserve"> <data name="ToggleScreen" xml:space="preserve">
<value>Toggle Screen</value> <value>Toggle Screen</value>
</data> </data>
<data name="ToggleTouchscreen" xml:space="preserve">
<value>Toggle Touchscreen</value>
</data>
<data name="Touchscreen" xml:space="preserve">
<value />
</data>
<data name="Turbo" xml:space="preserve"> <data name="Turbo" xml:space="preserve">
<value>Turbo</value> <value>Turbo</value>
</data> </data>

View File

@@ -729,7 +729,7 @@ Yine de devam etmek istiyor musunuz?</value>
<value>Aura'yı Kullan</value> <value>Aura'yı Kullan</value>
</data> </data>
<data name="ToggleClamshellMode" xml:space="preserve"> <data name="ToggleClamshellMode" xml:space="preserve">
<value>Kapaklı modu otmatik değiştir</value> <value>Otomatik Clamshell Modunu Aç</value>
</data> </data>
<data name="ToggleFnLock" xml:space="preserve"> <data name="ToggleFnLock" xml:space="preserve">
<value>Fn-Lock'u Aç</value> <value>Fn-Lock'u Aç</value>

View File

@@ -135,6 +135,7 @@ namespace GHelper
labelGamma = new Label(); labelGamma = new Label();
pictureGamma = new PictureBox(); pictureGamma = new PictureBox();
labelGammaTitle = new Label(); labelGammaTitle = new Label();
buttonAutoTDP = new RButton();
panelMatrix.SuspendLayout(); panelMatrix.SuspendLayout();
panelMatrixAuto.SuspendLayout(); panelMatrixAuto.SuspendLayout();
tableLayoutMatrix.SuspendLayout(); tableLayoutMatrix.SuspendLayout();
@@ -766,6 +767,7 @@ namespace GHelper
tableAMD.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33F)); tableAMD.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33F));
tableAMD.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33F)); tableAMD.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33F));
tableAMD.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33F)); tableAMD.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33F));
tableAMD.Controls.Add(buttonAutoTDP, 0, 0);
tableAMD.Controls.Add(buttonOverlay, 0, 0); tableAMD.Controls.Add(buttonOverlay, 0, 0);
tableAMD.Controls.Add(buttonFPS, 0, 0); tableAMD.Controls.Add(buttonFPS, 0, 0);
tableAMD.Dock = DockStyle.Top; tableAMD.Dock = DockStyle.Top;
@@ -1893,6 +1895,28 @@ namespace GHelper
labelGammaTitle.TabIndex = 37; labelGammaTitle.TabIndex = 37;
labelGammaTitle.Text = "Flicker-free Dimming"; labelGammaTitle.Text = "Flicker-free Dimming";
// //
// buttonAutoTDP
//
buttonAutoTDP.Activated = false;
buttonAutoTDP.BackColor = SystemColors.ControlLightLight;
buttonAutoTDP.BorderColor = Color.Transparent;
buttonAutoTDP.BorderRadius = 5;
buttonAutoTDP.Dock = DockStyle.Fill;
buttonAutoTDP.FlatAppearance.BorderSize = 0;
buttonAutoTDP.FlatStyle = FlatStyle.Flat;
buttonAutoTDP.ForeColor = SystemColors.ControlText;
buttonAutoTDP.Image = Properties.Resources.icons8_gauge_32;
buttonAutoTDP.ImageAlign = ContentAlignment.MiddleRight;
buttonAutoTDP.Location = new Point(528, 4);
buttonAutoTDP.Margin = new Padding(4);
buttonAutoTDP.Name = "buttonAutoTDP";
buttonAutoTDP.Secondary = false;
buttonAutoTDP.Size = new Size(255, 72);
buttonAutoTDP.TabIndex = 13;
buttonAutoTDP.Text = "AutoTDP";
buttonAutoTDP.TextImageRelation = TextImageRelation.ImageBeforeText;
buttonAutoTDP.UseVisualStyleBackColor = false;
//
// SettingsForm // SettingsForm
// //
AutoScaleDimensions = new SizeF(192F, 192F); AutoScaleDimensions = new SizeF(192F, 192F);
@@ -2095,5 +2119,6 @@ namespace GHelper
private RButton buttonInstallColor; private RButton buttonInstallColor;
private Label labelVisual; private Label labelVisual;
private RButton buttonFHD; private RButton buttonFHD;
private RButton buttonAutoTDP;
} }
} }

View File

@@ -222,7 +222,9 @@ namespace GHelper
buttonUpdates.Click += ButtonUpdates_Click; buttonUpdates.Click += ButtonUpdates_Click;
sliderBattery.ValueChanged += SliderBattery_ValueChanged; sliderBattery.MouseUp += SliderBattery_MouseUp;
sliderBattery.KeyUp += SliderBattery_KeyUp;
Program.trayIcon.MouseMove += TrayIcon_MouseMove; Program.trayIcon.MouseMove += TrayIcon_MouseMove;
sensorTimer = new System.Timers.Timer(AppConfig.Get("sensor_timer", 1000)); sensorTimer = new System.Timers.Timer(AppConfig.Get("sensor_timer", 1000));
@@ -249,6 +251,9 @@ namespace GHelper
buttonFPS.Click += ButtonFPS_Click; buttonFPS.Click += ButtonFPS_Click;
buttonOverlay.Click += ButtonOverlay_Click; buttonOverlay.Click += ButtonOverlay_Click;
buttonAutoTDP.Click += ButtonAutoTDP_Click;
buttonAutoTDP.BorderColor = colorTurbo;
Text = "G-Helper " + (ProcessHelper.IsUserAdministrator() ? "—" : "-") + " " + AppConfig.GetModelShort(); Text = "G-Helper " + (ProcessHelper.IsUserAdministrator() ? "—" : "-") + " " + AppConfig.GetModelShort();
TopMost = AppConfig.Is("topmost"); TopMost = AppConfig.Is("topmost");
@@ -272,6 +277,21 @@ namespace GHelper
screenControl.ToogleFHD(); screenControl.ToogleFHD();
} }
private void SliderBattery_KeyUp(object? sender, KeyEventArgs e)
{
BatteryControl.SetBatteryChargeLimit(sliderBattery.Value);
}
private void SliderBattery_MouseUp(object? sender, MouseEventArgs e)
{
BatteryControl.SetBatteryChargeLimit(sliderBattery.Value);
}
private void ButtonAutoTDP_Click(object? sender, EventArgs e)
{
allyControl.ToggleAutoTDP();
}
private void LabelCharge_Click(object? sender, EventArgs e) private void LabelCharge_Click(object? sender, EventArgs e)
{ {
BatteryControl.BatteryReport(); BatteryControl.BatteryReport();
@@ -496,6 +516,12 @@ namespace GHelper
buttonFPS.Text = "FPS Limit " + ((limit > 0 && limit <= 120) ? limit : "OFF"); buttonFPS.Text = "FPS Limit " + ((limit > 0 && limit <= 120) ? limit : "OFF");
} }
public void VisualiseAutoTDP(bool status)
{
Logger.WriteLine($"Auto TDP: {status}");
buttonAutoTDP.Activated = status;
}
private void SettingsForm_LostFocus(object? sender, EventArgs e) private void SettingsForm_LostFocus(object? sender, EventArgs e)
{ {
lastLostFocus = DateTimeOffset.Now.ToUnixTimeMilliseconds(); lastLostFocus = DateTimeOffset.Now.ToUnixTimeMilliseconds();
@@ -736,11 +762,6 @@ namespace GHelper
gpuControl.ToggleXGM(); gpuControl.ToggleXGM();
} }
private void SliderBattery_ValueChanged(object? sender, EventArgs e)
{
BatteryControl.SetBatteryChargeLimit(sliderBattery.Value);
}
public void SetVersionLabel(string label, bool update = false) public void SetVersionLabel(string label, bool update = false)
{ {
@@ -1210,6 +1231,7 @@ namespace GHelper
else if (miniled2 >= 0) else if (miniled2 >= 0)
{ {
buttonMiniled.Enabled = !hdr; buttonMiniled.Enabled = !hdr;
if (hdr) miniled2 = 1; // Show HDR as Multizone Strong
switch (miniled2) switch (miniled2)
{ {
@@ -1227,9 +1249,9 @@ namespace GHelper
break; break;
// Multizone Off // Multizone Off
case 2: case 2:
buttonMiniled.Text = hdr ? Properties.Strings.Multizone : Properties.Strings.OneZone; buttonMiniled.Text = Properties.Strings.OneZone;
buttonMiniled.BorderColor = colorStandard; buttonMiniled.BorderColor = colorStandard;
buttonMiniled.Activated = hdr; buttonMiniled.Activated = false;
break; break;
} }
} }

View File

@@ -1,6 +1,7 @@
using GHelper.Gpu; using GHelper.Gpu;
using GHelper.Helpers; using GHelper.Helpers;
using GHelper.Input; using GHelper.Input;
using GHelper.Peripherals;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
@@ -767,6 +768,12 @@ namespace GHelper.USB
{ {
if (isStrix) ApplyDirect(AmbientData.result, init); if (isStrix) ApplyDirect(AmbientData.result, init);
else ApplyDirect(AmbientData.result[0], init); else ApplyDirect(AmbientData.result[0], init);
foreach (var mouse in PeripheralsProvider.ConnectedMice)
{
mouse.SetColor(AmbientData.result[0]);
}
} }
} }

View File

@@ -30,6 +30,7 @@ namespace GHelper
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
components = new System.ComponentModel.Container();
tableBios = new TableLayoutPanel(); tableBios = new TableLayoutPanel();
labelBIOS = new Label(); labelBIOS = new Label();
pictureBios = new PictureBox(); pictureBios = new PictureBox();
@@ -47,6 +48,7 @@ namespace GHelper
labelLegendGray = new Label(); labelLegendGray = new Label();
labelLegendRed = new Label(); labelLegendRed = new Label();
labelLegend = new Label(); labelLegend = new Label();
toolTip = new ToolTip(components);
((System.ComponentModel.ISupportInitialize)pictureBios).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureBios).BeginInit();
panelBiosTitle.SuspendLayout(); panelBiosTitle.SuspendLayout();
panelBios.SuspendLayout(); panelBios.SuspendLayout();
@@ -339,5 +341,6 @@ namespace GHelper
private Label labelLegendRed; private Label labelLegendRed;
private Label labelLegendGray; private Label labelLegendGray;
private Label labelLegendGreen; private Label labelLegendGreen;
private ToolTip toolTip;
} }
} }

View File

@@ -153,6 +153,7 @@ namespace GHelper
table.Controls.Add(new Label { Text = driver.date, Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Padding = new Padding(5, 5, 5, 5) }, 2, table.RowCount); table.Controls.Add(new Label { Text = driver.date, Anchor = AnchorStyles.Left, Dock = DockStyle.Fill, Padding = new Padding(5, 5, 5, 5) }, 2, table.RowCount);
table.Controls.Add(versionLabel, 3, table.RowCount); table.Controls.Add(versionLabel, 3, table.RowCount);
table.RowCount++; table.RowCount++;
}); });
} }
@@ -166,11 +167,13 @@ namespace GHelper
}); });
} }
private void _VisualiseNewDriver(int position, int newer, TableLayoutPanel table) private void _VisualiseNewDriver(int position, int newer, string tip, TableLayoutPanel table)
{ {
var label = table.GetControlFromPosition(3, position) as LinkLabel; var label = table.GetControlFromPosition(3, position) as LinkLabel;
if (label != null) if (label != null)
{ {
toolTip.SetToolTip(label, tip);
if (newer == DRIVER_NEWER) if (newer == DRIVER_NEWER)
{ {
label.AccessibleName = label.AccessibleName + Properties.Strings.NewUpdates; label.AccessibleName = label.AccessibleName + Properties.Strings.NewUpdates;
@@ -183,18 +186,18 @@ namespace GHelper
} }
} }
public void VisualiseNewDriver(int position, int newer, TableLayoutPanel table) public void VisualiseNewDriver(int position, int newer, string tip, TableLayoutPanel table)
{ {
if (InvokeRequired) if (InvokeRequired)
{ {
Invoke(delegate Invoke(delegate
{ {
_VisualiseNewDriver(position, newer, table); _VisualiseNewDriver(position, newer, tip, table);
}); });
} }
else else
{ {
_VisualiseNewDriver(position, newer, table); _VisualiseNewDriver(position, newer, tip, table);
} }
} }
@@ -300,6 +303,8 @@ namespace GHelper
foreach (var driver in drivers) foreach (var driver in drivers)
{ {
int newer = DRIVER_NOT_FOUND; int newer = DRIVER_NOT_FOUND;
string tip = driver.version;
if (type == 0 && driver.hardwares.ToString().Length > 0) if (type == 0 && driver.hardwares.ToString().Length > 0)
for (int k = 0; k < driver.hardwares.GetArrayLength(); k++) for (int k = 0; k < driver.hardwares.GetArrayLength(); k++)
{ {
@@ -310,14 +315,18 @@ namespace GHelper
{ {
newer = Math.Min(newer, new Version(driver.version).CompareTo(new Version(localVersion))); newer = Math.Min(newer, new Version(driver.version).CompareTo(new Version(localVersion)));
Logger.WriteLine(driver.title + " " + deviceID + " " + driver.version + " vs " + localVersion + " = " + newer); Logger.WriteLine(driver.title + " " + deviceID + " " + driver.version + " vs " + localVersion + " = " + newer);
tip = "Download: " + driver.version + "\n" + "Installed: " + localVersion;
} }
} }
if (type == 1) if (type == 1)
{
newer = Int32.Parse(driver.version) > Int32.Parse(bios) ? 1 : -1; newer = Int32.Parse(driver.version) > Int32.Parse(bios) ? 1 : -1;
tip = "Download: " + driver.version + "\n" + "Installed: " + bios;
}
VisualiseNewDriver(count, newer, table); VisualiseNewDriver(count, newer, tip, table);
if (newer == DRIVER_NEWER) if (newer == DRIVER_NEWER)
{ {

View File

@@ -117,4 +117,7 @@
<resheader name="writer"> <resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader> </resheader>
<metadata name="toolTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root> </root>

View File

@@ -13,7 +13,7 @@ Works with all popular models, such as ROG Zephyrus G14, G15, G16, M16, Flow X13
- [Troubleshooting](https://github.com/seerge/g-helper/wiki/Troubleshooting) - [Troubleshooting](https://github.com/seerge/g-helper/wiki/Troubleshooting)
- [Power User Settings](https://github.com/seerge/g-helper/wiki/Power-user-settings) - [Power User Settings](https://github.com/seerge/g-helper/wiki/Power-user-settings)
### Support project : [:euro: Paypal EUR](https://www.paypal.com/donate/?hosted_button_id=4HMSHS4EBQWTA) | [💵 Paypal USD](https://www.paypal.com/donate/?hosted_button_id=SRM6QUX6ACXDY) | [🪙 Stripe](https://buy.stripe.com/00gaFJ9Lf79v7WobII) ### Support project : [:euro: Paypal EUR](https://www.paypal.com/donate/?hosted_button_id=4HMSHS4EBQWTA) | [💵 Paypal USD](https://www.paypal.com/donate/?hosted_button_id=SRM6QUX6ACXDY)
[![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) [![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)
@@ -115,6 +115,7 @@ Huge thanks to [@IceStormNG](https://github.com/IceStormNG) 👑 for contributio
- ``Ctrl + M1 / M2`` - Screen brightness Down / Up - ``Ctrl + M1 / M2`` - Screen brightness Down / Up
- ``Shift + M1 / M2`` - Backlight brightness Down / Up - ``Shift + M1 / M2`` - Backlight brightness Down / Up
- ``Fn + C`` - Fn-Lock - ``Fn + C`` - Fn-Lock
- ``Fn + Ctrl + F7 / F8`` - Flicker-free dimming Down / Up
- ``Fn + Shift + F7 / F8`` - Matrix / Slash Lighting brightness Down / Up - ``Fn + Shift + F7 / F8`` - Matrix / Slash Lighting brightness Down / Up
- ``Fn + Shift + F7 / F8`` - Screenpad brightness Down / Up - ``Fn + Shift + F7 / F8`` - Screenpad brightness Down / Up
- ``Ctrl + Shift + F20`` - Mute Microphone - ``Ctrl + Shift + F20`` - Mute Microphone

View File

@@ -257,31 +257,28 @@ G-helper是一个单文件的exe文件, 而且它不会向系统中安装任何
--- ---
# 安装指南 ### 如何开始
1. 从 [**Releases Page**](https://github.com/seerge/g-helper/releases) 下载最新版本 1.下载[**最新版本**](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
2. 解压到选择的文件夹 2. 解压到选择的文件夹_不要直接从zip运行exe因为Windows会将其放入临时文件夹并在之后删除_
3. 运行 **GHelper.exe** 3.运行**GHelper.exe**
### 运行要求(必须) - 如果您在启动时收到来自 Windows Defender 的警告Windows 保护了您的电脑)。
单击“更多信息”->“仍然运行”。
- 如果出现“在商店中搜索应用程序”对话框,则这是 Windows Defender 的一个错误。
右键单击 GHelper.exe -> 选择“属性” -> 选择“取消阻止复选框”
- Microsoft [.NET7](https://dotnet.microsoft.com/en-us/download)。 你可能已经安装了。 如果没有的话你可以从官方网站 [立即下载](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/sdk-7.0.202-windows-x64-installer)。 ### 要求(强制)
- [Asus System Control Interface](https://dlcdnets.asus.com/pub/ASUS/nb/Image/CustomComponent/ASUSSystemControlInterfaceV3/ASUSSystemControlInterfaceV3.exe)。 如果你安装了或者安装过myASUS, 那么这个"驱动"应当已经安装(即使myASUS已经卸载)。 或者你可以手动下载安装。
### 推荐配置(可选) - [Microsoft .NET 7](https://download.visualstudio.microsoft.com/download/pr/8091a826-e1c4-424a-b17b-5c10776cd3de/8957f21a279322d8fac9b542c6aba12e/dotnet-sdk-7.0.408-win-x64.exe)
- [华硕系统控制界面](https://dlcdnets.asus.com/pub/ASUS/nb/Image/CustomComponent/ASUSSystemControlInterfaceV3/ASUSSystemControlInterfaceV3.exe)
- 推荐保持 "Asus Optimization Service" 这个windows服务的运行, 它保证基本的键盘快捷键(比如屏幕或键盘亮度)能够使用。 ### 建议(可选)
- 可选选项(!) 你可以通过在管理员模式下运行 [这个用于精简的.bat文件](https://raw.githubusercontent.com/seerge/g-helper/main/debloat.bat)来禁用/移除不必要的服务。如果要恢复这些服务,运行 [这个.bat文件](https://raw.githubusercontent.com/seerge/g-helper/main/bloat.bat)。
-这个应用不建议与Armoury Crate(及其服务)同时运行, 因为它们调整相同的设置。可以[使用ASUS官方提供的卸载工具卸载](https://dlcdnets.asus.com/pub/ASUS/mb/14Utilities/Armoury_Crate_Uninstall_Tool.zip?model=armoury%20crate)Armoury Crate。以防万一,你总是可以后再安装回来 - **不建议**将该应用程序与 Armoury Crate 服务结合使用,因为它们调整相同的设置。可以[使用AC自带的卸载工具卸载](https://dlcdnets.asus.com/pub/ASUS/mb/14Utilities/Armoury_Crate_Uninstall_Tool.zip?model=armoury%20crate)。 以防万一,可以后再安装
- **不建议**运行“ASUS Smart Display Control”应用程序因为它会尝试更改刷新率并与 g-helper 争夺相同的功能。 您可以安全地卸载它。
- 如果您不打算使用 MyASUS您可以停止/禁用不必要的服务:转到应用程序中的 **Extra**,然后按 Asus 服务部分中的“停止”。 要重新启动/启用服务 - 单击“开始”。
---
为Asus ROG 幻14 2022 (配置了AMD核显和独显)设计和开发。但应当可能在幻14 2021和2020款, 幻15, X FLOW, 以及其他的ROG机型上使用相关且支持的功能。
我并没有microsoft证书来为这个应用签名所以如果你在启动时看到windows defender的警告(windows 保护了你的电脑),点击“更多详情” -> 继续运行(不推荐)。作为可选选项,你也可以使用 visual studio自行编译然后运行这个项目 :)
设置文件保存在 ``%AppData%\GHelper``
--- ---