mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
444fdcdd97 | ||
|
|
b874900393 | ||
|
|
05aad0f1ad | ||
|
|
a34cc1cb03 | ||
|
|
8c557344db | ||
|
|
5b2a4cb065 | ||
|
|
51bcad8bbe | ||
|
|
125aa44e6c | ||
|
|
9e6ca7c2e2 | ||
|
|
252cc9d868 | ||
|
|
0b03b62a2d | ||
|
|
ff7a5463d6 | ||
|
|
5134aaca9d | ||
|
|
2a5c2e02ac | ||
|
|
80e3971dad | ||
|
|
ac60986646 | ||
|
|
1e0169a71d | ||
|
|
e0346a8af8 | ||
|
|
4ee97fdbc4 | ||
|
|
34075b67d4 | ||
|
|
4ed9675d99 | ||
|
|
af3538e105 | ||
|
|
d818405e04 |
@@ -10,22 +10,23 @@ namespace GHelper.AnimeMatrix
|
||||
|
||||
public class AniMatrix
|
||||
{
|
||||
static System.Timers.Timer matrixTimer = default!;
|
||||
static AnimeMatrixDevice mat;
|
||||
System.Timers.Timer matrixTimer = default!;
|
||||
AnimeMatrixDevice mat;
|
||||
|
||||
static double[] AudioValues;
|
||||
static WasapiCapture AudioDevice;
|
||||
double[] AudioValues;
|
||||
WasapiCapture AudioDevice;
|
||||
|
||||
public static bool IsValid => mat != null;
|
||||
public bool IsValid => mat != null;
|
||||
|
||||
private static long lastPresent;
|
||||
private static List<double> maxes = new List<double>();
|
||||
private long lastPresent;
|
||||
private List<double> maxes = new List<double>();
|
||||
|
||||
public AniMatrix()
|
||||
{
|
||||
try
|
||||
{
|
||||
mat = new AnimeMatrixDevice();
|
||||
Task.Run(mat.WakeUp);
|
||||
matrixTimer = new System.Timers.Timer(100);
|
||||
matrixTimer.Elapsed += MatrixTimer_Elapsed;
|
||||
}
|
||||
@@ -41,10 +42,10 @@ namespace GHelper.AnimeMatrix
|
||||
|
||||
if (!IsValid) return;
|
||||
|
||||
int brightness = Program.config.getConfig("matrix_brightness");
|
||||
int running = Program.config.getConfig("matrix_running");
|
||||
int brightness = AppConfig.getConfig("matrix_brightness");
|
||||
int running = AppConfig.getConfig("matrix_running");
|
||||
|
||||
bool auto = Program.config.getConfig("matrix_auto") == 1;
|
||||
bool auto = AppConfig.getConfig("matrix_auto") == 1;
|
||||
|
||||
if (brightness < 0) brightness = 0;
|
||||
if (running < 0) running = 0;
|
||||
@@ -74,11 +75,10 @@ namespace GHelper.AnimeMatrix
|
||||
switch (running)
|
||||
{
|
||||
case 2:
|
||||
SetMatrixPicture(Program.config.getConfigString("matrix_picture"));
|
||||
SetMatrixPicture(AppConfig.getConfigString("matrix_picture"));
|
||||
break;
|
||||
case 3:
|
||||
StartMatrixTimer(1000);
|
||||
Logger.WriteLine("Matrix Clock");
|
||||
SetMatrixClock();
|
||||
break;
|
||||
case 4:
|
||||
SetMatrixAudio();
|
||||
@@ -94,23 +94,23 @@ namespace GHelper.AnimeMatrix
|
||||
}
|
||||
|
||||
}
|
||||
private static void StartMatrixTimer(int interval = 100)
|
||||
private void StartMatrixTimer(int interval = 100)
|
||||
{
|
||||
matrixTimer.Interval = interval;
|
||||
matrixTimer.Enabled = true;
|
||||
matrixTimer.Start();
|
||||
}
|
||||
|
||||
private static void StopMatrixTimer()
|
||||
private void StopMatrixTimer()
|
||||
{
|
||||
matrixTimer.Enabled = false;
|
||||
matrixTimer.Stop();
|
||||
}
|
||||
|
||||
|
||||
private static void MatrixTimer_Elapsed(object? sender, ElapsedEventArgs e)
|
||||
private void MatrixTimer_Elapsed(object? sender, ElapsedEventArgs e)
|
||||
{
|
||||
if (!IsValid) return;
|
||||
//if (!IsValid) return;
|
||||
|
||||
switch (Program.config.getConfig("matrix_running"))
|
||||
switch (AppConfig.getConfig("matrix_running"))
|
||||
{
|
||||
case 2:
|
||||
mat.PresentNextFrame();
|
||||
@@ -122,6 +122,19 @@ namespace GHelper.AnimeMatrix
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void SetMatrixClock()
|
||||
{
|
||||
mat.SetBuiltInAnimation(false);
|
||||
StartMatrixTimer(1000);
|
||||
Logger.WriteLine("Matrix Clock");
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
StopMatrixAudio();
|
||||
}
|
||||
|
||||
void StopMatrixAudio()
|
||||
{
|
||||
if (AudioDevice is not null)
|
||||
|
||||
@@ -2,20 +2,18 @@
|
||||
using System.Management;
|
||||
using System.Text.Json;
|
||||
|
||||
public class AppConfig
|
||||
public static class AppConfig
|
||||
{
|
||||
|
||||
public string appPath;
|
||||
string configFile;
|
||||
private static string configFile;
|
||||
private static string? _model;
|
||||
|
||||
string _model;
|
||||
private static Dictionary<string, object> config = new Dictionary<string, object>();
|
||||
|
||||
public Dictionary<string, object> config = new Dictionary<string, object>();
|
||||
|
||||
public AppConfig()
|
||||
static AppConfig()
|
||||
{
|
||||
|
||||
appPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\GHelper";
|
||||
string appPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\GHelper";
|
||||
configFile = appPath + "\\config.json";
|
||||
|
||||
if (!System.IO.Directory.Exists(appPath))
|
||||
@@ -41,7 +39,7 @@ public class AppConfig
|
||||
}
|
||||
|
||||
|
||||
public string GetModel()
|
||||
public static string GetModel()
|
||||
{
|
||||
if (_model is null)
|
||||
{
|
||||
@@ -58,14 +56,14 @@ public class AppConfig
|
||||
|
||||
return _model;
|
||||
}
|
||||
public bool ContainsModel(string contains)
|
||||
public static bool ContainsModel(string contains)
|
||||
{
|
||||
|
||||
GetModel();
|
||||
return (_model is not null && _model.Contains(contains));
|
||||
|
||||
}
|
||||
private void initConfig()
|
||||
private static void initConfig()
|
||||
{
|
||||
config = new Dictionary<string, object>();
|
||||
config["performance_mode"] = 0;
|
||||
@@ -73,26 +71,26 @@ public class AppConfig
|
||||
File.WriteAllText(configFile, jsonString);
|
||||
}
|
||||
|
||||
public int getConfig(string name, bool performance = false)
|
||||
public static int getConfig(string name)
|
||||
{
|
||||
if (config.ContainsKey(name))
|
||||
return int.Parse(config[name].ToString());
|
||||
else return -1;
|
||||
}
|
||||
|
||||
public bool isConfig(string name)
|
||||
public static bool isConfig(string name)
|
||||
{
|
||||
return getConfig(name) == 1;
|
||||
}
|
||||
|
||||
public string getConfigString(string name)
|
||||
public static string getConfigString(string name)
|
||||
{
|
||||
if (config.ContainsKey(name))
|
||||
return config[name].ToString();
|
||||
else return null;
|
||||
}
|
||||
|
||||
public void setConfig(string name, int value)
|
||||
public static void setConfig(string name, int value)
|
||||
{
|
||||
config[name] = value;
|
||||
string jsonString = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true });
|
||||
@@ -105,7 +103,7 @@ public class AppConfig
|
||||
}
|
||||
}
|
||||
|
||||
public void setConfig(string name, string value)
|
||||
public static void setConfig(string name, string value)
|
||||
{
|
||||
config[name] = value;
|
||||
string jsonString = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true });
|
||||
@@ -119,7 +117,7 @@ public class AppConfig
|
||||
}
|
||||
}
|
||||
|
||||
public string getParamName(AsusFan device, string paramName = "fan_profile")
|
||||
public static string getParamName(AsusFan device, string paramName = "fan_profile")
|
||||
{
|
||||
int mode = getConfig("performance_mode");
|
||||
string name;
|
||||
@@ -144,7 +142,7 @@ public class AppConfig
|
||||
return paramName + "_" + name + "_" + mode;
|
||||
}
|
||||
|
||||
public byte[] getFanConfig(AsusFan device)
|
||||
public static byte[] getFanConfig(AsusFan device)
|
||||
{
|
||||
string curveString = getConfigString(getParamName(device));
|
||||
byte[] curve = { };
|
||||
@@ -155,7 +153,7 @@ public class AppConfig
|
||||
return curve;
|
||||
}
|
||||
|
||||
public void setFanConfig(AsusFan device, byte[] curve)
|
||||
public static void setFanConfig(AsusFan device, byte[] curve)
|
||||
{
|
||||
string bitCurve = BitConverter.ToString(curve);
|
||||
setConfig(getParamName(device), bitCurve);
|
||||
@@ -170,7 +168,7 @@ public class AppConfig
|
||||
return array;
|
||||
}
|
||||
|
||||
public byte[] getDefaultCurve(AsusFan device)
|
||||
public static byte[] getDefaultCurve(AsusFan device)
|
||||
{
|
||||
int mode = getConfig("performance_mode");
|
||||
byte[] curve;
|
||||
@@ -200,19 +198,19 @@ public class AppConfig
|
||||
return curve;
|
||||
}
|
||||
|
||||
public string getConfigPerfString(string name)
|
||||
public static string getConfigPerfString(string name)
|
||||
{
|
||||
int mode = getConfig("performance_mode");
|
||||
return getConfigString(name + "_" + mode);
|
||||
}
|
||||
|
||||
public int getConfigPerf(string name)
|
||||
public static int getConfigPerf(string name)
|
||||
{
|
||||
int mode = getConfig("performance_mode");
|
||||
return getConfig(name + "_" + mode);
|
||||
}
|
||||
|
||||
public void setConfigPerf(string name, int value)
|
||||
public static void setConfigPerf(string name, int value)
|
||||
{
|
||||
int mode = getConfig("performance_mode");
|
||||
setConfig(name + "_" + mode, value);
|
||||
|
||||
@@ -171,7 +171,7 @@ public class AsusACPI
|
||||
data[1] = BitConverter.GetBytes(eventHandle.ToInt32())[1];
|
||||
|
||||
result = Control(0x222400, data, outBuffer);
|
||||
Debug.WriteLine(result + ":" + BitConverter.ToString(data) + "|" + BitConverter.ToString(outBuffer));
|
||||
Logger.WriteLine("ACPI " + result + ":" + BitConverter.ToString(data) + "|" + BitConverter.ToString(outBuffer));
|
||||
|
||||
while (true)
|
||||
{
|
||||
@@ -353,10 +353,14 @@ public class AsusACPI
|
||||
|
||||
}
|
||||
|
||||
public static bool IsInvalidCurve(byte[] curve)
|
||||
{
|
||||
return curve.Length != 16 || IsEmptyCurve(curve);
|
||||
}
|
||||
|
||||
public static bool IsEmptyCurve(byte[] curve)
|
||||
{
|
||||
return curve.Length != 16 || curve.All(singleByte => singleByte == 0);
|
||||
return curve.All(singleByte => singleByte == 0);
|
||||
}
|
||||
|
||||
public static byte[] FixFanCurve(byte[] curve)
|
||||
@@ -397,6 +401,7 @@ public class AsusACPI
|
||||
|
||||
public bool IsXGConnected()
|
||||
{
|
||||
//return true;
|
||||
return DeviceGet(GPUXGConnected) == 1;
|
||||
}
|
||||
|
||||
|
||||
156
app/AsusUSB.cs
156
app/AsusUSB.cs
@@ -1,6 +1,6 @@
|
||||
using HidLibrary;
|
||||
using Microsoft.Win32;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
@@ -49,13 +49,23 @@ namespace GHelper
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static class AsusUSB
|
||||
{
|
||||
|
||||
public const byte HID_ID = 0x5a;
|
||||
public const int ASUS_ID = 0x0b05;
|
||||
|
||||
static byte[] MESSAGE_SET = { 0x5d, 0xb5, 0, 0, 0 };
|
||||
static byte[] MESSAGE_APPLY = { 0x5d, 0xb4 };
|
||||
public const byte INPUT_HID_ID = 0x5a;
|
||||
public const byte AURA_HID_ID = 0x5d;
|
||||
|
||||
public static readonly byte[] LED_INIT1 = new byte[] { AURA_HID_ID, 0xb9 };
|
||||
public static readonly byte[] LED_INIT2 = Encoding.ASCII.GetBytes("]ASUS Tech.Inc.");
|
||||
public static readonly byte[] LED_INIT3 = new byte[] { AURA_HID_ID, 0x05, 0x20, 0x31, 0, 0x08 };
|
||||
public static readonly byte[] LED_INIT4 = Encoding.ASCII.GetBytes("^ASUS Tech.Inc.");
|
||||
public static readonly byte[] LED_INIT5 = new byte[] { 0x5e, 0x05, 0x20, 0x31, 0, 0x08 };
|
||||
|
||||
static byte[] MESSAGE_SET = { AURA_HID_ID, 0xb5, 0, 0, 0 };
|
||||
static byte[] MESSAGE_APPLY = { AURA_HID_ID, 0xb4 };
|
||||
|
||||
static int[] deviceIds = { 0x1a30, 0x1854, 0x1869, 0x1866, 0x19b6, 0x1822, 0x1837, 0x1854, 0x184a, 0x183d, 0x8502, 0x1807, 0x17e0, 0x18c6 };
|
||||
|
||||
@@ -75,6 +85,7 @@ namespace GHelper
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
static Dictionary<int, string> _modes = new Dictionary<int, string>
|
||||
{
|
||||
{ 0, Properties.Strings.AuraStatic },
|
||||
@@ -103,18 +114,18 @@ namespace GHelper
|
||||
|
||||
public static Dictionary<int, string> GetModes()
|
||||
{
|
||||
if (Program.config.ContainsModel("TUF"))
|
||||
if (AppConfig.ContainsModel("TUF"))
|
||||
{
|
||||
_modes.Remove(3);
|
||||
}
|
||||
|
||||
if (Program.config.ContainsModel("401"))
|
||||
if (AppConfig.ContainsModel("401"))
|
||||
{
|
||||
_modes.Remove(2);
|
||||
_modes.Remove(3);
|
||||
}
|
||||
|
||||
if (Program.config.ContainsModel("Strix") || Program.config.ContainsModel("Scar"))
|
||||
if (AppConfig.ContainsModel("Strix") || AppConfig.ContainsModel("Scar"))
|
||||
{
|
||||
return _modesStrix;
|
||||
}
|
||||
@@ -137,7 +148,7 @@ namespace GHelper
|
||||
|
||||
public static bool HasSecondColor()
|
||||
{
|
||||
return (mode == 1 && !Program.config.ContainsModel("TUF"));
|
||||
return (mode == 1 && !AppConfig.ContainsModel("TUF"));
|
||||
}
|
||||
|
||||
public static int Speed
|
||||
@@ -166,64 +177,42 @@ namespace GHelper
|
||||
|
||||
private static IEnumerable<HidDevice> GetHidDevices(int[] deviceIds, int minInput = 18)
|
||||
{
|
||||
HidDevice[] HidDeviceList = HidDevices.Enumerate(0x0b05, deviceIds).ToArray();
|
||||
HidDevice[] HidDeviceList = HidDevices.Enumerate(ASUS_ID, deviceIds).ToArray();
|
||||
foreach (HidDevice device in HidDeviceList)
|
||||
if (device.IsConnected
|
||||
&& device.Capabilities.FeatureReportByteLength > 0
|
||||
&& device.Capabilities.InputReportByteLength >= minInput) //
|
||||
&& device.Capabilities.InputReportByteLength >= minInput)
|
||||
yield return device;
|
||||
}
|
||||
|
||||
private static HidDevice? GetInputDevice()
|
||||
public static HidDevice? GetDevice(byte reportID = INPUT_HID_ID)
|
||||
{
|
||||
HidDevice[] HidDeviceList = HidDevices.Enumerate(0x0b05, deviceIds).ToArray();
|
||||
HidDevice[] HidDeviceList = HidDevices.Enumerate(ASUS_ID, deviceIds).ToArray();
|
||||
HidDevice input = null;
|
||||
|
||||
foreach (HidDevice device in HidDeviceList)
|
||||
if (device.ReadFeatureData(out byte[] data, HID_ID))
|
||||
return device;
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void TouchpadToggle()
|
||||
{
|
||||
HidDevice? input = GetInputDevice();
|
||||
if (input != null) input.WriteFeatureData(new byte[] { HID_ID,0xf4,0x6b});
|
||||
}
|
||||
|
||||
public static void RunListener(Action<int> KeyHandler)
|
||||
{
|
||||
HidDevice? input = GetInputDevice();
|
||||
if (input == null) return;
|
||||
|
||||
Logger.WriteLine("Input Events " + input.DevicePath);
|
||||
|
||||
Task.Run(() =>
|
||||
{
|
||||
try
|
||||
if (device.ReadFeatureData(out byte[] data, reportID))
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
var data = input.Read().Data;
|
||||
if (data.Length > 1 && data[0] == HID_ID && data[1] > 0)
|
||||
{
|
||||
Logger.WriteLine("Key:" + data[1]);
|
||||
KeyHandler(data[1]);
|
||||
}
|
||||
}
|
||||
input = device;
|
||||
//Logger.WriteLine("HID Device("+ reportID + ")" + + device.Capabilities.FeatureReportByteLength + "|" + device.Capabilities.InputReportByteLength + device.DevicePath);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.ToString());
|
||||
}
|
||||
});
|
||||
|
||||
return input;
|
||||
}
|
||||
|
||||
public static bool TouchpadToggle()
|
||||
{
|
||||
HidDevice? input = GetDevice();
|
||||
if (input != null) return input.WriteFeatureData(new byte[] { INPUT_HID_ID, 0xf4, 0x6b });
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public static byte[] AuraMessage(int mode, Color color, Color color2, int speed)
|
||||
{
|
||||
|
||||
byte[] msg = new byte[17];
|
||||
msg[0] = 0x5d;
|
||||
msg[0] = AURA_HID_ID;
|
||||
msg[1] = 0xb3;
|
||||
msg[2] = 0x00; // Zone
|
||||
msg[3] = (byte)mode; // Aura Mode
|
||||
@@ -238,24 +227,44 @@ namespace GHelper
|
||||
return msg;
|
||||
}
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
var devices = GetHidDevices(deviceIds);
|
||||
foreach (HidDevice device in devices)
|
||||
{
|
||||
device.OpenDevice();
|
||||
device.WriteFeatureData(LED_INIT1);
|
||||
device.WriteFeatureData(LED_INIT2);
|
||||
device.WriteFeatureData(LED_INIT3);
|
||||
device.WriteFeatureData(LED_INIT4);
|
||||
device.WriteFeatureData(LED_INIT5);
|
||||
device.CloseDevice();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public static void ApplyBrightness(int brightness)
|
||||
{
|
||||
byte[] msg = { 0x5d, 0xba, 0xc5, 0xc4, (byte)brightness };
|
||||
|
||||
var devices = GetHidDevices(deviceIds);
|
||||
//Logger.WriteLine("USB-KB = " + BitConverter.ToString(msg));
|
||||
|
||||
foreach (HidDevice device in devices)
|
||||
Task.Run(() =>
|
||||
{
|
||||
device.OpenDevice();
|
||||
device.Write(msg);
|
||||
Logger.WriteLine("USB-KB " + device.Attributes.ProductHexId + ":" + BitConverter.ToString(msg));
|
||||
device.CloseDevice();
|
||||
}
|
||||
|
||||
if (Program.config.ContainsModel("TUF"))
|
||||
Program.acpi.TUFKeyboardBrightness(brightness);
|
||||
byte[] msg = { INPUT_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness };
|
||||
Logger.WriteLine("KB Backlight:" + BitConverter.ToString(msg));
|
||||
|
||||
var devices = GetHidDevices(deviceIds, 0);
|
||||
foreach (HidDevice device in devices)
|
||||
{
|
||||
device.OpenDevice();
|
||||
device.WriteFeatureData(msg);
|
||||
device.CloseDevice();
|
||||
}
|
||||
|
||||
if (AppConfig.ContainsModel("TUF"))
|
||||
Program.acpi.TUFKeyboardBrightness(brightness);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -271,12 +280,12 @@ namespace GHelper
|
||||
foreach (HidDevice device in devices)
|
||||
{
|
||||
device.OpenDevice();
|
||||
device.Write(msg);
|
||||
device.WriteFeatureData(msg);
|
||||
Logger.WriteLine("USB-KB " + device.Attributes.ProductHexId + ":" + BitConverter.ToString(msg));
|
||||
device.CloseDevice();
|
||||
}
|
||||
|
||||
if (Program.config.ContainsModel("TUF"))
|
||||
if (AppConfig.ContainsModel("TUF"))
|
||||
Program.acpi.TUFKeyboardPower(
|
||||
flags.Contains(AuraDev19b6.AwakeKeyb),
|
||||
flags.Contains(AuraDev19b6.BootKeyb),
|
||||
@@ -288,13 +297,16 @@ namespace GHelper
|
||||
public static int SetXGM(byte[] msg)
|
||||
{
|
||||
|
||||
Debug.WriteLine("XGM Payload :" + BitConverter.ToString(msg));
|
||||
//Logger.WriteLine("XGM Payload :" + BitConverter.ToString(msg));
|
||||
|
||||
foreach (HidDevice device in GetHidDevices(new int[] { 0x1970 }))
|
||||
var payload = new byte[300];
|
||||
Array.Copy(msg, payload, msg.Length);
|
||||
|
||||
foreach (HidDevice device in GetHidDevices(new int[] { 0x1970 }, 0))
|
||||
{
|
||||
device.OpenDevice();
|
||||
Debug.WriteLine("XGM " + device.Attributes.ProductHexId + ":" + BitConverter.ToString(msg));
|
||||
device.WriteFeatureData(msg);
|
||||
Logger.WriteLine("XGM " + device.Attributes.ProductHexId + "|" + device.Capabilities.FeatureReportByteLength + ":" + BitConverter.ToString(msg));
|
||||
device.WriteFeatureData(payload);
|
||||
device.CloseDevice();
|
||||
return 1;
|
||||
}
|
||||
@@ -316,7 +328,7 @@ namespace GHelper
|
||||
public static int SetXGMFan(byte[] curve)
|
||||
{
|
||||
|
||||
if (AsusACPI.IsEmptyCurve(curve)) return -1;
|
||||
if (AsusACPI.IsInvalidCurve(curve)) return -1;
|
||||
|
||||
byte[] msg = new byte[19];
|
||||
Array.Copy(new byte[] { 0x5e, 0xd1, 0x01 }, msg, 3);
|
||||
@@ -357,14 +369,14 @@ namespace GHelper
|
||||
foreach (HidDevice device in devices)
|
||||
{
|
||||
device.OpenDevice();
|
||||
device.Write(msg);
|
||||
device.Write(MESSAGE_SET);
|
||||
device.Write(MESSAGE_APPLY);
|
||||
device.WriteFeatureData(msg);
|
||||
device.WriteFeatureData(MESSAGE_SET);
|
||||
device.WriteFeatureData(MESSAGE_APPLY);
|
||||
device.CloseDevice();
|
||||
Logger.WriteLine("USB-KB " + device.Capabilities.FeatureReportByteLength + "|" + device.Capabilities.InputReportByteLength + device.Description + device.DevicePath + ":" + BitConverter.ToString(msg));
|
||||
}
|
||||
|
||||
if (Program.config.ContainsModel("TUF"))
|
||||
if (AppConfig.ContainsModel("TUF"))
|
||||
Program.acpi.TUFKeyboardRGB(Mode, Color1, _speed);
|
||||
|
||||
}
|
||||
|
||||
@@ -30,11 +30,6 @@ namespace CustomControls
|
||||
|
||||
public bool darkTheme = false;
|
||||
|
||||
public RForm()
|
||||
{
|
||||
DoubleBuffered = true;
|
||||
}
|
||||
|
||||
public static void InitColors(bool darkTheme)
|
||||
{
|
||||
if (darkTheme)
|
||||
|
||||
241
app/Extra.Designer.cs
generated
241
app/Extra.Designer.cs
generated
@@ -32,16 +32,23 @@ namespace GHelper
|
||||
private void InitializeComponent()
|
||||
{
|
||||
groupBindings = new GroupBox();
|
||||
pictureHelp = new PictureBox();
|
||||
textFNF4 = new TextBox();
|
||||
comboFNF4 = new RComboBox();
|
||||
tableKeys = new TableLayoutPanel();
|
||||
textM2 = new TextBox();
|
||||
textM1 = new TextBox();
|
||||
comboM1 = new RComboBox();
|
||||
labelM1 = new Label();
|
||||
labelFNF4 = new Label();
|
||||
comboFNF4 = new RComboBox();
|
||||
comboM4 = new RComboBox();
|
||||
comboM3 = new RComboBox();
|
||||
textFNF4 = new TextBox();
|
||||
textM4 = new TextBox();
|
||||
textM3 = new TextBox();
|
||||
comboM4 = new RComboBox();
|
||||
labelM4 = new Label();
|
||||
comboM3 = new RComboBox();
|
||||
labelM3 = new Label();
|
||||
labelM2 = new Label();
|
||||
comboM2 = new RComboBox();
|
||||
pictureHelp = new PictureBox();
|
||||
groupLight = new GroupBox();
|
||||
panelBacklightExtra = new Panel();
|
||||
numericBacklightTime = new NumericUpDown();
|
||||
@@ -80,6 +87,7 @@ namespace GHelper
|
||||
checkNoOverdrive = new CheckBox();
|
||||
checkTopmost = new CheckBox();
|
||||
groupBindings.SuspendLayout();
|
||||
tableKeys.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureHelp).BeginInit();
|
||||
groupLight.SuspendLayout();
|
||||
panelBacklightExtra.SuspendLayout();
|
||||
@@ -92,118 +100,199 @@ namespace GHelper
|
||||
//
|
||||
// groupBindings
|
||||
//
|
||||
groupBindings.Controls.Add(tableKeys);
|
||||
groupBindings.Controls.Add(pictureHelp);
|
||||
groupBindings.Controls.Add(textFNF4);
|
||||
groupBindings.Controls.Add(comboFNF4);
|
||||
groupBindings.Controls.Add(labelFNF4);
|
||||
groupBindings.Controls.Add(textM4);
|
||||
groupBindings.Controls.Add(textM3);
|
||||
groupBindings.Controls.Add(comboM4);
|
||||
groupBindings.Controls.Add(labelM4);
|
||||
groupBindings.Controls.Add(comboM3);
|
||||
groupBindings.Controls.Add(labelM3);
|
||||
groupBindings.Dock = DockStyle.Top;
|
||||
groupBindings.Location = new Point(10, 10);
|
||||
groupBindings.Name = "groupBindings";
|
||||
groupBindings.Size = new Size(954, 242);
|
||||
groupBindings.Size = new Size(954, 324);
|
||||
groupBindings.TabIndex = 0;
|
||||
groupBindings.TabStop = false;
|
||||
groupBindings.Text = "Key Bindings";
|
||||
//
|
||||
// pictureHelp
|
||||
// tableKeys
|
||||
//
|
||||
pictureHelp.BackgroundImage = Resources.icons8_help_64;
|
||||
pictureHelp.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
pictureHelp.Cursor = Cursors.Hand;
|
||||
pictureHelp.Location = new Point(884, 58);
|
||||
pictureHelp.Name = "pictureHelp";
|
||||
pictureHelp.Size = new Size(32, 32);
|
||||
pictureHelp.TabIndex = 9;
|
||||
pictureHelp.TabStop = false;
|
||||
tableKeys.ColumnCount = 3;
|
||||
tableKeys.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 20F));
|
||||
tableKeys.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F));
|
||||
tableKeys.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 40F));
|
||||
tableKeys.Controls.Add(textM2, 2, 1);
|
||||
tableKeys.Controls.Add(textM1, 2, 0);
|
||||
tableKeys.Controls.Add(comboM1, 1, 0);
|
||||
tableKeys.Controls.Add(labelM1, 0, 0);
|
||||
tableKeys.Controls.Add(labelFNF4, 0, 4);
|
||||
tableKeys.Controls.Add(comboFNF4, 1, 4);
|
||||
tableKeys.Controls.Add(comboM4, 1, 3);
|
||||
tableKeys.Controls.Add(comboM3, 1, 2);
|
||||
tableKeys.Controls.Add(textFNF4, 2, 4);
|
||||
tableKeys.Controls.Add(textM4, 2, 3);
|
||||
tableKeys.Controls.Add(textM3, 2, 2);
|
||||
tableKeys.Controls.Add(labelM4, 0, 3);
|
||||
tableKeys.Controls.Add(labelM3, 0, 2);
|
||||
tableKeys.Controls.Add(labelM2, 0, 1);
|
||||
tableKeys.Controls.Add(comboM2, 1, 1);
|
||||
tableKeys.Location = new Point(13, 38);
|
||||
tableKeys.Name = "tableKeys";
|
||||
tableKeys.Padding = new Padding(10);
|
||||
tableKeys.RowCount = 5;
|
||||
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
|
||||
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
|
||||
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
|
||||
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
|
||||
tableKeys.RowStyles.Add(new RowStyle(SizeType.Absolute, 50F));
|
||||
tableKeys.Size = new Size(897, 266);
|
||||
tableKeys.TabIndex = 10;
|
||||
//
|
||||
// textFNF4
|
||||
// textM2
|
||||
//
|
||||
textFNF4.Location = new Point(415, 176);
|
||||
textFNF4.Name = "textFNF4";
|
||||
textFNF4.PlaceholderText = "action";
|
||||
textFNF4.Size = new Size(448, 39);
|
||||
textFNF4.TabIndex = 8;
|
||||
textM2.Location = new Point(538, 63);
|
||||
textM2.Name = "textM2";
|
||||
textM2.PlaceholderText = "action";
|
||||
textM2.Size = new Size(346, 39);
|
||||
textM2.TabIndex = 14;
|
||||
//
|
||||
// textM1
|
||||
//
|
||||
textM1.Location = new Point(538, 13);
|
||||
textM1.Name = "textM1";
|
||||
textM1.PlaceholderText = "action";
|
||||
textM1.Size = new Size(346, 39);
|
||||
textM1.TabIndex = 13;
|
||||
//
|
||||
// comboM1
|
||||
//
|
||||
comboM1.BorderColor = Color.White;
|
||||
comboM1.ButtonColor = Color.FromArgb(255, 255, 255);
|
||||
comboM1.FormattingEnabled = true;
|
||||
comboM1.Items.AddRange(new object[] { Strings.Default, Strings.VolumeMute, Strings.PlayPause, Strings.PrintScreen, Strings.ToggleAura, Strings.Custom });
|
||||
comboM1.Location = new Point(188, 13);
|
||||
comboM1.Name = "comboM1";
|
||||
comboM1.Size = new Size(312, 40);
|
||||
comboM1.TabIndex = 11;
|
||||
//
|
||||
// labelM1
|
||||
//
|
||||
labelM1.AutoSize = true;
|
||||
labelM1.Location = new Point(13, 10);
|
||||
labelM1.Name = "labelM1";
|
||||
labelM1.Size = new Size(54, 32);
|
||||
labelM1.TabIndex = 9;
|
||||
labelM1.Text = "M1:";
|
||||
//
|
||||
// labelFNF4
|
||||
//
|
||||
labelFNF4.AutoSize = true;
|
||||
labelFNF4.Location = new Point(13, 210);
|
||||
labelFNF4.Name = "labelFNF4";
|
||||
labelFNF4.Size = new Size(90, 32);
|
||||
labelFNF4.TabIndex = 6;
|
||||
labelFNF4.Text = "FN+F4:";
|
||||
//
|
||||
// comboFNF4
|
||||
//
|
||||
comboFNF4.BorderColor = Color.White;
|
||||
comboFNF4.ButtonColor = Color.FromArgb(255, 255, 255);
|
||||
comboFNF4.FormattingEnabled = true;
|
||||
comboFNF4.Location = new Point(93, 175);
|
||||
comboFNF4.Location = new Point(188, 213);
|
||||
comboFNF4.Name = "comboFNF4";
|
||||
comboFNF4.Size = new Size(312, 40);
|
||||
comboFNF4.TabIndex = 7;
|
||||
//
|
||||
// labelFNF4
|
||||
//
|
||||
labelFNF4.AutoSize = true;
|
||||
labelFNF4.Location = new Point(2, 178);
|
||||
labelFNF4.Name = "labelFNF4";
|
||||
labelFNF4.Size = new Size(90, 32);
|
||||
labelFNF4.TabIndex = 6;
|
||||
labelFNF4.Text = "FN+F4:";
|
||||
//
|
||||
// textM4
|
||||
//
|
||||
textM4.Location = new Point(415, 113);
|
||||
textM4.Name = "textM4";
|
||||
textM4.PlaceholderText = "action";
|
||||
textM4.Size = new Size(448, 39);
|
||||
textM4.TabIndex = 5;
|
||||
//
|
||||
// textM3
|
||||
//
|
||||
textM3.Location = new Point(415, 54);
|
||||
textM3.Name = "textM3";
|
||||
textM3.PlaceholderText = "notepad /p \"file.txt\"";
|
||||
textM3.Size = new Size(448, 39);
|
||||
textM3.TabIndex = 4;
|
||||
//
|
||||
// comboM4
|
||||
//
|
||||
comboM4.BorderColor = Color.White;
|
||||
comboM4.ButtonColor = Color.FromArgb(255, 255, 255);
|
||||
comboM4.FormattingEnabled = true;
|
||||
comboM4.Items.AddRange(new object[] { Strings.PerformanceMode, Strings.OpenGHelper, Strings.Custom });
|
||||
comboM4.Location = new Point(93, 112);
|
||||
comboM4.Location = new Point(188, 163);
|
||||
comboM4.Name = "comboM4";
|
||||
comboM4.Size = new Size(312, 40);
|
||||
comboM4.TabIndex = 3;
|
||||
//
|
||||
// labelM4
|
||||
//
|
||||
labelM4.AutoSize = true;
|
||||
labelM4.Location = new Point(25, 116);
|
||||
labelM4.Name = "labelM4";
|
||||
labelM4.Size = new Size(54, 32);
|
||||
labelM4.TabIndex = 2;
|
||||
labelM4.Text = "M4:";
|
||||
//
|
||||
// comboM3
|
||||
//
|
||||
comboM3.BorderColor = Color.White;
|
||||
comboM3.ButtonColor = Color.FromArgb(255, 255, 255);
|
||||
comboM3.FormattingEnabled = true;
|
||||
comboM3.Items.AddRange(new object[] { Strings.Default, Strings.VolumeMute, Strings.PlayPause, Strings.PrintScreen, Strings.ToggleAura, Strings.Custom });
|
||||
comboM3.Location = new Point(93, 54);
|
||||
comboM3.Location = new Point(188, 113);
|
||||
comboM3.Name = "comboM3";
|
||||
comboM3.Size = new Size(312, 40);
|
||||
comboM3.TabIndex = 1;
|
||||
//
|
||||
// textFNF4
|
||||
//
|
||||
textFNF4.Location = new Point(538, 213);
|
||||
textFNF4.Name = "textFNF4";
|
||||
textFNF4.PlaceholderText = "action";
|
||||
textFNF4.Size = new Size(346, 39);
|
||||
textFNF4.TabIndex = 8;
|
||||
//
|
||||
// textM4
|
||||
//
|
||||
textM4.Location = new Point(538, 163);
|
||||
textM4.Name = "textM4";
|
||||
textM4.PlaceholderText = "action";
|
||||
textM4.Size = new Size(346, 39);
|
||||
textM4.TabIndex = 5;
|
||||
//
|
||||
// textM3
|
||||
//
|
||||
textM3.Location = new Point(538, 113);
|
||||
textM3.Name = "textM3";
|
||||
textM3.PlaceholderText = "action";
|
||||
textM3.Size = new Size(346, 39);
|
||||
textM3.TabIndex = 4;
|
||||
//
|
||||
// labelM4
|
||||
//
|
||||
labelM4.AutoSize = true;
|
||||
labelM4.Location = new Point(13, 160);
|
||||
labelM4.Name = "labelM4";
|
||||
labelM4.Size = new Size(54, 32);
|
||||
labelM4.TabIndex = 2;
|
||||
labelM4.Text = "M4:";
|
||||
//
|
||||
// labelM3
|
||||
//
|
||||
labelM3.AutoSize = true;
|
||||
labelM3.Location = new Point(25, 58);
|
||||
labelM3.Location = new Point(13, 110);
|
||||
labelM3.Name = "labelM3";
|
||||
labelM3.Size = new Size(54, 32);
|
||||
labelM3.TabIndex = 0;
|
||||
labelM3.Text = "M3:";
|
||||
//
|
||||
// labelM2
|
||||
//
|
||||
labelM2.AutoSize = true;
|
||||
labelM2.Location = new Point(13, 60);
|
||||
labelM2.Name = "labelM2";
|
||||
labelM2.Size = new Size(54, 32);
|
||||
labelM2.TabIndex = 10;
|
||||
labelM2.Text = "M2:";
|
||||
//
|
||||
// comboM2
|
||||
//
|
||||
comboM2.BorderColor = Color.White;
|
||||
comboM2.ButtonColor = Color.FromArgb(255, 255, 255);
|
||||
comboM2.FormattingEnabled = true;
|
||||
comboM2.Items.AddRange(new object[] { Strings.Default, Strings.VolumeMute, Strings.PlayPause, Strings.PrintScreen, Strings.ToggleAura, Strings.Custom });
|
||||
comboM2.Location = new Point(188, 63);
|
||||
comboM2.Name = "comboM2";
|
||||
comboM2.Size = new Size(312, 40);
|
||||
comboM2.TabIndex = 12;
|
||||
//
|
||||
// pictureHelp
|
||||
//
|
||||
pictureHelp.BackgroundImage = Resources.icons8_help_64;
|
||||
pictureHelp.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
pictureHelp.Cursor = Cursors.Hand;
|
||||
pictureHelp.Location = new Point(906, 51);
|
||||
pictureHelp.Name = "pictureHelp";
|
||||
pictureHelp.Size = new Size(32, 32);
|
||||
pictureHelp.TabIndex = 9;
|
||||
pictureHelp.TabStop = false;
|
||||
//
|
||||
// groupLight
|
||||
//
|
||||
groupLight.AutoSize = true;
|
||||
@@ -211,7 +300,7 @@ namespace GHelper
|
||||
groupLight.Controls.Add(panelXMG);
|
||||
groupLight.Controls.Add(tableBacklight);
|
||||
groupLight.Dock = DockStyle.Top;
|
||||
groupLight.Location = new Point(10, 252);
|
||||
groupLight.Location = new Point(10, 334);
|
||||
groupLight.Name = "groupLight";
|
||||
groupLight.Size = new Size(954, 516);
|
||||
groupLight.TabIndex = 1;
|
||||
@@ -579,7 +668,7 @@ namespace GHelper
|
||||
groupOther.Controls.Add(checkNoOverdrive);
|
||||
groupOther.Controls.Add(checkTopmost);
|
||||
groupOther.Dock = DockStyle.Top;
|
||||
groupOther.Location = new Point(10, 768);
|
||||
groupOther.Location = new Point(10, 850);
|
||||
groupOther.Name = "groupOther";
|
||||
groupOther.Size = new Size(954, 276);
|
||||
groupOther.TabIndex = 2;
|
||||
@@ -643,7 +732,7 @@ namespace GHelper
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
AutoSize = true;
|
||||
AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
ClientSize = new Size(974, 1059);
|
||||
ClientSize = new Size(974, 1131);
|
||||
Controls.Add(groupOther);
|
||||
Controls.Add(groupLight);
|
||||
Controls.Add(groupBindings);
|
||||
@@ -658,7 +747,8 @@ namespace GHelper
|
||||
ShowInTaskbar = false;
|
||||
Text = "Extra Settings";
|
||||
groupBindings.ResumeLayout(false);
|
||||
groupBindings.PerformLayout();
|
||||
tableKeys.ResumeLayout(false);
|
||||
tableKeys.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureHelp).EndInit();
|
||||
groupLight.ResumeLayout(false);
|
||||
groupLight.PerformLayout();
|
||||
@@ -725,5 +815,12 @@ namespace GHelper
|
||||
private NumericUpDown numericBacklightTime;
|
||||
private CheckBox checkKeyboardAuto;
|
||||
private CheckBox checkAutoApplyWindowsPowerMode;
|
||||
private TableLayoutPanel tableKeys;
|
||||
private Label labelM1;
|
||||
private Label labelM2;
|
||||
private RComboBox comboM1;
|
||||
private RComboBox comboM2;
|
||||
private TextBox textM2;
|
||||
private TextBox textM1;
|
||||
}
|
||||
}
|
||||
152
app/Extra.cs
152
app/Extra.cs
@@ -22,16 +22,24 @@ namespace GHelper
|
||||
private void SetKeyCombo(ComboBox combo, TextBox txbox, string name)
|
||||
{
|
||||
|
||||
if (name == "m3")
|
||||
customActions[""] = Properties.Strings.MuteMic;
|
||||
|
||||
if (name == "m4")
|
||||
customActions[""] = Properties.Strings.OpenGHelper;
|
||||
|
||||
if (name == "fnf4")
|
||||
switch (name)
|
||||
{
|
||||
customActions[""] = Properties.Strings.ToggleAura;
|
||||
customActions.Remove("aura");
|
||||
case "m1":
|
||||
customActions[""] = Properties.Strings.VolumeDown;
|
||||
break;
|
||||
case "m2":
|
||||
customActions[""] = Properties.Strings.VolumeUp;
|
||||
break;
|
||||
case "m3":
|
||||
customActions[""] = Properties.Strings.MuteMic;
|
||||
break;
|
||||
case "m4":
|
||||
customActions[""] = Properties.Strings.OpenGHelper;
|
||||
break;
|
||||
case "fnf4":
|
||||
customActions[""] = Properties.Strings.ToggleAura;
|
||||
customActions.Remove("aura");
|
||||
break;
|
||||
}
|
||||
|
||||
combo.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
@@ -39,7 +47,7 @@ namespace GHelper
|
||||
combo.DisplayMember = "Value";
|
||||
combo.ValueMember = "Key";
|
||||
|
||||
string action = Program.config.getConfigString(name);
|
||||
string action = AppConfig.getConfigString(name);
|
||||
|
||||
combo.SelectedValue = (action is not null) ? action : "";
|
||||
if (combo.SelectedValue is null) combo.SelectedValue = "";
|
||||
@@ -47,13 +55,17 @@ namespace GHelper
|
||||
combo.SelectedValueChanged += delegate
|
||||
{
|
||||
if (combo.SelectedValue is not null)
|
||||
Program.config.setConfig(name, combo.SelectedValue.ToString());
|
||||
AppConfig.setConfig(name, combo.SelectedValue.ToString());
|
||||
|
||||
if (name == "m1" || name == "m2")
|
||||
Program.inputDispatcher.RegisterKeys();
|
||||
|
||||
};
|
||||
|
||||
txbox.Text = Program.config.getConfigString(name + "_custom");
|
||||
txbox.Text = AppConfig.getConfigString(name + "_custom");
|
||||
txbox.TextChanged += delegate
|
||||
{
|
||||
Program.config.setConfig(name + "_custom", txbox.Text);
|
||||
AppConfig.setConfig(name + "_custom", txbox.Text);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -89,6 +101,8 @@ namespace GHelper
|
||||
|
||||
InitTheme();
|
||||
|
||||
SetKeyCombo(comboM1, textM1, "m1");
|
||||
SetKeyCombo(comboM2, textM2, "m2");
|
||||
SetKeyCombo(comboM3, textM3, "m3");
|
||||
SetKeyCombo(comboM4, textM4, "m4");
|
||||
SetKeyCombo(comboFNF4, textFNF4, "fnf4");
|
||||
@@ -103,28 +117,28 @@ namespace GHelper
|
||||
comboKeyboardSpeed.SelectedValueChanged += ComboKeyboardSpeed_SelectedValueChanged;
|
||||
|
||||
// Keyboard
|
||||
checkAwake.Checked = !(Program.config.getConfig("keyboard_awake") == 0);
|
||||
checkBoot.Checked = !(Program.config.getConfig("keyboard_boot") == 0);
|
||||
checkSleep.Checked = !(Program.config.getConfig("keyboard_sleep") == 0);
|
||||
checkShutdown.Checked = !(Program.config.getConfig("keyboard_shutdown") == 0);
|
||||
checkAwake.Checked = !(AppConfig.getConfig("keyboard_awake") == 0);
|
||||
checkBoot.Checked = !(AppConfig.getConfig("keyboard_boot") == 0);
|
||||
checkSleep.Checked = !(AppConfig.getConfig("keyboard_sleep") == 0);
|
||||
checkShutdown.Checked = !(AppConfig.getConfig("keyboard_shutdown") == 0);
|
||||
|
||||
// Lightbar
|
||||
checkAwakeBar.Checked = !(Program.config.getConfig("keyboard_awake_bar") == 0);
|
||||
checkBootBar.Checked = !(Program.config.getConfig("keyboard_boot_bar") == 0);
|
||||
checkSleepBar.Checked = !(Program.config.getConfig("keyboard_sleep_bar") == 0);
|
||||
checkShutdownBar.Checked = !(Program.config.getConfig("keyboard_shutdown_bar") == 0);
|
||||
checkAwakeBar.Checked = !(AppConfig.getConfig("keyboard_awake_bar") == 0);
|
||||
checkBootBar.Checked = !(AppConfig.getConfig("keyboard_boot_bar") == 0);
|
||||
checkSleepBar.Checked = !(AppConfig.getConfig("keyboard_sleep_bar") == 0);
|
||||
checkShutdownBar.Checked = !(AppConfig.getConfig("keyboard_shutdown_bar") == 0);
|
||||
|
||||
// Lid
|
||||
checkAwakeLid.Checked = !(Program.config.getConfig("keyboard_awake_lid") == 0);
|
||||
checkBootLid.Checked = !(Program.config.getConfig("keyboard_boot_lid") == 0);
|
||||
checkSleepLid.Checked = !(Program.config.getConfig("keyboard_sleep_lid") == 0);
|
||||
checkShutdownLid.Checked = !(Program.config.getConfig("keyboard_shutdown_lid") == 0);
|
||||
checkAwakeLid.Checked = !(AppConfig.getConfig("keyboard_awake_lid") == 0);
|
||||
checkBootLid.Checked = !(AppConfig.getConfig("keyboard_boot_lid") == 0);
|
||||
checkSleepLid.Checked = !(AppConfig.getConfig("keyboard_sleep_lid") == 0);
|
||||
checkShutdownLid.Checked = !(AppConfig.getConfig("keyboard_shutdown_lid") == 0);
|
||||
|
||||
// Logo
|
||||
checkAwakeLogo.Checked = !(Program.config.getConfig("keyboard_awake_logo") == 0);
|
||||
checkBootLogo.Checked = !(Program.config.getConfig("keyboard_boot_logo") == 0);
|
||||
checkSleepLogo.Checked = !(Program.config.getConfig("keyboard_sleep_logo") == 0);
|
||||
checkShutdownLogo.Checked = !(Program.config.getConfig("keyboard_shutdown_logo") == 0);
|
||||
checkAwakeLogo.Checked = !(AppConfig.getConfig("keyboard_awake_logo") == 0);
|
||||
checkBootLogo.Checked = !(AppConfig.getConfig("keyboard_boot_logo") == 0);
|
||||
checkSleepLogo.Checked = !(AppConfig.getConfig("keyboard_sleep_logo") == 0);
|
||||
checkShutdownLogo.Checked = !(AppConfig.getConfig("keyboard_shutdown_logo") == 0);
|
||||
|
||||
checkAwake.CheckedChanged += CheckPower_CheckedChanged;
|
||||
checkBoot.CheckedChanged += CheckPower_CheckedChanged;
|
||||
@@ -146,7 +160,7 @@ namespace GHelper
|
||||
checkSleepLogo.CheckedChanged += CheckPower_CheckedChanged;
|
||||
checkShutdownLogo.CheckedChanged += CheckPower_CheckedChanged;
|
||||
|
||||
if (!Program.config.ContainsModel("Strix"))
|
||||
if (!AppConfig.ContainsModel("Strix"))
|
||||
{
|
||||
labelBacklightBar.Visible = false;
|
||||
checkAwakeBar.Visible = false;
|
||||
@@ -154,7 +168,7 @@ namespace GHelper
|
||||
checkSleepBar.Visible = false;
|
||||
checkShutdownBar.Visible = false;
|
||||
|
||||
if (!Program.config.ContainsModel("Z13"))
|
||||
if (!AppConfig.ContainsModel("Z13"))
|
||||
{
|
||||
labelBacklightLid.Visible = false;
|
||||
checkAwakeLid.Visible = false;
|
||||
@@ -170,32 +184,32 @@ namespace GHelper
|
||||
}
|
||||
}
|
||||
|
||||
checkTopmost.Checked = (Program.config.getConfig("topmost") == 1);
|
||||
checkTopmost.Checked = (AppConfig.getConfig("topmost") == 1);
|
||||
checkTopmost.CheckedChanged += CheckTopmost_CheckedChanged; ;
|
||||
|
||||
checkKeyboardAuto.Checked = (Program.config.getConfig("keyboard_auto") == 1);
|
||||
checkKeyboardAuto.Checked = (AppConfig.getConfig("keyboard_auto") == 1);
|
||||
checkKeyboardAuto.CheckedChanged += CheckKeyboardAuto_CheckedChanged;
|
||||
|
||||
checkNoOverdrive.Checked = (Program.config.getConfig("no_overdrive") == 1);
|
||||
checkNoOverdrive.Checked = (AppConfig.getConfig("no_overdrive") == 1);
|
||||
checkNoOverdrive.CheckedChanged += CheckNoOverdrive_CheckedChanged;
|
||||
|
||||
checkUSBC.Checked = (Program.config.getConfig("optimized_usbc") == 1);
|
||||
checkUSBC.Checked = (AppConfig.getConfig("optimized_usbc") == 1);
|
||||
checkUSBC.CheckedChanged += CheckUSBC_CheckedChanged;
|
||||
|
||||
checkAutoApplyWindowsPowerMode.Checked = (Program.config.getConfig("auto_apply_power_plan") != 0);
|
||||
checkAutoApplyWindowsPowerMode.Checked = (AppConfig.getConfig("auto_apply_power_plan") != 0);
|
||||
checkAutoApplyWindowsPowerMode.CheckedChanged += checkAutoApplyWindowsPowerMode_CheckedChanged;
|
||||
|
||||
int kb_brightness = Program.config.getConfig("keyboard_brightness");
|
||||
int kb_brightness = AppConfig.getConfig("keyboard_brightness");
|
||||
trackBrightness.Value = (kb_brightness >= 0 && kb_brightness <= 3) ? kb_brightness : 3;
|
||||
|
||||
pictureHelp.Click += PictureHelp_Click;
|
||||
trackBrightness.Scroll += TrackBrightness_Scroll;
|
||||
|
||||
panelXMG.Visible = (Program.acpi.DeviceGet(AsusACPI.GPUXGConnected) == 1);
|
||||
checkXMG.Checked = !(Program.config.getConfig("xmg_light") == 0);
|
||||
checkXMG.Checked = !(AppConfig.getConfig("xmg_light") == 0);
|
||||
checkXMG.CheckedChanged += CheckXMG_CheckedChanged;
|
||||
|
||||
int kb_timeout = Program.config.getConfig("keyboard_light_tiomeout");
|
||||
int kb_timeout = AppConfig.getConfig("keyboard_light_tiomeout");
|
||||
numericBacklightTime.Value = (kb_timeout >= 0) ? kb_timeout : 60;
|
||||
|
||||
numericBacklightTime.ValueChanged += NumericBacklightTime_ValueChanged;
|
||||
@@ -205,24 +219,24 @@ namespace GHelper
|
||||
private void NumericBacklightTime_ValueChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.RunAsAdmin("extra");
|
||||
Program.config.setConfig("keyboard_light_tiomeout", (int)numericBacklightTime.Value);
|
||||
AppConfig.setConfig("keyboard_light_tiomeout", (int)numericBacklightTime.Value);
|
||||
AsusUSB.SetBacklightOffDelay((int)numericBacklightTime.Value);
|
||||
}
|
||||
|
||||
private void CheckXMG_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("xmg_light", (checkXMG.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("xmg_light", (checkXMG.Checked ? 1 : 0));
|
||||
AsusUSB.ApplyXGMLight(checkXMG.Checked);
|
||||
}
|
||||
|
||||
private void CheckUSBC_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("optimized_usbc", (checkUSBC.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("optimized_usbc", (checkUSBC.Checked ? 1 : 0));
|
||||
}
|
||||
|
||||
private void TrackBrightness_Scroll(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("keyboard_brightness", trackBrightness.Value);
|
||||
AppConfig.setConfig("keyboard_brightness", trackBrightness.Value);
|
||||
AsusUSB.ApplyBrightness(trackBrightness.Value);
|
||||
}
|
||||
|
||||
@@ -233,42 +247,42 @@ namespace GHelper
|
||||
|
||||
private void CheckNoOverdrive_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("no_overdrive", (checkNoOverdrive.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("no_overdrive", (checkNoOverdrive.Checked ? 1 : 0));
|
||||
Program.settingsForm.AutoScreen(true);
|
||||
}
|
||||
|
||||
private void CheckKeyboardAuto_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("keyboard_auto", (checkKeyboardAuto.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_auto", (checkKeyboardAuto.Checked ? 1 : 0));
|
||||
}
|
||||
|
||||
private void CheckTopmost_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("topmost", (checkTopmost.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("topmost", (checkTopmost.Checked ? 1 : 0));
|
||||
Program.settingsForm.TopMost = checkTopmost.Checked;
|
||||
}
|
||||
|
||||
private void CheckPower_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("keyboard_awake", (checkAwake.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_boot", (checkBoot.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_sleep", (checkSleep.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_shutdown", (checkShutdown.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_awake", (checkAwake.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_boot", (checkBoot.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_sleep", (checkSleep.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_shutdown", (checkShutdown.Checked ? 1 : 0));
|
||||
|
||||
Program.config.setConfig("keyboard_awake_bar", (checkAwakeBar.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_boot_bar", (checkBootBar.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_sleep_bar", (checkSleepBar.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_shutdown_bar", (checkShutdownBar.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_awake_bar", (checkAwakeBar.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_boot_bar", (checkBootBar.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_sleep_bar", (checkSleepBar.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_shutdown_bar", (checkShutdownBar.Checked ? 1 : 0));
|
||||
|
||||
Program.config.setConfig("keyboard_awake_lid", (checkAwakeLid.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_boot_lid", (checkBootLid.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_sleep_lid", (checkSleepLid.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_shutdown_lid", (checkShutdownLid.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_awake_lid", (checkAwakeLid.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_boot_lid", (checkBootLid.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_sleep_lid", (checkSleepLid.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_shutdown_lid", (checkShutdownLid.Checked ? 1 : 0));
|
||||
|
||||
Program.config.setConfig("keyboard_awake_logo", (checkAwakeLogo.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_boot_logo", (checkBootLogo.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_sleep_logo", (checkSleepLogo.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_shutdown_logo", (checkShutdownLogo.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_awake_logo", (checkAwakeLogo.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_boot_logo", (checkBootLogo.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_sleep_logo", (checkSleepLogo.Checked ? 1 : 0));
|
||||
AppConfig.setConfig("keyboard_shutdown_logo", (checkShutdownLogo.Checked ? 1 : 0));
|
||||
|
||||
List<AuraDev19b6> flags = new List<AuraDev19b6>();
|
||||
|
||||
@@ -298,20 +312,28 @@ namespace GHelper
|
||||
|
||||
private void ComboKeyboardSpeed_SelectedValueChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("aura_speed", (int)comboKeyboardSpeed.SelectedValue);
|
||||
AppConfig.setConfig("aura_speed", (int)comboKeyboardSpeed.SelectedValue);
|
||||
Program.settingsForm.SetAura();
|
||||
}
|
||||
|
||||
|
||||
private void Keyboard_Shown(object? sender, EventArgs e)
|
||||
{
|
||||
Top = Program.settingsForm.Top;
|
||||
if (Height > Program.settingsForm.Height)
|
||||
{
|
||||
Top = Program.settingsForm.Top + Program.settingsForm.Height - Height;
|
||||
}
|
||||
else
|
||||
{
|
||||
Top = Program.settingsForm.Top;
|
||||
}
|
||||
|
||||
Left = Program.settingsForm.Left - Width - 5;
|
||||
}
|
||||
|
||||
private void checkAutoApplyWindowsPowerMode_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("auto_apply_power_plan", checkAutoApplyWindowsPowerMode.Checked ? 1 : 0);
|
||||
AppConfig.setConfig("auto_apply_power_plan", checkAutoApplyWindowsPowerMode.Checked ? 1 : 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
110
app/Fans.Designer.cs
generated
110
app/Fans.Designer.cs
generated
@@ -31,21 +31,21 @@ namespace GHelper
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
ChartArea chartArea1 = new ChartArea();
|
||||
Title title1 = new Title();
|
||||
ChartArea chartArea2 = new ChartArea();
|
||||
Title title2 = new Title();
|
||||
ChartArea chartArea3 = new ChartArea();
|
||||
Title title3 = new Title();
|
||||
ChartArea chartArea4 = new ChartArea();
|
||||
Title title4 = new Title();
|
||||
ChartArea chartArea9 = new ChartArea();
|
||||
Title title9 = new Title();
|
||||
ChartArea chartArea10 = new ChartArea();
|
||||
Title title10 = new Title();
|
||||
ChartArea chartArea11 = new ChartArea();
|
||||
Title title11 = new Title();
|
||||
ChartArea chartArea12 = new ChartArea();
|
||||
Title title12 = new Title();
|
||||
panelFans = new Panel();
|
||||
labelTip = new Label();
|
||||
tableFanCharts = new TableLayoutPanel();
|
||||
chartGPU = new Chart();
|
||||
chartCPU = new Chart();
|
||||
chartMid = new Chart();
|
||||
chartXGM = new Chart();
|
||||
chartMid = new Chart();
|
||||
panelTitleFans = new Panel();
|
||||
labelBoost = new Label();
|
||||
comboBoost = new RComboBox();
|
||||
@@ -95,8 +95,8 @@ namespace GHelper
|
||||
tableFanCharts.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartCPU).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartMid).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartXGM).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartMid).BeginInit();
|
||||
panelTitleFans.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)picturePerf).BeginInit();
|
||||
panelApplyFans.SuspendLayout();
|
||||
@@ -154,15 +154,12 @@ namespace GHelper
|
||||
// tableFanCharts
|
||||
//
|
||||
tableFanCharts.AutoSize = true;
|
||||
tableFanCharts.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
tableFanCharts.ColumnCount = 1;
|
||||
tableFanCharts.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
|
||||
tableFanCharts.Controls.Add(chartGPU, 0, 1);
|
||||
tableFanCharts.Controls.Add(chartCPU, 0, 0);
|
||||
|
||||
tableFanCharts.Controls.Add(chartXGM, 0, 2);
|
||||
tableFanCharts.Controls.Add(chartMid, 0, 2);
|
||||
|
||||
tableFanCharts.Dock = DockStyle.Fill;
|
||||
tableFanCharts.Location = new Point(0, 66);
|
||||
tableFanCharts.Margin = new Padding(4);
|
||||
@@ -178,61 +175,62 @@ namespace GHelper
|
||||
//
|
||||
// chartGPU
|
||||
//
|
||||
chartArea1.Name = "ChartArea1";
|
||||
chartGPU.ChartAreas.Add(chartArea1);
|
||||
chartArea9.Name = "ChartArea1";
|
||||
chartGPU.ChartAreas.Add(chartArea9);
|
||||
chartGPU.Dock = DockStyle.Fill;
|
||||
chartGPU.Location = new Point(12, 342);
|
||||
chartGPU.Location = new Point(12, 259);
|
||||
chartGPU.Margin = new Padding(2, 10, 2, 10);
|
||||
chartGPU.Name = "chartGPU";
|
||||
chartGPU.Size = new Size(781, 312);
|
||||
chartGPU.Size = new Size(781, 229);
|
||||
chartGPU.TabIndex = 17;
|
||||
chartGPU.Text = "chartGPU";
|
||||
title1.Name = "Title1";
|
||||
chartGPU.Titles.Add(title1);
|
||||
title9.Name = "Title1";
|
||||
chartGPU.Titles.Add(title9);
|
||||
//
|
||||
// chartCPU
|
||||
//
|
||||
chartArea2.Name = "ChartArea1";
|
||||
chartCPU.ChartAreas.Add(chartArea2);
|
||||
chartArea10.Name = "ChartArea1";
|
||||
chartCPU.ChartAreas.Add(chartArea10);
|
||||
chartCPU.Dock = DockStyle.Fill;
|
||||
chartCPU.Location = new Point(12, 10);
|
||||
chartCPU.Margin = new Padding(2, 10, 2, 10);
|
||||
chartCPU.Name = "chartCPU";
|
||||
chartCPU.Size = new Size(781, 312);
|
||||
chartCPU.Size = new Size(781, 229);
|
||||
chartCPU.TabIndex = 14;
|
||||
chartCPU.Text = "chartCPU";
|
||||
title2.Name = "Title1";
|
||||
chartCPU.Titles.Add(title2);
|
||||
//
|
||||
// chartMid
|
||||
//
|
||||
chartArea3.Name = "ChartArea3";
|
||||
chartMid.ChartAreas.Add(chartArea3);
|
||||
chartMid.Dock = DockStyle.Fill;
|
||||
chartMid.Location = new Point(12, 674);
|
||||
chartMid.Margin = new Padding(2, 10, 2, 10);
|
||||
chartMid.Name = "chartMid";
|
||||
chartMid.Size = new Size(781, 313);
|
||||
chartMid.TabIndex = 14;
|
||||
chartMid.Text = "chartMid";
|
||||
title3.Name = "Title3";
|
||||
chartMid.Titles.Add(title3);
|
||||
chartMid.Visible = false;
|
||||
title10.Name = "Title1";
|
||||
chartCPU.Titles.Add(title10);
|
||||
//
|
||||
// chartXGM
|
||||
//
|
||||
chartArea4.Name = "ChartAreaXGM";
|
||||
chartXGM.ChartAreas.Add(chartArea4);
|
||||
chartArea11.Name = "ChartAreaXGM";
|
||||
chartXGM.ChartAreas.Add(chartArea11);
|
||||
chartXGM.Dock = DockStyle.Fill;
|
||||
chartXGM.Location = new Point(12, 674);
|
||||
chartXGM.Location = new Point(12, 757);
|
||||
chartXGM.Margin = new Padding(2, 10, 2, 10);
|
||||
chartXGM.Name = "chartXGM";
|
||||
chartXGM.Size = new Size(781, 313);
|
||||
chartXGM.Size = new Size(781, 230);
|
||||
chartXGM.TabIndex = 14;
|
||||
chartXGM.Text = "chartXGM";
|
||||
title4.Name = "Title4";
|
||||
chartXGM.Titles.Add(title4);
|
||||
chartXGM.Visible = false; //
|
||||
title11.Name = "Title4";
|
||||
chartXGM.Titles.Add(title11);
|
||||
chartXGM.Visible = false;
|
||||
//
|
||||
// chartMid
|
||||
//
|
||||
chartArea12.Name = "ChartArea3";
|
||||
chartMid.ChartAreas.Add(chartArea12);
|
||||
chartMid.Dock = DockStyle.Fill;
|
||||
chartMid.Location = new Point(12, 508);
|
||||
chartMid.Margin = new Padding(2, 10, 2, 10);
|
||||
chartMid.Name = "chartMid";
|
||||
chartMid.Size = new Size(781, 229);
|
||||
chartMid.TabIndex = 14;
|
||||
chartMid.Text = "chartMid";
|
||||
title12.Name = "Title3";
|
||||
chartMid.Titles.Add(title12);
|
||||
chartMid.Visible = false;
|
||||
//
|
||||
// panelTitleFans
|
||||
//
|
||||
panelTitleFans.Controls.Add(labelBoost);
|
||||
@@ -248,9 +246,9 @@ namespace GHelper
|
||||
// labelBoost
|
||||
//
|
||||
labelBoost.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelBoost.Location = new Point(335, 20);
|
||||
labelBoost.Location = new Point(356, 20);
|
||||
labelBoost.Name = "labelBoost";
|
||||
labelBoost.Size = new Size(143, 32);
|
||||
labelBoost.Size = new Size(140, 32);
|
||||
labelBoost.TabIndex = 43;
|
||||
labelBoost.Text = "CPU Boost";
|
||||
labelBoost.TextAlign = ContentAlignment.MiddleRight;
|
||||
@@ -263,7 +261,7 @@ namespace GHelper
|
||||
comboBoost.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboBoost.FormattingEnabled = true;
|
||||
comboBoost.Items.AddRange(new object[] { "Disabled", "Enabled", "Aggressive", "Efficient Enabled", "Efficient Aggressive" });
|
||||
comboBoost.Location = new Point(503, 16);
|
||||
comboBoost.Location = new Point(506, 16);
|
||||
comboBoost.Name = "comboBoost";
|
||||
comboBoost.Size = new Size(287, 40);
|
||||
comboBoost.TabIndex = 42;
|
||||
@@ -282,11 +280,12 @@ namespace GHelper
|
||||
//
|
||||
// labelFans
|
||||
//
|
||||
labelFans.AutoSize = true;
|
||||
labelFans.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelFans.Location = new Point(64, 20);
|
||||
labelFans.Location = new Point(62, 20);
|
||||
labelFans.Margin = new Padding(4, 0, 4, 0);
|
||||
labelFans.Name = "labelFans";
|
||||
labelFans.Size = new Size(293, 32);
|
||||
labelFans.Size = new Size(138, 32);
|
||||
labelFans.TabIndex = 40;
|
||||
labelFans.Text = "Fan Curves";
|
||||
//
|
||||
@@ -317,7 +316,7 @@ namespace GHelper
|
||||
checkApplyFans.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
checkApplyFans.AutoSize = true;
|
||||
checkApplyFans.BackColor = SystemColors.ControlLight;
|
||||
checkApplyFans.Location = new Point(454, 46);
|
||||
checkApplyFans.Location = new Point(453, 45);
|
||||
checkApplyFans.Margin = new Padding(4, 2, 4, 2);
|
||||
checkApplyFans.Name = "checkApplyFans";
|
||||
checkApplyFans.Padding = new Padding(15, 5, 15, 5);
|
||||
@@ -793,20 +792,21 @@ namespace GHelper
|
||||
MaximizeBox = false;
|
||||
MdiChildrenMinimizedAnchorBottom = false;
|
||||
MinimizeBox = false;
|
||||
MinimumSize = new Size(26, 1260);
|
||||
MinimumSize = new Size(0, 1200);
|
||||
Name = "Fans";
|
||||
ShowIcon = false;
|
||||
ShowInTaskbar = false;
|
||||
StartPosition = FormStartPosition.CenterScreen;
|
||||
StartPosition = FormStartPosition.Manual;
|
||||
Text = "Fans and Power";
|
||||
panelFans.ResumeLayout(false);
|
||||
panelFans.PerformLayout();
|
||||
tableFanCharts.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)chartGPU).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartCPU).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartMid).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartXGM).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartMid).EndInit();
|
||||
panelTitleFans.ResumeLayout(false);
|
||||
panelTitleFans.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)picturePerf).EndInit();
|
||||
panelApplyFans.ResumeLayout(false);
|
||||
panelApplyFans.PerformLayout();
|
||||
|
||||
100
app/Fans.cs
100
app/Fans.cs
@@ -16,6 +16,8 @@ namespace GHelper
|
||||
|
||||
static int MinRPM, MaxRPM;
|
||||
|
||||
static bool powerVisible = true, gpuVisible = true;
|
||||
|
||||
const int fansMax = 100;
|
||||
|
||||
NvidiaGpuControl? nvControl = null;
|
||||
@@ -144,18 +146,18 @@ namespace GHelper
|
||||
}
|
||||
else
|
||||
{
|
||||
panelGPU.Visible = false;
|
||||
gpuVisible = panelGPU.Visible = false;
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
panelGPU.Visible = true;
|
||||
gpuVisible = panelGPU.Visible = true;
|
||||
|
||||
int gpu_boost = Program.config.getConfigPerf("gpu_boost");
|
||||
int gpu_temp = Program.config.getConfigPerf("gpu_temp");
|
||||
int core = Program.config.getConfigPerf("gpu_core");
|
||||
int memory = Program.config.getConfigPerf("gpu_memory");
|
||||
int gpu_boost = AppConfig.getConfigPerf("gpu_boost");
|
||||
int gpu_temp = AppConfig.getConfigPerf("gpu_temp");
|
||||
int core = AppConfig.getConfigPerf("gpu_core");
|
||||
int memory = AppConfig.getConfigPerf("gpu_memory");
|
||||
|
||||
if (gpu_boost < 0) gpu_boost = AsusACPI.MaxGPUBoost;
|
||||
if (gpu_temp < 0) gpu_temp = AsusACPI.MaxGPUTemp;
|
||||
@@ -198,7 +200,7 @@ namespace GHelper
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.ToString());
|
||||
panelGPU.Visible = false;
|
||||
gpuVisible = panelGPU.Visible = false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -217,8 +219,8 @@ namespace GHelper
|
||||
TrackBar track = (TrackBar)sender;
|
||||
track.Value = (int)Math.Round((float)track.Value / 5) * 5;
|
||||
|
||||
Program.config.setConfigPerf("gpu_core", trackGPUCore.Value);
|
||||
Program.config.setConfigPerf("gpu_memory", trackGPUMemory.Value);
|
||||
AppConfig.setConfigPerf("gpu_core", trackGPUCore.Value);
|
||||
AppConfig.setConfigPerf("gpu_memory", trackGPUMemory.Value);
|
||||
|
||||
VisualiseGPUSettings();
|
||||
|
||||
@@ -226,8 +228,8 @@ namespace GHelper
|
||||
|
||||
private void trackGPUPower_Scroll(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfigPerf("gpu_boost", trackGPUBoost.Value);
|
||||
Program.config.setConfigPerf("gpu_temp", trackGPUTemp.Value);
|
||||
AppConfig.setConfigPerf("gpu_boost", trackGPUBoost.Value);
|
||||
AppConfig.setConfigPerf("gpu_temp", trackGPUTemp.Value);
|
||||
|
||||
VisualiseGPUSettings();
|
||||
}
|
||||
@@ -291,9 +293,9 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
private void Fans_Shown(object? sender, EventArgs e)
|
||||
public void FormPosition()
|
||||
{
|
||||
panelSliders.Visible = panelGPU.Visible || panelPower.Visible;
|
||||
panelSliders.Visible = gpuVisible || powerVisible;
|
||||
|
||||
if (Height > Program.settingsForm.Height)
|
||||
{
|
||||
@@ -307,7 +309,11 @@ namespace GHelper
|
||||
}
|
||||
|
||||
Left = Program.settingsForm.Left - Width - 5;
|
||||
}
|
||||
|
||||
private void Fans_Shown(object? sender, EventArgs e)
|
||||
{
|
||||
FormPosition();
|
||||
}
|
||||
|
||||
|
||||
@@ -326,10 +332,10 @@ namespace GHelper
|
||||
|
||||
private void ComboBoost_Changed(object? sender, EventArgs e)
|
||||
{
|
||||
if (Program.config.getConfigPerf("auto_boost") != comboBoost.SelectedIndex)
|
||||
if (AppConfig.getConfigPerf("auto_boost") != comboBoost.SelectedIndex)
|
||||
{
|
||||
NativeMethods.SetCPUBoost(comboBoost.SelectedIndex);
|
||||
Program.config.setConfigPerf("auto_boost", comboBoost.SelectedIndex);
|
||||
AppConfig.setConfigPerf("auto_boost", comboBoost.SelectedIndex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -337,7 +343,7 @@ namespace GHelper
|
||||
{
|
||||
if (sender is null) return;
|
||||
CheckBox chk = (CheckBox)sender;
|
||||
Program.config.setConfigPerf("auto_apply_power", chk.Checked ? 1 : 0);
|
||||
AppConfig.setConfigPerf("auto_apply_power", chk.Checked ? 1 : 0);
|
||||
|
||||
if (chk.Checked)
|
||||
{
|
||||
@@ -345,7 +351,7 @@ namespace GHelper
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.acpi.DeviceSet(AsusACPI.PerformanceMode, Program.config.getConfig("performance_mode"), "PerfMode");
|
||||
Program.acpi.DeviceSet(AsusACPI.PerformanceMode, AppConfig.getConfig("performance_mode"), "PerfMode");
|
||||
Program.settingsForm.AutoFans();
|
||||
}
|
||||
|
||||
@@ -356,7 +362,7 @@ namespace GHelper
|
||||
if (sender is null) return;
|
||||
CheckBox chk = (CheckBox)sender;
|
||||
|
||||
Program.config.setConfigPerf("auto_apply", chk.Checked ? 1 : 0);
|
||||
AppConfig.setConfigPerf("auto_apply", chk.Checked ? 1 : 0);
|
||||
|
||||
if (chk.Checked)
|
||||
{
|
||||
@@ -364,7 +370,7 @@ namespace GHelper
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.acpi.DeviceSet(AsusACPI.PerformanceMode, Program.config.getConfig("performance_mode"), "PerfMode");
|
||||
Program.acpi.DeviceSet(AsusACPI.PerformanceMode, AppConfig.getConfig("performance_mode"), "PerfMode");
|
||||
Program.settingsForm.AutoPower();
|
||||
}
|
||||
}
|
||||
@@ -394,7 +400,7 @@ namespace GHelper
|
||||
bool cpuBmode = (Program.acpi.DeviceGet(AsusACPI.PPT_CPUB0) >= 0); // 2022 model +
|
||||
bool cpuAmode = (Program.acpi.DeviceGet(AsusACPI.PPT_TotalA0) >= 0); // 2021 model +
|
||||
|
||||
panelPower.Visible = cpuAmode;
|
||||
powerVisible = panelPower.Visible = cpuAmode;
|
||||
panelCPU.Visible = cpuBmode;
|
||||
|
||||
// Yes, that's stupid, but Total slider on 2021 model actually adjusts CPU PPT
|
||||
@@ -405,7 +411,7 @@ namespace GHelper
|
||||
|
||||
int limit_total;
|
||||
int limit_cpu;
|
||||
bool apply = Program.config.getConfigPerf("auto_apply_power") == 1;
|
||||
bool apply = AppConfig.getConfigPerf("auto_apply_power") == 1;
|
||||
|
||||
if (changed)
|
||||
{
|
||||
@@ -414,8 +420,8 @@ namespace GHelper
|
||||
}
|
||||
else
|
||||
{
|
||||
limit_total = Program.config.getConfigPerf("limit_total");
|
||||
limit_cpu = Program.config.getConfigPerf("limit_cpu");
|
||||
limit_total = AppConfig.getConfigPerf("limit_total");
|
||||
limit_cpu = AppConfig.getConfigPerf("limit_cpu");
|
||||
}
|
||||
|
||||
if (limit_total < 0) limit_total = AsusACPI.DefaultTotal;
|
||||
@@ -434,8 +440,8 @@ namespace GHelper
|
||||
labelTotal.Text = trackTotal.Value.ToString() + "W";
|
||||
labelCPU.Text = trackCPU.Value.ToString() + "W";
|
||||
|
||||
Program.config.setConfigPerf("limit_total", limit_total);
|
||||
Program.config.setConfigPerf("limit_cpu", limit_cpu);
|
||||
AppConfig.setConfigPerf("limit_total", limit_total);
|
||||
AppConfig.setConfigPerf("limit_cpu", limit_cpu);
|
||||
|
||||
|
||||
}
|
||||
@@ -455,7 +461,7 @@ namespace GHelper
|
||||
// Middle / system fan check
|
||||
if (!AsusACPI.IsEmptyCurve(Program.acpi.GetFanCurve(AsusFan.Mid)))
|
||||
{
|
||||
Program.config.setConfig("mid_fan", 1);
|
||||
AppConfig.setConfig("mid_fan", 1);
|
||||
chartCount++;
|
||||
chartMid.Visible = true;
|
||||
SetChart(chartMid, AsusFan.Mid);
|
||||
@@ -464,13 +470,13 @@ namespace GHelper
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.config.setConfig("mid_fan", 0);
|
||||
AppConfig.setConfig("mid_fan", 0);
|
||||
}
|
||||
|
||||
// XG Mobile Fan check
|
||||
if (Program.acpi.IsXGConnected())
|
||||
{
|
||||
Program.config.setConfig("xgm_fan", 1);
|
||||
AppConfig.setConfig("xgm_fan", 1);
|
||||
chartCount++;
|
||||
chartXGM.Visible = true;
|
||||
SetChart(chartXGM, AsusFan.XGM);
|
||||
@@ -479,7 +485,7 @@ namespace GHelper
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.config.setConfig("xgm_fan", 0);
|
||||
AppConfig.setConfig("xgm_fan", 0);
|
||||
}
|
||||
|
||||
SetChart(chartCPU, AsusFan.CPU);
|
||||
@@ -488,7 +494,7 @@ namespace GHelper
|
||||
LoadProfile(seriesCPU, AsusFan.CPU);
|
||||
LoadProfile(seriesGPU, AsusFan.GPU);
|
||||
|
||||
int auto_apply = Program.config.getConfigPerf("auto_apply");
|
||||
int auto_apply = AppConfig.getConfigPerf("auto_apply");
|
||||
|
||||
checkApplyFans.Checked = (auto_apply == 1);
|
||||
|
||||
@@ -504,15 +510,15 @@ namespace GHelper
|
||||
|
||||
series.Points.Clear();
|
||||
|
||||
int mode = Program.config.getConfig("performance_mode");
|
||||
byte[] curve = Program.config.getFanConfig(device);
|
||||
int mode = AppConfig.getConfig("performance_mode");
|
||||
byte[] curve = AppConfig.getFanConfig(device);
|
||||
|
||||
if (reset || AsusACPI.IsEmptyCurve(curve))
|
||||
if (reset || AsusACPI.IsInvalidCurve(curve))
|
||||
{
|
||||
curve = Program.acpi.GetFanCurve(device, mode);
|
||||
|
||||
if (AsusACPI.IsEmptyCurve(curve))
|
||||
curve = Program.config.getDefaultCurve(device);
|
||||
if (AsusACPI.IsInvalidCurve(curve))
|
||||
curve = AppConfig.getDefaultCurve(device);
|
||||
|
||||
curve = AsusACPI.FixFanCurve(curve);
|
||||
|
||||
@@ -543,7 +549,7 @@ namespace GHelper
|
||||
i++;
|
||||
}
|
||||
|
||||
Program.config.setFanConfig(device, curve);
|
||||
AppConfig.setFanConfig(device, curve);
|
||||
//Program.wmi.SetFanCurve(device, curve);
|
||||
|
||||
}
|
||||
@@ -555,19 +561,19 @@ namespace GHelper
|
||||
LoadProfile(seriesCPU, AsusFan.CPU, true);
|
||||
LoadProfile(seriesGPU, AsusFan.GPU, true);
|
||||
|
||||
if (Program.config.isConfig("mid_fan"))
|
||||
if (AppConfig.isConfig("mid_fan"))
|
||||
LoadProfile(seriesMid, AsusFan.Mid, true);
|
||||
|
||||
if (Program.config.isConfig("xgm_fan"))
|
||||
if (AppConfig.isConfig("xgm_fan"))
|
||||
LoadProfile(seriesXGM, AsusFan.XGM, true);
|
||||
|
||||
checkApplyFans.Checked = false;
|
||||
checkApplyPower.Checked = false;
|
||||
|
||||
Program.config.setConfigPerf("auto_apply", 0);
|
||||
Program.config.setConfigPerf("auto_apply_power", 0);
|
||||
AppConfig.setConfigPerf("auto_apply", 0);
|
||||
AppConfig.setConfigPerf("auto_apply_power", 0);
|
||||
|
||||
Program.acpi.DeviceSet(AsusACPI.PerformanceMode, Program.config.getConfig("performance_mode"), "PerfMode");
|
||||
Program.acpi.DeviceSet(AsusACPI.PerformanceMode, AppConfig.getConfig("performance_mode"), "PerfMode");
|
||||
if (Program.acpi.IsXGConnected()) AsusUSB.ResetXGM();
|
||||
|
||||
trackGPUCore.Value = 0;
|
||||
@@ -575,10 +581,10 @@ namespace GHelper
|
||||
trackGPUBoost.Value = AsusACPI.MaxGPUBoost;
|
||||
trackGPUTemp.Value = AsusACPI.MaxGPUTemp;
|
||||
|
||||
Program.config.setConfigPerf("gpu_boost", trackGPUBoost.Value);
|
||||
Program.config.setConfigPerf("gpu_temp", trackGPUTemp.Value);
|
||||
Program.config.setConfigPerf("gpu_core", trackGPUCore.Value);
|
||||
Program.config.setConfigPerf("gpu_memory", trackGPUMemory.Value);
|
||||
AppConfig.setConfigPerf("gpu_boost", trackGPUBoost.Value);
|
||||
AppConfig.setConfigPerf("gpu_temp", trackGPUTemp.Value);
|
||||
AppConfig.setConfigPerf("gpu_core", trackGPUCore.Value);
|
||||
AppConfig.setConfigPerf("gpu_memory", trackGPUMemory.Value);
|
||||
VisualiseGPUSettings();
|
||||
|
||||
Program.settingsForm.SetGPUClocks(true);
|
||||
@@ -593,10 +599,10 @@ namespace GHelper
|
||||
SaveProfile(seriesCPU, AsusFan.CPU);
|
||||
SaveProfile(seriesGPU, AsusFan.GPU);
|
||||
|
||||
if (Program.config.isConfig("mid_fan"))
|
||||
if (AppConfig.isConfig("mid_fan"))
|
||||
SaveProfile(seriesMid, AsusFan.Mid);
|
||||
|
||||
if (Program.config.isConfig("xgm_fan"))
|
||||
if (AppConfig.isConfig("xgm_fan"))
|
||||
SaveProfile(seriesXGM, AsusFan.XGM);
|
||||
|
||||
Program.settingsForm.AutoFans();
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
<AssemblyVersion>0.64</AssemblyVersion>
|
||||
<AssemblyVersion>0.68</AssemblyVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
||||
@@ -132,8 +132,8 @@ public class NvidiaGpuControl : IGpuControl
|
||||
|
||||
public int SetClocksFromConfig()
|
||||
{
|
||||
int core = Program.config.getConfig("gpu_core");
|
||||
int memory = Program.config.getConfig("gpu_memory");
|
||||
int core = AppConfig.getConfig("gpu_core");
|
||||
int memory = AppConfig.getConfig("gpu_memory");
|
||||
int status = SetClocks(core, memory);
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -19,14 +19,14 @@ public static class HardwareControl
|
||||
public static int GetFanMax()
|
||||
{
|
||||
int max = 58;
|
||||
if (Program.config.ContainsModel("401")) max = 72;
|
||||
else if (Program.config.ContainsModel("503")) max = 68;
|
||||
return Math.Max(max, Program.config.getConfig("fan_max"));
|
||||
if (AppConfig.ContainsModel("401")) max = 72;
|
||||
else if (AppConfig.ContainsModel("503")) max = 68;
|
||||
return Math.Max(max, AppConfig.getConfig("fan_max"));
|
||||
}
|
||||
|
||||
public static void SetFanMax(int fan)
|
||||
{
|
||||
Program.config.setConfig("fan_max", fan);
|
||||
AppConfig.setConfig("fan_max", fan);
|
||||
}
|
||||
private static string FormatFan(int fan)
|
||||
{
|
||||
@@ -40,8 +40,8 @@ public static class HardwareControl
|
||||
int fanMax = GetFanMax();
|
||||
if (fan > fanMax && fan < 110) SetFanMax(fan);
|
||||
|
||||
if (Program.config.getConfig("fan_rpm") == 1)
|
||||
return GHelper.Properties.Strings.FanSpeed + (fan * 100).ToString() + GHelper.Properties.Strings.RPM;
|
||||
if (AppConfig.getConfig("fan_rpm") == 1)
|
||||
return GHelper.Properties.Strings.FanSpeed + (fan * 100).ToString() + "RPM";
|
||||
else
|
||||
return GHelper.Properties.Strings.FanSpeed + Math.Min(Math.Round((float)fan / fanMax * 100), 100).ToString() + "%"; // relatively to 6000 rpm
|
||||
}
|
||||
|
||||
330
app/InputDispatcher.cs
Normal file
330
app/InputDispatcher.cs
Normal file
@@ -0,0 +1,330 @@
|
||||
using HidLibrary;
|
||||
using Microsoft.Win32;
|
||||
using NAudio.CoreAudioApi;
|
||||
using System.Diagnostics;
|
||||
using System.Management;
|
||||
using Tools;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
public class KeyboardListener
|
||||
{
|
||||
|
||||
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
|
||||
|
||||
public KeyboardListener(Action<int> KeyHandler)
|
||||
{
|
||||
HidDevice? input = AsusUSB.GetDevice();
|
||||
|
||||
if (input == null)
|
||||
{
|
||||
Logger.WriteLine("Input device not found");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.WriteLine("Listener input " + input.DevicePath);
|
||||
}
|
||||
|
||||
|
||||
var task = Task.Run(() =>
|
||||
{
|
||||
try
|
||||
{
|
||||
while (!cancellationTokenSource.Token.IsCancellationRequested)
|
||||
{
|
||||
var data = input.Read().Data;
|
||||
if (data.Length > 1 && data[0] == AsusUSB.INPUT_HID_ID && data[1] > 0)
|
||||
{
|
||||
Logger.WriteLine("Key:" + data[1]);
|
||||
KeyHandler(data[1]);
|
||||
}
|
||||
}
|
||||
Logger.WriteLine("Listener stopped");
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.ToString());
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
cancellationTokenSource?.Cancel();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class InputDispatcher
|
||||
{
|
||||
|
||||
private static bool isOptimizationRunning = OptimizationService.IsRunning();
|
||||
private static nint windowHandle;
|
||||
|
||||
public static Keys keyProfile = Keys.F5;
|
||||
|
||||
KeyboardListener listener;
|
||||
|
||||
KeyHandler m1, m2, togggle;
|
||||
|
||||
public InputDispatcher(nint handle)
|
||||
{
|
||||
|
||||
windowHandle = handle;
|
||||
|
||||
Program.acpi.SubscribeToEvents(WatcherEventArrived);
|
||||
|
||||
// CTRL + SHIFT + F5 to cycle profiles
|
||||
if (AppConfig.getConfig("keybind_profile") != -1) keyProfile = (Keys)AppConfig.getConfig("keybind_profile");
|
||||
|
||||
togggle = new KeyHandler(KeyHandler.SHIFT | KeyHandler.CTRL, keyProfile, windowHandle);
|
||||
m1 = new KeyHandler(KeyHandler.NOMOD, Keys.VolumeDown, windowHandle);
|
||||
m2 = new KeyHandler(KeyHandler.NOMOD, Keys.VolumeUp, windowHandle);
|
||||
|
||||
RegisterKeys();
|
||||
|
||||
}
|
||||
|
||||
public void InitListener()
|
||||
{
|
||||
if (listener is not null) listener.Dispose();
|
||||
|
||||
if (!OptimizationService.IsRunning())
|
||||
listener = new KeyboardListener(HandleEvent);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void RegisterKeys()
|
||||
{
|
||||
|
||||
string actionM1 = AppConfig.getConfigString("m1");
|
||||
string actionM2 = AppConfig.getConfigString("m2");
|
||||
|
||||
togggle.Unregiser();
|
||||
m1.Unregiser();
|
||||
m2.Unregiser();
|
||||
|
||||
if (keyProfile != Keys.None)
|
||||
{
|
||||
togggle.Register();
|
||||
}
|
||||
|
||||
if (actionM1 is not null && actionM1.Length > 0)
|
||||
{
|
||||
m1.Register();
|
||||
}
|
||||
|
||||
if (actionM2 is not null && actionM2.Length > 0)
|
||||
{
|
||||
m2.Register();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void CustomKey(string configKey = "m3")
|
||||
{
|
||||
string command = AppConfig.getConfigString(configKey + "_custom");
|
||||
int intKey;
|
||||
|
||||
try
|
||||
{
|
||||
intKey = Convert.ToInt32(command, 16);
|
||||
}
|
||||
catch
|
||||
{
|
||||
intKey = -1;
|
||||
}
|
||||
|
||||
|
||||
if (intKey > 0)
|
||||
NativeMethods.KeyPress(intKey);
|
||||
else
|
||||
LaunchProcess(command);
|
||||
|
||||
}
|
||||
|
||||
public static void KeyProcess(string name = "m3")
|
||||
{
|
||||
string action = AppConfig.getConfigString(name);
|
||||
|
||||
if (action is null || action.Length <= 1)
|
||||
{
|
||||
if (name == "m4")
|
||||
action = "ghelper";
|
||||
if (name == "fnf4")
|
||||
action = "aura";
|
||||
if (name == "fnf5")
|
||||
action = "performance";
|
||||
if (name == "m3" && !isOptimizationRunning)
|
||||
action = "micmute";
|
||||
}
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case "mute":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_VOLUME_MUTE);
|
||||
break;
|
||||
case "play":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_MEDIA_PLAY_PAUSE);
|
||||
break;
|
||||
case "screenshot":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_SNAPSHOT);
|
||||
break;
|
||||
case "screen":
|
||||
NativeMethods.TurnOffScreen(Program.settingsForm.Handle);
|
||||
break;
|
||||
case "miniled":
|
||||
Program.settingsForm.BeginInvoke(Program.settingsForm.ToogleMiniled);
|
||||
break;
|
||||
case "aura":
|
||||
Program.settingsForm.BeginInvoke(Program.settingsForm.CycleAuraMode);
|
||||
break;
|
||||
case "performance":
|
||||
Program.settingsForm.BeginInvoke(Program.settingsForm.CyclePerformanceMode);
|
||||
break;
|
||||
case "ghelper":
|
||||
Program.settingsForm.BeginInvoke(delegate
|
||||
{
|
||||
Program.SettingsToggle();
|
||||
});
|
||||
break;
|
||||
case "custom":
|
||||
CustomKey(name);
|
||||
break;
|
||||
case "micmute":
|
||||
using (var enumerator = new MMDeviceEnumerator())
|
||||
{
|
||||
var commDevice = enumerator.GetDefaultAudioEndpoint(DataFlow.Capture, Role.Communications);
|
||||
bool muteStatus = !commDevice.AudioEndpointVolume.Mute;
|
||||
commDevice.AudioEndpointVolume.Mute = muteStatus;
|
||||
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, muteStatus ? "Muted" : "Unmuted", muteStatus ? ToastIcon.MicrophoneMute : ToastIcon.Microphone);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static bool GetTouchpadState()
|
||||
{
|
||||
using (var key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad\Status", false))
|
||||
{
|
||||
return (key?.GetValue("Enabled")?.ToString() == "1");
|
||||
}
|
||||
}
|
||||
|
||||
static void TabletMode()
|
||||
{
|
||||
bool touchpadState = GetTouchpadState();
|
||||
bool tabletState = Program.acpi.DeviceGet(AsusACPI.TabletState) > 0;
|
||||
|
||||
Logger.WriteLine("Tablet: " + tabletState + " Touchpad: " + touchpadState);
|
||||
|
||||
if ((tabletState && touchpadState) || (!tabletState && !touchpadState)) AsusUSB.TouchpadToggle();
|
||||
|
||||
}
|
||||
|
||||
static void HandleEvent(int EventID)
|
||||
{
|
||||
switch (EventID)
|
||||
{
|
||||
case 124: // M3
|
||||
KeyProcess("m3");
|
||||
return;
|
||||
case 56: // M4 / Rog button
|
||||
KeyProcess("m4");
|
||||
return;
|
||||
case 174: // FN+F5
|
||||
Program.settingsForm.BeginInvoke(Program.settingsForm.CyclePerformanceMode);
|
||||
return;
|
||||
case 179: // FN+F4
|
||||
KeyProcess("fnf4");
|
||||
return;
|
||||
case 189: // Tablet mode
|
||||
TabletMode();
|
||||
return;
|
||||
}
|
||||
|
||||
if (isOptimizationRunning) return;
|
||||
|
||||
// Asus Optimization service Events
|
||||
|
||||
int backlight = AppConfig.getConfig("keyboard_brightness");
|
||||
|
||||
string[] backlightNames = new string[] { "Off", "Low", "Mid", "Max" };
|
||||
|
||||
int brightness;
|
||||
|
||||
switch (EventID)
|
||||
{
|
||||
case 197: // FN+F2
|
||||
backlight = Math.Max(0, backlight - 1);
|
||||
AppConfig.setConfig("keyboard_brightness", backlight);
|
||||
AsusUSB.ApplyBrightness(backlight);
|
||||
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, backlightNames[backlight], ToastIcon.BacklightDown);
|
||||
break;
|
||||
case 196: // FN+F3
|
||||
backlight = Math.Min(3, backlight + 1);
|
||||
AppConfig.setConfig("keyboard_brightness", backlight);
|
||||
AsusUSB.ApplyBrightness(backlight);
|
||||
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, backlightNames[backlight], ToastIcon.BacklightUp);
|
||||
break;
|
||||
case 199: // ON Z13 - FN+F11 - cycles backlight
|
||||
if (++backlight > 3) backlight = 0;
|
||||
AppConfig.setConfig("keyboard_brightness", backlight);
|
||||
AsusUSB.ApplyBrightness(backlight);
|
||||
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, backlightNames[backlight], ToastIcon.BacklightUp);
|
||||
break;
|
||||
case 16: // FN+F7
|
||||
Program.acpi.DeviceSet(AsusACPI.UniversalControl, 0x10, "Brightness");
|
||||
break;
|
||||
case 32: // FN+F8
|
||||
Program.acpi.DeviceSet(AsusACPI.UniversalControl, 0x20, "Brightness");
|
||||
break;
|
||||
case 107: // FN+F10
|
||||
bool touchpadState = GetTouchpadState();
|
||||
if (!AsusUSB.TouchpadToggle()) Program.acpi.DeviceSet(AsusACPI.UniversalControl, 0x6B, "Touchpad");
|
||||
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, touchpadState ? "Off" : "On", ToastIcon.Touchpad);
|
||||
break;
|
||||
case 108: // FN+F11
|
||||
Program.acpi.DeviceSet(AsusACPI.UniversalControl, 0x6c, "Sleep");
|
||||
//NativeMethods.SetSuspendState(false, true, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void LaunchProcess(string command = "")
|
||||
{
|
||||
string executable = command.Split(' ')[0];
|
||||
string arguments = command.Substring(executable.Length).Trim();
|
||||
|
||||
try
|
||||
{
|
||||
Process proc = Process.Start(executable, arguments);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Logger.WriteLine("Failed to run " + command);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void WatcherEventArrived(object sender, EventArrivedEventArgs e)
|
||||
{
|
||||
if (e.NewEvent is null) return;
|
||||
int EventID = int.Parse(e.NewEvent["EventID"].ToString());
|
||||
Logger.WriteLine("WMI event " + EventID);
|
||||
HandleEvent(EventID);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -435,6 +435,10 @@ public class NativeMethods
|
||||
}
|
||||
|
||||
|
||||
[DllImport("Powrprof.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
|
||||
public static extern bool SetSuspendState(bool hiberate, bool forceCritical, bool disableWakeEvent);
|
||||
|
||||
|
||||
public const int KEYEVENTF_EXTENDEDKEY = 1;
|
||||
public const int KEYEVENTF_KEYUP = 2;
|
||||
|
||||
@@ -705,6 +709,7 @@ public class NativeMethods
|
||||
dm.dmDisplayFrequency = frequency;
|
||||
int iRet = NativeMethods.ChangeDisplaySettingsEx(laptopScreen, ref dm, IntPtr.Zero, DisplaySettingsFlags.CDS_UPDATEREGISTRY, IntPtr.Zero);
|
||||
Logger.WriteLine("Screen = " + frequency.ToString() + "Hz : " + (iRet == 0 ? "OK" : iRet));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
|
||||
222
app/Program.cs
222
app/Program.cs
@@ -1,11 +1,9 @@
|
||||
using Microsoft.Win32;
|
||||
using NAudio.CoreAudioApi;
|
||||
using System.Diagnostics;
|
||||
using System.Globalization;
|
||||
using System.Management;
|
||||
using System.Reflection;
|
||||
using System.Security.Principal;
|
||||
using Tools;
|
||||
using static NativeMethods;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
@@ -20,7 +18,6 @@ namespace GHelper
|
||||
};
|
||||
|
||||
public static AsusACPI? acpi;
|
||||
public static AppConfig config = new AppConfig();
|
||||
|
||||
public static SettingsForm settingsForm = new SettingsForm();
|
||||
|
||||
@@ -30,7 +27,7 @@ namespace GHelper
|
||||
private static long lastTheme;
|
||||
private static long lastAdmin;
|
||||
|
||||
private static bool isOptimizationRunning = OptimizationService.IsRunning();
|
||||
public static InputDispatcher inputDispatcher;
|
||||
|
||||
private static PowerLineStatus isPlugged = PowerLineStatus.Unknown;
|
||||
|
||||
@@ -41,9 +38,14 @@ namespace GHelper
|
||||
string action = "";
|
||||
if (args.Length > 0) action = args[0];
|
||||
|
||||
Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture;
|
||||
Debug.WriteLine(CultureInfo.CurrentUICulture);
|
||||
string language = AppConfig.getConfigString("language");
|
||||
|
||||
if (language != null && language.Length > 0)
|
||||
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(language);
|
||||
else
|
||||
Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture;
|
||||
|
||||
Debug.WriteLine(CultureInfo.CurrentUICulture);
|
||||
//Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr");
|
||||
|
||||
CheckProcesses();
|
||||
@@ -65,7 +67,7 @@ namespace GHelper
|
||||
}
|
||||
|
||||
Logger.WriteLine("------------");
|
||||
Logger.WriteLine("App launched: " + config.GetModel() + " :" + Assembly.GetExecutingAssembly().GetName().Version.ToString() + (IsUserAdministrator() ? "A" : ""));
|
||||
Logger.WriteLine("App launched: " + AppConfig.GetModel() + " :" + Assembly.GetExecutingAssembly().GetName().Version.ToString() + CultureInfo.CurrentUICulture + (IsUserAdministrator() ? "." : ""));
|
||||
|
||||
Application.EnableVisualStyles();
|
||||
|
||||
@@ -75,12 +77,13 @@ namespace GHelper
|
||||
|
||||
trayIcon.MouseClick += TrayIcon_MouseClick;
|
||||
|
||||
acpi.SubscribeToEvents(WatcherEventArrived);
|
||||
inputDispatcher = new InputDispatcher(ds);
|
||||
|
||||
settingsForm.InitAura();
|
||||
settingsForm.InitMatrix();
|
||||
settingsForm.SetStartupCheck(Startup.IsScheduled());
|
||||
|
||||
|
||||
SetAutoModes();
|
||||
|
||||
// Subscribing for system power change events
|
||||
@@ -88,24 +91,16 @@ namespace GHelper
|
||||
SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged;
|
||||
|
||||
// Subscribing for monitor power on events
|
||||
var settingGuid = new NativeMethods.PowerSettingGuid();
|
||||
PowerSettingGuid settingGuid = new NativeMethods.PowerSettingGuid();
|
||||
unRegPowerNotify = NativeMethods.RegisterPowerSettingNotification(ds, settingGuid.ConsoleDisplayState, NativeMethods.DEVICE_NOTIFY_WINDOW_HANDLE);
|
||||
|
||||
// CTRL + SHIFT + F5 to cycle profiles
|
||||
Keys keybind_profile = (config.getConfig("keybind_profile") != -1) ? (Keys)config.getConfig("keybind_profile") : Keys.F5;
|
||||
if (keybind_profile != 0)
|
||||
{
|
||||
var ghk = new KeyHandler(KeyHandler.SHIFT | KeyHandler.CTRL, keybind_profile, ds);
|
||||
ghk.Register();
|
||||
}
|
||||
|
||||
|
||||
if (Environment.CurrentDirectory.Trim('\\') == Application.StartupPath.Trim('\\') || action.Length > 0)
|
||||
{
|
||||
SettingsToggle(action);
|
||||
}
|
||||
|
||||
if (!isOptimizationRunning) AsusUSB.RunListener(HandleEvent);
|
||||
|
||||
|
||||
Application.Run();
|
||||
|
||||
@@ -149,7 +144,9 @@ namespace GHelper
|
||||
isPlugged = SystemInformation.PowerStatus.PowerLineStatus;
|
||||
Logger.WriteLine("AutoSetting for " + isPlugged.ToString());
|
||||
|
||||
settingsForm.SetBatteryChargeLimit(config.getConfig("charge_limit"));
|
||||
inputDispatcher.InitListener();
|
||||
|
||||
settingsForm.SetBatteryChargeLimit(AppConfig.getConfig("charge_limit"));
|
||||
settingsForm.AutoPerformance();
|
||||
|
||||
bool switched = settingsForm.AutoGPUMode();
|
||||
@@ -173,191 +170,8 @@ namespace GHelper
|
||||
}
|
||||
|
||||
|
||||
static void LaunchProcess(string command = "")
|
||||
{
|
||||
string executable = command.Split(' ')[0];
|
||||
string arguments = command.Substring(executable.Length).Trim();
|
||||
|
||||
try
|
||||
{
|
||||
Process proc = Process.Start(executable, arguments);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Logger.WriteLine("Failed to run " + command);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
static void CustomKey(string configKey = "m3")
|
||||
{
|
||||
string command = config.getConfigString(configKey + "_custom");
|
||||
int intKey;
|
||||
|
||||
try
|
||||
{
|
||||
intKey = Convert.ToInt32(command, 16);
|
||||
}
|
||||
catch
|
||||
{
|
||||
intKey = -1;
|
||||
}
|
||||
|
||||
|
||||
if (intKey > 0)
|
||||
NativeMethods.KeyPress(intKey);
|
||||
else
|
||||
LaunchProcess(command);
|
||||
|
||||
}
|
||||
|
||||
static void KeyProcess(string name = "m3")
|
||||
{
|
||||
string action = config.getConfigString(name);
|
||||
|
||||
if (action is null || action.Length <= 1)
|
||||
{
|
||||
if (name == "m4")
|
||||
action = "ghelper";
|
||||
if (name == "fnf4")
|
||||
action = "aura";
|
||||
if (name == "m3" && !isOptimizationRunning)
|
||||
action = "micmute";
|
||||
}
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case "mute":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_VOLUME_MUTE);
|
||||
break;
|
||||
case "play":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_MEDIA_PLAY_PAUSE);
|
||||
break;
|
||||
case "screenshot":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_SNAPSHOT);
|
||||
break;
|
||||
case "screen":
|
||||
NativeMethods.TurnOffScreen(Program.settingsForm.Handle);
|
||||
break;
|
||||
case "miniled":
|
||||
settingsForm.BeginInvoke(settingsForm.ToogleMiniled);
|
||||
break;
|
||||
case "aura":
|
||||
settingsForm.BeginInvoke(settingsForm.CycleAuraMode);
|
||||
break;
|
||||
case "performance":
|
||||
settingsForm.BeginInvoke(settingsForm.CyclePerformanceMode);
|
||||
break;
|
||||
case "ghelper":
|
||||
settingsForm.BeginInvoke(delegate
|
||||
{
|
||||
SettingsToggle();
|
||||
});
|
||||
break;
|
||||
case "custom":
|
||||
CustomKey(name);
|
||||
break;
|
||||
case "micmute":
|
||||
using (var enumerator = new MMDeviceEnumerator())
|
||||
{
|
||||
var commDevice = enumerator.GetDefaultAudioEndpoint(DataFlow.Capture, Role.Communications);
|
||||
bool muteStatus = !commDevice.AudioEndpointVolume.Mute;
|
||||
commDevice.AudioEndpointVolume.Mute = muteStatus;
|
||||
settingsForm.BeginInvoke(settingsForm.RunToast, muteStatus ? "Muted" : "Unmuted", muteStatus ? ToastIcon.MicrophoneMute : ToastIcon.Microphone);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void TabletMode()
|
||||
{
|
||||
bool touchpadState, tabletState;
|
||||
|
||||
using (var key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad\Status", false))
|
||||
{
|
||||
touchpadState = (key?.GetValue("Enabled")?.ToString() == "1");
|
||||
}
|
||||
|
||||
tabletState = acpi.DeviceGet(AsusACPI.TabletState) > 0;
|
||||
|
||||
Logger.WriteLine("Tablet: " + tabletState + " Touchpad: " + touchpadState);
|
||||
|
||||
if ((tabletState && touchpadState) || (!tabletState && !touchpadState)) AsusUSB.TouchpadToggle();
|
||||
|
||||
}
|
||||
|
||||
static void HandleEvent(int EventID)
|
||||
{
|
||||
switch (EventID)
|
||||
{
|
||||
case 124: // M3
|
||||
KeyProcess("m3");
|
||||
return;
|
||||
case 56: // M4 / Rog button
|
||||
KeyProcess("m4");
|
||||
return;
|
||||
case 174: // FN+F5
|
||||
settingsForm.BeginInvoke(settingsForm.CyclePerformanceMode);
|
||||
return;
|
||||
case 179: // FN+F4
|
||||
KeyProcess("fnf4");
|
||||
return;
|
||||
case 189: // Tablet mode
|
||||
TabletMode();
|
||||
return;
|
||||
}
|
||||
|
||||
if (isOptimizationRunning) return;
|
||||
|
||||
// Asus Optimization service Events
|
||||
|
||||
int brightness = config.getConfig("keyboard_brightness");
|
||||
|
||||
switch (EventID)
|
||||
{
|
||||
case 197: // FN+F2
|
||||
brightness = Math.Max(0, brightness - 1);
|
||||
config.setConfig("keyboard_brightness", brightness);
|
||||
AsusUSB.ApplyBrightness(brightness);
|
||||
settingsForm.BeginInvoke(settingsForm.RunToast, "Backlight", ToastIcon.BacklightDown);
|
||||
break;
|
||||
case 196: // FN+F3
|
||||
brightness = Math.Min(3, brightness + 1);
|
||||
config.setConfig("keyboard_brightness", brightness);
|
||||
AsusUSB.ApplyBrightness(brightness);
|
||||
settingsForm.BeginInvoke(settingsForm.RunToast, "Backlight", ToastIcon.BacklightUp);
|
||||
break;
|
||||
case 16: // FN+F7
|
||||
ScreenBrightness.Adjust(-10);
|
||||
settingsForm.BeginInvoke(settingsForm.RunToast, "Brightness", ToastIcon.BrightnessDown);
|
||||
break;
|
||||
case 32: // FN+F8
|
||||
ScreenBrightness.Adjust(+10);
|
||||
settingsForm.BeginInvoke(settingsForm.RunToast, "Brightness", ToastIcon.BrightnessUp);
|
||||
break;
|
||||
case 107: // FN+F10
|
||||
AsusUSB.TouchpadToggle();
|
||||
settingsForm.BeginInvoke(settingsForm.RunToast, "Touchpad", ToastIcon.Touchpad);
|
||||
break;
|
||||
case 108: // FN+F11
|
||||
Application.SetSuspendState(PowerState.Suspend, true, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void WatcherEventArrived(object sender, EventArrivedEventArgs e)
|
||||
{
|
||||
if (e.NewEvent is null) return;
|
||||
int EventID = int.Parse(e.NewEvent["EventID"].ToString());
|
||||
Logger.WriteLine("WMI event " + EventID);
|
||||
HandleEvent(EventID);
|
||||
}
|
||||
|
||||
static void SettingsToggle(string action = "")
|
||||
public static void SettingsToggle(string action = "")
|
||||
{
|
||||
if (settingsForm.Visible)
|
||||
settingsForm.Hide();
|
||||
|
||||
20
app/Properties/Strings.Designer.cs
generated
20
app/Properties/Strings.Designer.cs
generated
@@ -169,7 +169,7 @@ namespace GHelper.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Auto adjust Windows Power Mode.
|
||||
/// Looks up a localized string similar to Auto adjust Windows Power Modes.
|
||||
/// </summary>
|
||||
internal static string ApplyWindowsPowerPlan {
|
||||
get {
|
||||
@@ -1068,6 +1068,15 @@ namespace GHelper.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Volume Down.
|
||||
/// </summary>
|
||||
internal static string VolumeDown {
|
||||
get {
|
||||
return ResourceManager.GetString("VolumeDown", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Volume Mute.
|
||||
/// </summary>
|
||||
@@ -1077,6 +1086,15 @@ namespace GHelper.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Volume Up.
|
||||
/// </summary>
|
||||
internal static string VolumeUp {
|
||||
get {
|
||||
return ResourceManager.GetString("VolumeUp", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Keep app window always on top.
|
||||
/// </summary>
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
<value>Encendida</value>
|
||||
</data>
|
||||
<data name="BacklightTimeout" xml:space="preserve">
|
||||
<value>Apagar retroiluminación con batería (s.)</value>
|
||||
<value>Apagar retroiluminación con batería (segundos)</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Equilibrado</value>
|
||||
@@ -357,6 +357,9 @@
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>Multizona</value>
|
||||
</data>
|
||||
<data name="MuteMic" xml:space="preserve">
|
||||
<value>Silenciar micrófono</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>Abrir ventana G-Helper</value>
|
||||
</data>
|
||||
@@ -450,9 +453,15 @@
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>Versión</value>
|
||||
</data>
|
||||
<data name="VolumeDown" xml:space="preserve">
|
||||
<value>Bajar volumen</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>Silenciar volumen</value>
|
||||
</data>
|
||||
<data name="VolumeUp" xml:space="preserve">
|
||||
<value>Subir volumen</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>Mantener aplicación siempre visible</value>
|
||||
</data>
|
||||
|
||||
@@ -1,5 +1,64 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
@@ -59,13 +118,13 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ACPIError" xml:space="preserve">
|
||||
<value>Connexion impossible avec ASUS ACPI. L’application ne peut fonctionner sans. Veuillez installer Asus System Control Interface.</value>
|
||||
<value>Connexion impossible avec ASUS ACPI. L'application ne peut fonctionner sans. Veuillez installer Asus System Control Interface.</value>
|
||||
</data>
|
||||
<data name="AlertDGPU" xml:space="preserve">
|
||||
<value>Le GPU semble être surchargé, voulez vous le désactiver ?</value>
|
||||
</data>
|
||||
<data name="AlertDGPUTitle" xml:space="preserve">
|
||||
<value>Mode Économique</value>
|
||||
<value>Mode Éco</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<value>Désactiver le Mode Ultime requiert un redémarrage</value>
|
||||
@@ -77,28 +136,28 @@
|
||||
<value>Redémarrer maintenant ?</value>
|
||||
</data>
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<value>Vitesse d’animation</value>
|
||||
<value>Vitesse de l'animation</value>
|
||||
</data>
|
||||
<data name="AnimeMatrix" xml:space="preserve">
|
||||
<value>Anime Matrix</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunning" xml:space="preserve">
|
||||
<value>L’application est déjà en cours d’éxecution</value>
|
||||
<value>L'application est déjà en cours d'exécution</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunningText" xml:space="preserve">
|
||||
<value>G-Helper est déjà en cours d'exécution. Vérifiez la barre d'état du système</value>
|
||||
<value>G-Helper est déjà en cours d'exécution. Vérifiez la barre d'état système.</value>
|
||||
</data>
|
||||
<data name="ApplyFanCurve" xml:space="preserve">
|
||||
<value>Appliquer la courbe de ventilateur personnalisée</value>
|
||||
<value>Appliquer la courbe</value>
|
||||
</data>
|
||||
<data name="ApplyPowerLimits" xml:space="preserve">
|
||||
<value>Appliquer les limites de performance</value>
|
||||
<value>Appliquer les limites</value>
|
||||
</data>
|
||||
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
|
||||
<value>Ajuster automatiquement les modes de Performance Windows</value>
|
||||
<value>Ajustement auto des modes de gestion alim. Windows</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>Respiration</value>
|
||||
<value>Pulsation</value>
|
||||
</data>
|
||||
<data name="AuraColorCycle" xml:space="preserve">
|
||||
<value>Cycle de couleur</value>
|
||||
@@ -125,19 +184,25 @@
|
||||
<value>Automatique</value>
|
||||
</data>
|
||||
<data name="AutoRefreshTooltip" xml:space="preserve">
|
||||
<value>Limiter le rafraîchissement de l’écran à 60Hz pour économiser de la batterie, et retour à la normal en chargement</value>
|
||||
<value>Limite à 60 Hz pour éco. batterie, valeur normale sur secteur</value>
|
||||
</data>
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>Éveillé</value>
|
||||
<value>Allumé</value>
|
||||
</data>
|
||||
<data name="BacklightTimeout" xml:space="preserve">
|
||||
<value>Délai (secondes) avant extinction rétroéclairage</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Balancé</value>
|
||||
<value>Équilibré</value>
|
||||
</data>
|
||||
<data name="BatteryChargeLimit" xml:space="preserve">
|
||||
<value>Limite de charge de la batterie</value>
|
||||
<value>Limite de charge </value>
|
||||
</data>
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Au lancement</value>
|
||||
<value>Au démarrage</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Luminosité</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>Couleur</value>
|
||||
@@ -152,25 +217,25 @@
|
||||
<value>Par défaut</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>Désactiver l’Overdrive de l’Écran</value>
|
||||
<value>Désactiver l'overdrive de l'écran</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>En déchargement</value>
|
||||
<value>Taux décharge </value>
|
||||
</data>
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<value>Télécharger la mise à jour</value>
|
||||
</data>
|
||||
<data name="EcoGPUTooltip" xml:space="preserve">
|
||||
<value>Désactive le dGPU pour économiser la batterie</value>
|
||||
<value>Désactive le dGPU pour préserver la batterie</value>
|
||||
</data>
|
||||
<data name="EcoMode" xml:space="preserve">
|
||||
<value>Économique</value>
|
||||
<value>Éco</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>Aditionnel</value>
|
||||
<value>+ d'options</value>
|
||||
</data>
|
||||
<data name="ExtraSettings" xml:space="preserve">
|
||||
<value>Paramètres additionnels</value>
|
||||
<value>Paramètres supplémentaires</value>
|
||||
</data>
|
||||
<data name="FactoryDefaults" xml:space="preserve">
|
||||
<value>Paramètres d'usine</value>
|
||||
@@ -179,37 +244,55 @@
|
||||
<value>Courbes des ventilateurs</value>
|
||||
</data>
|
||||
<data name="FanProfileCPU" xml:space="preserve">
|
||||
<value>Profil de ventilateur CPU</value>
|
||||
<value>Profil du ventilateur CPU</value>
|
||||
</data>
|
||||
<data name="FanProfileGPU" xml:space="preserve">
|
||||
<value>Profil de ventilateur GPU</value>
|
||||
<value>Profil du ventilateur GPU</value>
|
||||
</data>
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<value>Profil de ventilateur central</value>
|
||||
<value>Profil du ventilateur central</value>
|
||||
</data>
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<value>Profil des ventilateurs </value>
|
||||
<value>Profil</value>
|
||||
</data>
|
||||
<data name="FansAndPower" xml:space="preserve">
|
||||
<value>Ventilateurs et Puissance</value>
|
||||
<value>Ventilateurs + Puissance</value>
|
||||
</data>
|
||||
<data name="FanSpeed" xml:space="preserve">
|
||||
<value>Vent: </value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>Ventilateurs + Puissance</value>
|
||||
</data>
|
||||
<data name="GPUBoost" xml:space="preserve">
|
||||
<value>Dynamic Boost</value>
|
||||
</data>
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<value>Changement</value>
|
||||
</data>
|
||||
<data name="GPUCoreClockOffset" xml:space="preserve">
|
||||
<value>Ajustement fréq. de base</value>
|
||||
</data>
|
||||
<data name="GPUMemoryClockOffset" xml:space="preserve">
|
||||
<value>Ajustement fréq. mémoire</value>
|
||||
</data>
|
||||
<data name="GPUMode" xml:space="preserve">
|
||||
<value>Mode de GPU</value>
|
||||
<value>Mode GPU </value>
|
||||
</data>
|
||||
<data name="GPUModeEco" xml:space="preserve">
|
||||
<value>Seulement iGPU</value>
|
||||
<value>iGPU uniquement</value>
|
||||
</data>
|
||||
<data name="GPUModeStandard" xml:space="preserve">
|
||||
<value>iGPU + dGPU</value>
|
||||
</data>
|
||||
<data name="GPUModeUltimate" xml:space="preserve">
|
||||
<value>Exclusivement dGPU</value>
|
||||
<value>dGPU exclusif</value>
|
||||
</data>
|
||||
<data name="GPUSettings" xml:space="preserve">
|
||||
<value>Paramètres du GPU</value>
|
||||
</data>
|
||||
<data name="GPUTempTarget" xml:space="preserve">
|
||||
<value>Température cible</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>Raccourcis clavier</value>
|
||||
@@ -218,16 +301,28 @@
|
||||
<value>Clavier</value>
|
||||
</data>
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>Baisser la luminosité du rétroéclairage sur batterie et retour à la normal en charge</value>
|
||||
<value>Réduire rétroéclairage sur batterie et mode normal sur secteur</value>
|
||||
</data>
|
||||
<data name="KeyboardBacklight" xml:space="preserve">
|
||||
<value>Rétroéclairage du clavier</value>
|
||||
<data name="LaptopBacklight" xml:space="preserve">
|
||||
<value>Rétroéclairage de l'ordinateur</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>Clavier de l’ordinateur</value>
|
||||
<value>Clavier de l'ordinateur</value>
|
||||
</data>
|
||||
<data name="LaptopScreen" xml:space="preserve">
|
||||
<value>Écran de l’ordinateur</value>
|
||||
<value>Écran de l'ordinateur </value>
|
||||
</data>
|
||||
<data name="Lid" xml:space="preserve">
|
||||
<value>Capot</value>
|
||||
</data>
|
||||
<data name="Lightbar" xml:space="preserve">
|
||||
<value>Barre lumineuse</value>
|
||||
</data>
|
||||
<data name="Logo" xml:space="preserve">
|
||||
<value>Logo</value>
|
||||
</data>
|
||||
<data name="MatrixAudio" xml:space="preserve">
|
||||
<value>Visualiseur Audio</value>
|
||||
</data>
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<value>Bannière binaire</value>
|
||||
@@ -251,25 +346,31 @@
|
||||
<value>Éteint</value>
|
||||
</data>
|
||||
<data name="MatrixPicture" xml:space="preserve">
|
||||
<value>Image</value>
|
||||
<value>Images</value>
|
||||
</data>
|
||||
<data name="MaxRefreshTooltip" xml:space="preserve">
|
||||
<value>Rafraichissement maximum pour baisser la latance</value>
|
||||
<value>Rafraîchissement maximum, faible latence</value>
|
||||
</data>
|
||||
<data name="MinRefreshTooltip" xml:space="preserve">
|
||||
<value>Rafraichissement à 60Hz pour économiser de la batterie</value>
|
||||
<value>Rafraichîssement 60 Hz pour économiser de la batterie</value>
|
||||
</data>
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>Multizone</value>
|
||||
<value>Multi-zone</value>
|
||||
</data>
|
||||
<data name="MuteMic" xml:space="preserve">
|
||||
<value>Désactiver le micro</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>Ouvrir la fenêtre G-Helper</value>
|
||||
<value>Ouvrir G-Helper</value>
|
||||
</data>
|
||||
<data name="Optimized" xml:space="preserve">
|
||||
<value>Optimizé</value>
|
||||
<value>Optimisé</value>
|
||||
</data>
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>Passer en Économique sur batterie et sur Standard en chargement</value>
|
||||
<value>Éco sur batterie, bascule vers Standard sur secteur</value>
|
||||
</data>
|
||||
<data name="OptimizedUSBC" xml:space="preserve">
|
||||
<value>Garder le GPU désactivé lorsque branché via USB-C en mode Optimisé</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>Autre</value>
|
||||
@@ -284,34 +385,37 @@
|
||||
<value>Image / Gif</value>
|
||||
</data>
|
||||
<data name="PlayPause" xml:space="preserve">
|
||||
<value>Reproduire / Pause</value>
|
||||
<value>Lecture / Pause</value>
|
||||
</data>
|
||||
<data name="PowerLimits" xml:space="preserve">
|
||||
<value>Limites de puissance (PPT)</value>
|
||||
</data>
|
||||
<data name="PPTExperimental" xml:space="preserve">
|
||||
<value>Limites de puissance (PPT) est une fonctionnalité expérimentale. Utilisez la avec attention et à vos risques.</value>
|
||||
<value>Limites de puissance (PPT) est une fonctionnalité expérimentale. Faire attention, à utiliser à vos risques !</value>
|
||||
</data>
|
||||
<data name="PrintScreen" xml:space="preserve">
|
||||
<value>Capture d’Écran</value>
|
||||
<value>Capture d'écran</value>
|
||||
</data>
|
||||
<data name="Quit" xml:space="preserve">
|
||||
<value>Quitter</value>
|
||||
</data>
|
||||
<data name="RestartGPU" xml:space="preserve">
|
||||
<value>Un processus utilisant le dGPU empêche le passage en mode Éco. Redémarrer le dGPU ? * Procédez à vos risques.</value>
|
||||
</data>
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<value>RPM</value>
|
||||
<value> RPM</value>
|
||||
</data>
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<value>Executer au lancement</value>
|
||||
<value>Exécuter au démarrage</value>
|
||||
</data>
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<value>Éteindre</value>
|
||||
<value>Arrêter</value>
|
||||
</data>
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<value>Silencieux</value>
|
||||
</data>
|
||||
<data name="Sleep" xml:space="preserve">
|
||||
<value>En veille</value>
|
||||
<value>Veille</value>
|
||||
</data>
|
||||
<data name="StandardGPUTooltip" xml:space="preserve">
|
||||
<value>Active le dGPU pour une utilisation standard</value>
|
||||
@@ -323,7 +427,13 @@
|
||||
<value>Erreur au lancement</value>
|
||||
</data>
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>Basculer Aura</value>
|
||||
<value>Activer Aura</value>
|
||||
</data>
|
||||
<data name="ToggleMiniled" xml:space="preserve">
|
||||
<value>Activer Miniled (si supporté)</value>
|
||||
</data>
|
||||
<data name="ToggleScreen" xml:space="preserve">
|
||||
<value>Allumer l'écran</value>
|
||||
</data>
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<value>Turbo</value>
|
||||
@@ -335,66 +445,24 @@
|
||||
<value>Éteindre sur batterie</value>
|
||||
</data>
|
||||
<data name="UltimateGPUTooltip" xml:space="preserve">
|
||||
<value>Redirige l’écran de l’ordinateur sur le dGPU pour maximiser le nombre de FPS</value>
|
||||
<value>Redirige l'écran du portable vers le dGPU, maximisation taux FPS </value>
|
||||
</data>
|
||||
<data name="UltimateMode" xml:space="preserve">
|
||||
<value>Ultimate</value>
|
||||
<value>Ultime</value>
|
||||
</data>
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>Version</value>
|
||||
<value>Version </value>
|
||||
</data>
|
||||
<data name="VolumeDown" xml:space="preserve">
|
||||
<value>Vol-</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>Mettre en sourdine</value>
|
||||
</data>
|
||||
<data name="VolumeUp" xml:space="preserve">
|
||||
<value>Vol+</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>Garder l’application au premier plan</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Luminosité</value>
|
||||
</data>
|
||||
<data name="FanSpeed" xml:space="preserve">
|
||||
<value>Ventilateurs :</value>
|
||||
</data>
|
||||
<data name="GPUBoost" xml:space="preserve">
|
||||
<value>Boost Dynamique</value>
|
||||
</data>
|
||||
<data name="GPUCoreClockOffset" xml:space="preserve">
|
||||
<value>Augmentation de la fréquence de base</value>
|
||||
</data>
|
||||
<data name="GPUMemoryClockOffset" xml:space="preserve">
|
||||
<value>Augmentation de la fréquence de la mémoire</value>
|
||||
</data>
|
||||
<data name="GPUSettings" xml:space="preserve">
|
||||
<value>Paramêtres de GPU</value>
|
||||
</data>
|
||||
<data name="GPUTempTarget" xml:space="preserve">
|
||||
<value>Température ciblée</value>
|
||||
</data>
|
||||
<data name="LaptopBacklight" xml:space="preserve">
|
||||
<value>Rétroéclairage de l’ordinateur</value>
|
||||
</data>
|
||||
<data name="Lid" xml:space="preserve">
|
||||
<value>Capot</value>
|
||||
</data>
|
||||
<data name="Lightbar" xml:space="preserve">
|
||||
<value>Barre de lumière</value>
|
||||
</data>
|
||||
<data name="Logo" xml:space="preserve">
|
||||
<value>Logo</value>
|
||||
</data>
|
||||
<data name="OptimizedUSBC" xml:space="preserve">
|
||||
<value>Garder le GPU désactivé en chargement via USB-C dans le mode Optimisé</value>
|
||||
</data>
|
||||
<data name="RestartGPU" xml:space="preserve">
|
||||
<value>Un processus utilise le dGPU est empêche le passage en mode Économique. Redémarrer le dGPU dans le gestionnaire de périphérique ? * Veuillez procéder à vos risques</value>
|
||||
</data>
|
||||
<data name="ToggleMiniled" xml:space="preserve">
|
||||
<value>Basculer sur Miniled (si supporté)</value>
|
||||
</data>
|
||||
<data name="ToggleScreen" xml:space="preserve">
|
||||
<value>Basculer d’écran</value>
|
||||
</data>
|
||||
<data name="BacklightTimeout" xml:space="preserve">
|
||||
<value>Nombre de secondes avant d’éteindre le rétroéclairage sur batterie</value>
|
||||
<value>Maintenir la fenêtre au premier plan</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -154,7 +154,7 @@
|
||||
<value>Apply Power Limits</value>
|
||||
</data>
|
||||
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
|
||||
<value>Auto adjust Windows Power Mode</value>
|
||||
<value>Auto adjust Windows Power Modes</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>Breathe</value>
|
||||
@@ -453,9 +453,15 @@
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>Version</value>
|
||||
</data>
|
||||
<data name="VolumeDown" xml:space="preserve">
|
||||
<value>Volume Down</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>Volume Mute</value>
|
||||
</data>
|
||||
<data name="VolumeUp" xml:space="preserve">
|
||||
<value>Volume Up</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>Keep app window always on top</value>
|
||||
</data>
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
<value>Застосувати потужність</value>
|
||||
</data>
|
||||
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
|
||||
<value>Автоматично застосовувати Windows Power Mode</value>
|
||||
<value>Автоматично застосовувати Windows Power Modes</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>Дихання</value>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
@@ -59,401 +59,404 @@
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ACPIError" xml:space="preserve">
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ACPIError" xml:space="preserve">
|
||||
<value>無法連結到華碩 ACPI。 没有它,應用程式將無法執行。 嘗試安裝Asus System Control Interface</value>
|
||||
</data>
|
||||
<data name="AlertDGPU" xml:space="preserve">
|
||||
<data name="AlertDGPU" xml:space="preserve">
|
||||
<value>看起来 GPU 正在大量使用,是否禁用它?</value>
|
||||
</data>
|
||||
<data name="AlertDGPUTitle" xml:space="preserve">
|
||||
<data name="AlertDGPUTitle" xml:space="preserve">
|
||||
<value>節能模式</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<value>關閉獨顯需要重新啟動</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOn" xml:space="preserve">
|
||||
<data name="AlertUltimateOn" xml:space="preserve">
|
||||
<value>獨顯直連需要重啟</value>
|
||||
</data>
|
||||
<data name="AlertUltimateTitle" xml:space="preserve">
|
||||
<data name="AlertUltimateTitle" xml:space="preserve">
|
||||
<value>現在重新啟動嗎?</value>
|
||||
</data>
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<value>動畫速度</value>
|
||||
</data>
|
||||
<data name="AnimeMatrix" xml:space="preserve">
|
||||
<data name="AnimeMatrix" xml:space="preserve">
|
||||
<value>AnimeMatrix</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunning" xml:space="preserve">
|
||||
<data name="AppAlreadyRunning" xml:space="preserve">
|
||||
<value>程式已正在執行</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunningText" xml:space="preserve">
|
||||
<data name="AppAlreadyRunningText" xml:space="preserve">
|
||||
<value>G-Helper已經在執行。 請確認右下工作列中的圖示。</value>
|
||||
</data>
|
||||
<data name="ApplyFanCurve" xml:space="preserve">
|
||||
<data name="ApplyFanCurve" xml:space="preserve">
|
||||
<value>套用自定義風扇曲線</value>
|
||||
</data>
|
||||
<data name="ApplyPowerLimits" xml:space="preserve">
|
||||
<data name="ApplyPowerLimits" xml:space="preserve">
|
||||
<value>套用功率限制</value>
|
||||
</data>
|
||||
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
|
||||
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
|
||||
<value>自動調整Windows電源模式</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>呼吸</value>
|
||||
</data>
|
||||
<data name="AuraColorCycle" xml:space="preserve">
|
||||
<data name="AuraColorCycle" xml:space="preserve">
|
||||
<value>循環</value>
|
||||
</data>
|
||||
<data name="AuraFast" xml:space="preserve">
|
||||
<data name="AuraFast" xml:space="preserve">
|
||||
<value>快速</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>正常</value>
|
||||
</data>
|
||||
<data name="AuraRainbow" xml:space="preserve">
|
||||
<data name="AuraRainbow" xml:space="preserve">
|
||||
<value>彩虹</value>
|
||||
</data>
|
||||
<data name="AuraSlow" xml:space="preserve">
|
||||
<data name="AuraSlow" xml:space="preserve">
|
||||
<value>慢</value>
|
||||
</data>
|
||||
<data name="AuraStatic" xml:space="preserve">
|
||||
<data name="AuraStatic" xml:space="preserve">
|
||||
<value>靜態</value>
|
||||
</data>
|
||||
<data name="AuraStrobe" xml:space="preserve">
|
||||
<data name="AuraStrobe" xml:space="preserve">
|
||||
<value>閃爍</value>
|
||||
</data>
|
||||
<data name="AutoMode" xml:space="preserve">
|
||||
<data name="AutoMode" xml:space="preserve">
|
||||
<value>自動</value>
|
||||
</data>
|
||||
<data name="AutoRefreshTooltip" xml:space="preserve">
|
||||
<data name="AutoRefreshTooltip" xml:space="preserve">
|
||||
<value>電池模式時自動60Hz</value>
|
||||
</data>
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>喚醒時</value>
|
||||
</data>
|
||||
<data name="BacklightTimeout" xml:space="preserve">
|
||||
<data name="BacklightTimeout" xml:space="preserve">
|
||||
<value>電池模式下自動關閉背光的秒數</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>平衡模式</value>
|
||||
</data>
|
||||
<data name="BatteryChargeLimit" xml:space="preserve">
|
||||
<data name="BatteryChargeLimit" xml:space="preserve">
|
||||
<value>電池充電上限</value>
|
||||
</data>
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>開機時</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>亮度</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>顏色</value>
|
||||
</data>
|
||||
<data name="CPUBoost" xml:space="preserve">
|
||||
<data name="CPUBoost" xml:space="preserve">
|
||||
<value>CPU 加速</value>
|
||||
</data>
|
||||
<data name="Custom" xml:space="preserve">
|
||||
<data name="Custom" xml:space="preserve">
|
||||
<value>自定義設置</value>
|
||||
</data>
|
||||
<data name="Default" xml:space="preserve">
|
||||
<data name="Default" xml:space="preserve">
|
||||
<value>預設</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>禁用螢幕加速OD</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>正在釋放電力</value>
|
||||
</data>
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<value>下載更新</value>
|
||||
</data>
|
||||
<data name="EcoGPUTooltip" xml:space="preserve">
|
||||
<data name="EcoGPUTooltip" xml:space="preserve">
|
||||
<value>禁用獨顯以節省電池電量</value>
|
||||
</data>
|
||||
<data name="EcoMode" xml:space="preserve">
|
||||
<data name="EcoMode" xml:space="preserve">
|
||||
<value>節能模式</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>更多</value>
|
||||
</data>
|
||||
<data name="ExtraSettings" xml:space="preserve">
|
||||
<data name="ExtraSettings" xml:space="preserve">
|
||||
<value>更多設定</value>
|
||||
</data>
|
||||
<data name="FactoryDefaults" xml:space="preserve">
|
||||
<data name="FactoryDefaults" xml:space="preserve">
|
||||
<value>恢復原廠設定</value>
|
||||
</data>
|
||||
<data name="FanCurves" xml:space="preserve">
|
||||
<data name="FanCurves" xml:space="preserve">
|
||||
<value>風扇曲線</value>
|
||||
</data>
|
||||
<data name="FanProfileCPU" xml:space="preserve">
|
||||
<data name="FanProfileCPU" xml:space="preserve">
|
||||
<value>CPU 風扇設置文件</value>
|
||||
</data>
|
||||
<data name="FanProfileGPU" xml:space="preserve">
|
||||
<data name="FanProfileGPU" xml:space="preserve">
|
||||
<value>GPU 風扇設置文件</value>
|
||||
</data>
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<value>中等風扇設置</value>
|
||||
</data>
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<value>風扇設置</value>
|
||||
</data>
|
||||
<data name="FansAndPower" xml:space="preserve">
|
||||
<data name="FansAndPower" xml:space="preserve">
|
||||
<value>風扇和電源</value>
|
||||
</data>
|
||||
<data name="FanSpeed" xml:space="preserve">
|
||||
<data name="FanSpeed" xml:space="preserve">
|
||||
<value> 風扇: </value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>自定義設置</value>
|
||||
</data>
|
||||
<data name="GPUBoost" xml:space="preserve">
|
||||
<data name="GPUBoost" xml:space="preserve">
|
||||
<value>Dynamic Boost</value>
|
||||
</data>
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<value>切換中...</value>
|
||||
</data>
|
||||
<data name="GPUCoreClockOffset" xml:space="preserve">
|
||||
<data name="GPUCoreClockOffset" xml:space="preserve">
|
||||
<value>核心時脈偏移量(Offset)</value>
|
||||
</data>
|
||||
<data name="GPUMemoryClockOffset" xml:space="preserve">
|
||||
<data name="GPUMemoryClockOffset" xml:space="preserve">
|
||||
<value>顯示卡記憶體偏移量(Offset)</value>
|
||||
</data>
|
||||
<data name="GPUMode" xml:space="preserve">
|
||||
<data name="GPUMode" xml:space="preserve">
|
||||
<value>GPU 模式</value>
|
||||
</data>
|
||||
<data name="GPUModeEco" xml:space="preserve">
|
||||
<data name="GPUModeEco" xml:space="preserve">
|
||||
<value>僅限內顯</value>
|
||||
</data>
|
||||
<data name="GPUModeStandard" xml:space="preserve">
|
||||
<data name="GPUModeStandard" xml:space="preserve">
|
||||
<value>內顯 + 獨顯</value>
|
||||
</data>
|
||||
<data name="GPUModeUltimate" xml:space="preserve">
|
||||
<data name="GPUModeUltimate" xml:space="preserve">
|
||||
<value>獨立顯卡</value>
|
||||
</data>
|
||||
<data name="GPUSettings" xml:space="preserve">
|
||||
<data name="GPUSettings" xml:space="preserve">
|
||||
<value>顯卡設定</value>
|
||||
</data>
|
||||
<data name="GPUTempTarget" xml:space="preserve">
|
||||
<data name="GPUTempTarget" xml:space="preserve">
|
||||
<value>GPU溫度上限</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>按鍵綁定</value>
|
||||
</data>
|
||||
<data name="Keyboard" xml:space="preserve">
|
||||
<data name="Keyboard" xml:space="preserve">
|
||||
<value>鍵盤</value>
|
||||
</data>
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>電池模式時自動降低鍵盤背光亮度以省電</value>
|
||||
</data>
|
||||
<data name="LaptopBacklight" xml:space="preserve">
|
||||
<data name="LaptopBacklight" xml:space="preserve">
|
||||
<value>背光</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>鍵盤背光:</value>
|
||||
</data>
|
||||
<data name="LaptopScreen" xml:space="preserve">
|
||||
<data name="LaptopScreen" xml:space="preserve">
|
||||
<value>螢幕顯示</value>
|
||||
</data>
|
||||
<data name="Lid" xml:space="preserve">
|
||||
<data name="Lid" xml:space="preserve">
|
||||
<value>螢幕背蓋</value>
|
||||
</data>
|
||||
<data name="Lightbar" xml:space="preserve">
|
||||
<data name="Lightbar" xml:space="preserve">
|
||||
<value>燈條</value>
|
||||
</data>
|
||||
<data name="Logo" xml:space="preserve">
|
||||
<data name="Logo" xml:space="preserve">
|
||||
<value>Logo</value>
|
||||
</data>
|
||||
<data name="MatrixAudio" xml:space="preserve">
|
||||
<data name="MatrixAudio" xml:space="preserve">
|
||||
<value>Audio Visualizer</value>
|
||||
</data>
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<value>横幅</value>
|
||||
</data>
|
||||
<data name="MatrixBright" xml:space="preserve">
|
||||
<data name="MatrixBright" xml:space="preserve">
|
||||
<value>明亮</value>
|
||||
</data>
|
||||
<data name="MatrixClock" xml:space="preserve">
|
||||
<data name="MatrixClock" xml:space="preserve">
|
||||
<value>時鐘</value>
|
||||
</data>
|
||||
<data name="MatrixDim" xml:space="preserve">
|
||||
<data name="MatrixDim" xml:space="preserve">
|
||||
<value>黯淡</value>
|
||||
</data>
|
||||
<data name="MatrixLogo" xml:space="preserve">
|
||||
<data name="MatrixLogo" xml:space="preserve">
|
||||
<value>ROG logo</value>
|
||||
</data>
|
||||
<data name="MatrixMedium" xml:space="preserve">
|
||||
<data name="MatrixMedium" xml:space="preserve">
|
||||
<value>中</value>
|
||||
</data>
|
||||
<data name="MatrixOff" xml:space="preserve">
|
||||
<data name="MatrixOff" xml:space="preserve">
|
||||
<value>關閉</value>
|
||||
</data>
|
||||
<data name="MatrixPicture" xml:space="preserve">
|
||||
<data name="MatrixPicture" xml:space="preserve">
|
||||
<value>圖片</value>
|
||||
</data>
|
||||
<data name="MaxRefreshTooltip" xml:space="preserve">
|
||||
<data name="MaxRefreshTooltip" xml:space="preserve">
|
||||
<value>更高的更新率和更低延遲</value>
|
||||
</data>
|
||||
<data name="MinRefreshTooltip" xml:space="preserve">
|
||||
<data name="MinRefreshTooltip" xml:space="preserve">
|
||||
<value>維持60Hz以節省電量</value>
|
||||
</data>
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>多區域</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>打開G-Helper視窗</value>
|
||||
<data name="MuteMic" xml:space="preserve">
|
||||
<value>麥克風開關</value>
|
||||
</data>
|
||||
<data name="Optimized" xml:space="preserve">
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>開啟G-Helper視窗</value>
|
||||
</data>
|
||||
<data name="Optimized" xml:space="preserve">
|
||||
<value>自動模式</value>
|
||||
</data>
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>使用電池切換到節能模式,插入電源時切換到標準模式</value>
|
||||
</data>
|
||||
<data name="OptimizedUSBC" xml:space="preserve">
|
||||
<data name="OptimizedUSBC" xml:space="preserve">
|
||||
<value>自動模式下,使用USB-C充電時持續關閉獨顯</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>其他</value>
|
||||
</data>
|
||||
<data name="Overdrive" xml:space="preserve">
|
||||
<data name="Overdrive" xml:space="preserve">
|
||||
<value>OD</value>
|
||||
</data>
|
||||
<data name="PerformanceMode" xml:space="preserve">
|
||||
<data name="PerformanceMode" xml:space="preserve">
|
||||
<value>性能模式:</value>
|
||||
</data>
|
||||
<data name="PictureGif" xml:space="preserve">
|
||||
<data name="PictureGif" xml:space="preserve">
|
||||
<value>圖片/動圖</value>
|
||||
</data>
|
||||
<data name="PlayPause" xml:space="preserve">
|
||||
<data name="PlayPause" xml:space="preserve">
|
||||
<value>播放/暫停</value>
|
||||
</data>
|
||||
<data name="PowerLimits" xml:space="preserve">
|
||||
<data name="PowerLimits" xml:space="preserve">
|
||||
<value>功率限制 (PPT)</value>
|
||||
</data>
|
||||
<data name="PPTExperimental" xml:space="preserve">
|
||||
<data name="PPTExperimental" xml:space="preserve">
|
||||
<value>功率限制 (PPT) 是實驗性功能。 謹慎使用,風險自負!</value>
|
||||
</data>
|
||||
<data name="PrintScreen" xml:space="preserve">
|
||||
<data name="PrintScreen" xml:space="preserve">
|
||||
<value>截圖</value>
|
||||
</data>
|
||||
<data name="Quit" xml:space="preserve">
|
||||
<data name="Quit" xml:space="preserve">
|
||||
<value>退出</value>
|
||||
</data>
|
||||
<data name="RestartGPU" xml:space="preserve">
|
||||
<data name="RestartGPU" xml:space="preserve">
|
||||
<value>有其他程式正在使用獨顯導致無法切換至節能模式. 是否在裝置管理員中重啟獨顯? * 請自行評估風險</value>
|
||||
</data>
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<value>每分鐘轉數</value>
|
||||
</data>
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<value>開機自動開啟</value>
|
||||
</data>
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<value>關機時</value>
|
||||
</data>
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<value>安靜模式</value>
|
||||
</data>
|
||||
<data name="Sleep" xml:space="preserve">
|
||||
<data name="Sleep" xml:space="preserve">
|
||||
<value>睡眠時</value>
|
||||
</data>
|
||||
<data name="StandardGPUTooltip" xml:space="preserve">
|
||||
<data name="StandardGPUTooltip" xml:space="preserve">
|
||||
<value>標準模式會啟用獨顯</value>
|
||||
</data>
|
||||
<data name="StandardMode" xml:space="preserve">
|
||||
<data name="StandardMode" xml:space="preserve">
|
||||
<value>標準模式</value>
|
||||
</data>
|
||||
<data name="StartupError" xml:space="preserve">
|
||||
<data name="StartupError" xml:space="preserve">
|
||||
<value>啟動錯誤</value>
|
||||
</data>
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>切換Aura</value>
|
||||
</data>
|
||||
<data name="ToggleMiniled" xml:space="preserve">
|
||||
<data name="ToggleMiniled" xml:space="preserve">
|
||||
<value>切換Miniled(若有支援)</value>
|
||||
</data>
|
||||
<data name="ToggleScreen" xml:space="preserve">
|
||||
<data name="ToggleScreen" xml:space="preserve">
|
||||
<value>切換螢幕</value>
|
||||
</data>
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<value>極速模式</value>
|
||||
</data>
|
||||
<data name="TurnedOff" xml:space="preserve">
|
||||
<data name="TurnedOff" xml:space="preserve">
|
||||
<value>已關閉</value>
|
||||
</data>
|
||||
<data name="TurnOffOnBattery" xml:space="preserve">
|
||||
<data name="TurnOffOnBattery" xml:space="preserve">
|
||||
<value>電池模式時關閉</value>
|
||||
</data>
|
||||
<data name="UltimateGPUTooltip" xml:space="preserve">
|
||||
<data name="UltimateGPUTooltip" xml:space="preserve">
|
||||
<value>開啟獨顯直連獲得最佳幀數</value>
|
||||
</data>
|
||||
<data name="UltimateMode" xml:space="preserve">
|
||||
<data name="UltimateMode" xml:space="preserve">
|
||||
<value>獨顯直連</value>
|
||||
</data>
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>版本</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>靜音</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>視窗置頂</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -34,12 +34,13 @@
|
||||
}
|
||||
}
|
||||
|
||||
public static void Adjust(int delta)
|
||||
public static int Adjust(int delta)
|
||||
{
|
||||
int brightness = Get();
|
||||
Debug.WriteLine(brightness);
|
||||
brightness = Math.Min(100, Math.Max(0, brightness + delta));
|
||||
Set(brightness);
|
||||
return brightness;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
309
app/Settings.cs
309
app/Settings.cs
@@ -6,7 +6,6 @@ using System.Net;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
using System.Timers;
|
||||
using System.Windows.Forms;
|
||||
using Tools;
|
||||
|
||||
namespace GHelper
|
||||
@@ -94,8 +93,6 @@ namespace GHelper
|
||||
comboMatrix.DropDownClosed += ComboMatrix_SelectedValueChanged;
|
||||
comboMatrixRunning.DropDownClosed += ComboMatrixRunning_SelectedValueChanged;
|
||||
|
||||
checkMatrix.CheckedChanged += CheckMatrix_CheckedChanged; ;
|
||||
|
||||
buttonMatrix.Click += ButtonMatrix_Click;
|
||||
|
||||
checkStartup.CheckedChanged += CheckStartup_CheckedChanged;
|
||||
@@ -115,6 +112,9 @@ namespace GHelper
|
||||
buttonUltimate.MouseMove += ButtonUltimate_MouseHover;
|
||||
buttonUltimate.MouseLeave += ButtonGPU_MouseLeave;
|
||||
|
||||
tableGPU.MouseMove += ButtonXGM_MouseMove;
|
||||
tableGPU.MouseLeave += ButtonGPU_MouseLeave;
|
||||
|
||||
buttonXGM.Click += ButtonXGM_Click;
|
||||
|
||||
buttonScreenAuto.MouseMove += ButtonScreenAuto_MouseHover;
|
||||
@@ -135,13 +135,13 @@ namespace GHelper
|
||||
|
||||
SetVersionLabel(Properties.Strings.VersionLabel + ": " + Assembly.GetExecutingAssembly().GetName().Version);
|
||||
|
||||
string model = Program.config.GetModel();
|
||||
string model = AppConfig.GetModel();
|
||||
int trim = model.LastIndexOf("_");
|
||||
if (trim > 0) model = model.Substring(0, trim);
|
||||
|
||||
labelModel.Text = model + (Program.IsUserAdministrator() ? "." : "");
|
||||
|
||||
TopMost = Program.config.getConfig("topmost") == 1;
|
||||
TopMost = AppConfig.getConfig("topmost") == 1;
|
||||
|
||||
SetContextMenu();
|
||||
|
||||
@@ -266,19 +266,45 @@ namespace GHelper
|
||||
|
||||
private void ButtonXGM_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (Program.acpi.DeviceGet(AsusACPI.GPUXG) == 1)
|
||||
{
|
||||
Program.acpi.DeviceSet(AsusACPI.GPUXG, 0, "GPU XGM");
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.acpi.DeviceSet(AsusACPI.GPUXG, 1, "GPU XGM");
|
||||
|
||||
if (Program.config.getConfigPerf("auto_apply") == 1)
|
||||
AsusUSB.SetXGMFan(Program.config.getFanConfig(AsusFan.XGM));
|
||||
}
|
||||
|
||||
InitXGM();
|
||||
Task.Run(async () =>
|
||||
{
|
||||
BeginInvoke(delegate
|
||||
{
|
||||
ButtonEnabled(buttonOptimized, false);
|
||||
ButtonEnabled(buttonEco, false);
|
||||
ButtonEnabled(buttonStandard, false);
|
||||
ButtonEnabled(buttonUltimate, false);
|
||||
ButtonEnabled(buttonXGM, false);
|
||||
});
|
||||
|
||||
if (Program.acpi.DeviceGet(AsusACPI.GPUXG) == 1)
|
||||
{
|
||||
KillGPUApps();
|
||||
DialogResult dialogResult = MessageBox.Show("Did you close all applications running on XG Mobile?", "Disabling XG Mobile", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
Program.acpi.DeviceSet(AsusACPI.GPUXG, 0, "GPU XGM");
|
||||
await Task.Delay(TimeSpan.FromSeconds(15));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.acpi.DeviceSet(AsusACPI.GPUXG, 1, "GPU XGM");
|
||||
await Task.Delay(TimeSpan.FromSeconds(15));
|
||||
|
||||
if (AppConfig.getConfigPerf("auto_apply") == 1)
|
||||
AsusUSB.SetXGMFan(AppConfig.getFanConfig(AsusFan.XGM));
|
||||
}
|
||||
|
||||
BeginInvoke(delegate
|
||||
{
|
||||
InitGPUMode();
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void SliderBattery_ValueChanged(object? sender, EventArgs e)
|
||||
@@ -308,13 +334,13 @@ namespace GHelper
|
||||
if (gitVersion.CompareTo(appVersion) > 0)
|
||||
{
|
||||
SetVersionLabel(Properties.Strings.DownloadUpdate + ": " + tag, url);
|
||||
if (Program.config.getConfigString("skip_version") != tag)
|
||||
if (AppConfig.getConfigString("skip_version") != tag)
|
||||
{
|
||||
DialogResult dialogResult = MessageBox.Show(Properties.Strings.DownloadUpdate + ": G-Helper " + tag + "?", "Update", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
AutoUpdate(url);
|
||||
else
|
||||
Program.config.setConfig("skip_version", tag);
|
||||
AppConfig.setConfig("skip_version", tag);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -440,17 +466,29 @@ namespace GHelper
|
||||
labelTipGPU.Text = "";
|
||||
}
|
||||
|
||||
private void ButtonXGM_MouseMove(object? sender, MouseEventArgs e)
|
||||
{
|
||||
if (sender is null) return;
|
||||
TableLayoutPanel table = (TableLayoutPanel)sender;
|
||||
|
||||
if (!buttonXGM.Visible) return;
|
||||
|
||||
labelTipGPU.Text = buttonXGM.Bounds.Contains(table.PointToClient(Cursor.Position)) ?
|
||||
"XGMobile toggle works only in Standard mode" : "";
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void ButtonOptimized_Click(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("gpu_auto", (Program.config.getConfig("gpu_auto") == 1) ? 0 : 1);
|
||||
AppConfig.setConfig("gpu_auto", (AppConfig.getConfig("gpu_auto") == 1) ? 0 : 1);
|
||||
VisualiseGPUMode();
|
||||
AutoGPUMode();
|
||||
}
|
||||
|
||||
private void ButtonScreenAuto_Click(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("screen_auto", 1);
|
||||
AppConfig.setConfig("screen_auto", 1);
|
||||
InitScreen();
|
||||
AutoScreen();
|
||||
}
|
||||
@@ -468,7 +506,8 @@ namespace GHelper
|
||||
{
|
||||
case 0:
|
||||
Logger.WriteLine("Monitor Power Off");
|
||||
SetBatteryChargeLimit(Program.config.getConfig("charge_limit"));
|
||||
AsusUSB.ApplyBrightness(0);
|
||||
SetBatteryChargeLimit(AppConfig.getConfig("charge_limit"));
|
||||
break;
|
||||
case 1:
|
||||
Logger.WriteLine("Monitor Power On");
|
||||
@@ -481,8 +520,24 @@ namespace GHelper
|
||||
}
|
||||
m.Result = (IntPtr)1;
|
||||
break;
|
||||
|
||||
case KeyHandler.WM_HOTKEY_MSG_ID:
|
||||
CyclePerformanceMode();
|
||||
|
||||
Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF);
|
||||
|
||||
switch (key)
|
||||
{
|
||||
case Keys.VolumeDown:
|
||||
InputDispatcher.KeyProcess("m1");
|
||||
break;
|
||||
case Keys.VolumeUp:
|
||||
InputDispatcher.KeyProcess("m2");
|
||||
break;
|
||||
default:
|
||||
if (key == InputDispatcher.keyProfile) CyclePerformanceMode();
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
base.WndProc(ref m);
|
||||
@@ -511,7 +566,7 @@ namespace GHelper
|
||||
{
|
||||
if (sender is null) return;
|
||||
CheckBox check = (CheckBox)sender;
|
||||
Program.config.setConfig("matrix_auto", check.Checked ? 1 : 0);
|
||||
AppConfig.setConfig("matrix_auto", check.Checked ? 1 : 0);
|
||||
matrix?.SetMatrix();
|
||||
}
|
||||
|
||||
@@ -538,8 +593,8 @@ namespace GHelper
|
||||
|
||||
if (fileName is not null)
|
||||
{
|
||||
Program.config.setConfig("matrix_picture", fileName);
|
||||
Program.config.setConfig("matrix_running", 2);
|
||||
AppConfig.setConfig("matrix_picture", fileName);
|
||||
AppConfig.setConfig("matrix_running", 2);
|
||||
|
||||
matrix?.SetMatrixPicture(fileName);
|
||||
BeginInvoke(delegate
|
||||
@@ -553,21 +608,21 @@ namespace GHelper
|
||||
|
||||
private void ComboMatrixRunning_SelectedValueChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("matrix_running", comboMatrixRunning.SelectedIndex);
|
||||
AppConfig.setConfig("matrix_running", comboMatrixRunning.SelectedIndex);
|
||||
matrix?.SetMatrix();
|
||||
}
|
||||
|
||||
|
||||
private void ComboMatrix_SelectedValueChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("matrix_brightness", comboMatrix.SelectedIndex);
|
||||
AppConfig.setConfig("matrix_brightness", comboMatrix.SelectedIndex);
|
||||
matrix?.SetMatrix();
|
||||
}
|
||||
|
||||
|
||||
private void LabelCPUFan_Click(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("fan_rpm", (Program.config.getConfig("fan_rpm") == 1) ? 0 : 1);
|
||||
AppConfig.setConfig("fan_rpm", (AppConfig.getConfig("fan_rpm") == 1) ? 0 : 1);
|
||||
RefreshSensors(true);
|
||||
}
|
||||
|
||||
@@ -580,7 +635,7 @@ namespace GHelper
|
||||
|
||||
if (colorDlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
Program.config.setConfig("aura_color2", colorDlg.Color.ToArgb());
|
||||
AppConfig.setConfig("aura_color2", colorDlg.Color.ToArgb());
|
||||
SetAura();
|
||||
}
|
||||
}
|
||||
@@ -616,6 +671,7 @@ namespace GHelper
|
||||
}
|
||||
else
|
||||
{
|
||||
fans.FormPosition();
|
||||
fans.Show();
|
||||
}
|
||||
|
||||
@@ -635,17 +691,17 @@ namespace GHelper
|
||||
|
||||
if (colorDlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
Program.config.setConfig("aura_color", colorDlg.Color.ToArgb());
|
||||
AppConfig.setConfig("aura_color", colorDlg.Color.ToArgb());
|
||||
SetAura();
|
||||
}
|
||||
}
|
||||
|
||||
public void InitAura()
|
||||
{
|
||||
AsusUSB.Mode = Program.config.getConfig("aura_mode");
|
||||
AsusUSB.Speed = Program.config.getConfig("aura_speed");
|
||||
AsusUSB.SetColor(Program.config.getConfig("aura_color"));
|
||||
AsusUSB.SetColor2(Program.config.getConfig("aura_color2"));
|
||||
AsusUSB.Mode = AppConfig.getConfig("aura_mode");
|
||||
AsusUSB.Speed = AppConfig.getConfig("aura_speed");
|
||||
AsusUSB.SetColor(AppConfig.getConfig("aura_color"));
|
||||
AsusUSB.SetColor2(AppConfig.getConfig("aura_color2"));
|
||||
|
||||
comboKeyboard.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboKeyboard.DataSource = new BindingSource(AsusUSB.GetModes(), null);
|
||||
@@ -664,30 +720,30 @@ namespace GHelper
|
||||
|
||||
matrix = new AniMatrix();
|
||||
|
||||
if (!AniMatrix.IsValid)
|
||||
if (!matrix.IsValid)
|
||||
{
|
||||
panelMatrix.Visible = false;
|
||||
return;
|
||||
}
|
||||
|
||||
int brightness = Program.config.getConfig("matrix_brightness");
|
||||
int running = Program.config.getConfig("matrix_running");
|
||||
int brightness = AppConfig.getConfig("matrix_brightness");
|
||||
int running = AppConfig.getConfig("matrix_running");
|
||||
|
||||
comboMatrix.SelectedIndex = (brightness != -1) ? Math.Min(brightness, comboMatrix.Items.Count - 1) : 0;
|
||||
comboMatrixRunning.SelectedIndex = (running != -1) ? Math.Min(running, comboMatrixRunning.Items.Count - 1) : 0;
|
||||
|
||||
checkMatrix.Checked = (Program.config.getConfig("matrix_auto") == 1);
|
||||
|
||||
checkMatrix.Checked = (AppConfig.getConfig("matrix_auto") == 1);
|
||||
checkMatrix.CheckedChanged += CheckMatrix_CheckedChanged;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void SetAura()
|
||||
{
|
||||
AsusUSB.Mode = Program.config.getConfig("aura_mode");
|
||||
AsusUSB.Speed = Program.config.getConfig("aura_speed");
|
||||
AsusUSB.SetColor(Program.config.getConfig("aura_color"));
|
||||
AsusUSB.SetColor2(Program.config.getConfig("aura_color2"));
|
||||
AsusUSB.Mode = AppConfig.getConfig("aura_mode");
|
||||
AsusUSB.Speed = AppConfig.getConfig("aura_speed");
|
||||
AsusUSB.SetColor(AppConfig.getConfig("aura_color"));
|
||||
AsusUSB.SetColor2(AppConfig.getConfig("aura_color2"));
|
||||
|
||||
pictureColor.BackColor = AsusUSB.Color1;
|
||||
pictureColor2.BackColor = AsusUSB.Color2;
|
||||
@@ -707,27 +763,27 @@ namespace GHelper
|
||||
|
||||
private void ComboKeyboard_SelectedValueChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("aura_mode", (int)comboKeyboard.SelectedValue);
|
||||
AppConfig.setConfig("aura_mode", (int)comboKeyboard.SelectedValue);
|
||||
SetAura();
|
||||
}
|
||||
|
||||
|
||||
private void Button120Hz_Click(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("screen_auto", 0);
|
||||
AppConfig.setConfig("screen_auto", 0);
|
||||
SetScreen(1000, 1);
|
||||
}
|
||||
|
||||
private void Button60Hz_Click(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("screen_auto", 0);
|
||||
AppConfig.setConfig("screen_auto", 0);
|
||||
SetScreen(60, 0);
|
||||
}
|
||||
|
||||
public void ToogleMiniled()
|
||||
{
|
||||
int miniled = (Program.config.getConfig("miniled") == 1) ? 0 : 1;
|
||||
Program.config.setConfig("miniled", miniled);
|
||||
int miniled = (AppConfig.getConfig("miniled") == 1) ? 0 : 1;
|
||||
AppConfig.setConfig("miniled", miniled);
|
||||
SetScreen(-1, -1, miniled);
|
||||
}
|
||||
|
||||
@@ -757,7 +813,7 @@ namespace GHelper
|
||||
|
||||
if (overdrive >= 0)
|
||||
{
|
||||
if (Program.config.getConfig("no_overdrive") == 1) overdrive = 0;
|
||||
if (AppConfig.getConfig("no_overdrive") == 1) overdrive = 0;
|
||||
Program.acpi.DeviceSet(AsusACPI.ScreenOverdrive, overdrive, "ScreenOverdrive");
|
||||
|
||||
}
|
||||
@@ -777,8 +833,8 @@ namespace GHelper
|
||||
int frequency = NativeMethods.GetRefreshRate();
|
||||
int maxFrequency = NativeMethods.GetRefreshRate(true);
|
||||
|
||||
bool screenAuto = (Program.config.getConfig("screen_auto") == 1);
|
||||
bool overdriveSetting = (Program.config.getConfig("no_overdrive") != 1);
|
||||
bool screenAuto = (AppConfig.getConfig("screen_auto") == 1);
|
||||
bool overdriveSetting = (AppConfig.getConfig("no_overdrive") != 1);
|
||||
|
||||
int overdrive = Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive);
|
||||
int miniled = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled);
|
||||
@@ -824,19 +880,20 @@ namespace GHelper
|
||||
if (miniled >= 0)
|
||||
{
|
||||
buttonMiniled.Activated = (miniled == 1);
|
||||
Program.config.setConfig("miniled", miniled);
|
||||
AppConfig.setConfig("miniled", miniled);
|
||||
}
|
||||
else
|
||||
{
|
||||
buttonMiniled.Visible = false;
|
||||
}
|
||||
|
||||
Program.config.setConfig("frequency", frequency);
|
||||
Program.config.setConfig("overdrive", overdrive);
|
||||
AppConfig.setConfig("frequency", frequency);
|
||||
AppConfig.setConfig("overdrive", overdrive);
|
||||
}
|
||||
|
||||
private void ButtonQuit_Click(object? sender, EventArgs e)
|
||||
{
|
||||
matrix.Dispose();
|
||||
Close();
|
||||
Program.trayIcon.Visible = false;
|
||||
Application.Exit();
|
||||
@@ -937,8 +994,8 @@ namespace GHelper
|
||||
public void SetPower()
|
||||
{
|
||||
|
||||
int limit_total = Program.config.getConfigPerf("limit_total");
|
||||
int limit_cpu = Program.config.getConfigPerf("limit_cpu");
|
||||
int limit_total = AppConfig.getConfigPerf("limit_total");
|
||||
int limit_cpu = AppConfig.getConfigPerf("limit_cpu");
|
||||
|
||||
if (limit_total > AsusACPI.MaxTotal) return;
|
||||
if (limit_total < AsusACPI.MinTotal) return;
|
||||
@@ -967,8 +1024,8 @@ namespace GHelper
|
||||
public void SetGPUClocks(bool launchAsAdmin = true)
|
||||
{
|
||||
|
||||
int gpu_core = Program.config.getConfigPerf("gpu_core");
|
||||
int gpu_memory = Program.config.getConfigPerf("gpu_memory");
|
||||
int gpu_core = AppConfig.getConfigPerf("gpu_core");
|
||||
int gpu_memory = AppConfig.getConfigPerf("gpu_memory");
|
||||
|
||||
if (gpu_core == -1 && gpu_memory == -1) return;
|
||||
|
||||
@@ -1000,8 +1057,8 @@ namespace GHelper
|
||||
public void SetGPUPower()
|
||||
{
|
||||
|
||||
int gpu_boost = Program.config.getConfigPerf("gpu_boost");
|
||||
int gpu_temp = Program.config.getConfigPerf("gpu_temp");
|
||||
int gpu_boost = AppConfig.getConfigPerf("gpu_boost");
|
||||
int gpu_temp = AppConfig.getConfigPerf("gpu_temp");
|
||||
|
||||
|
||||
if (gpu_boost < AsusACPI.MinGPUBoost || gpu_boost > AsusACPI.MaxGPUBoost) return;
|
||||
@@ -1030,21 +1087,21 @@ namespace GHelper
|
||||
{
|
||||
customFans = false;
|
||||
|
||||
if (Program.config.getConfigPerf("auto_apply") == 1 || force)
|
||||
if (AppConfig.getConfigPerf("auto_apply") == 1 || force)
|
||||
{
|
||||
int cpuResult = Program.acpi.SetFanCurve(AsusFan.CPU, Program.config.getFanConfig(AsusFan.CPU));
|
||||
int gpuResult = Program.acpi.SetFanCurve(AsusFan.GPU, Program.config.getFanConfig(AsusFan.GPU));
|
||||
int cpuResult = Program.acpi.SetFanCurve(AsusFan.CPU, AppConfig.getFanConfig(AsusFan.CPU));
|
||||
int gpuResult = Program.acpi.SetFanCurve(AsusFan.GPU, AppConfig.getFanConfig(AsusFan.GPU));
|
||||
|
||||
if (Program.config.isConfig("mid_fan"))
|
||||
Program.acpi.SetFanCurve(AsusFan.Mid, Program.config.getFanConfig(AsusFan.Mid));
|
||||
if (AppConfig.isConfig("mid_fan"))
|
||||
Program.acpi.SetFanCurve(AsusFan.Mid, AppConfig.getFanConfig(AsusFan.Mid));
|
||||
|
||||
if (Program.config.isConfig("xgm_fan") && Program.acpi.IsXGConnected())
|
||||
AsusUSB.SetXGMFan(Program.config.getFanConfig(AsusFan.XGM));
|
||||
if (AppConfig.isConfig("xgm_fan") && Program.acpi.IsXGConnected())
|
||||
AsusUSB.SetXGMFan(AppConfig.getFanConfig(AsusFan.XGM));
|
||||
|
||||
// something went wrong, resetting to default profile
|
||||
if (cpuResult != 1 || gpuResult != 1)
|
||||
{
|
||||
int mode = Program.config.getConfig("performance_mode");
|
||||
int mode = AppConfig.getConfig("performance_mode");
|
||||
Logger.WriteLine("ASUS BIOS rejected fan curve, resetting mode to " + mode);
|
||||
Program.acpi.DeviceSet(AsusACPI.PerformanceMode, mode, "PerformanceMode");
|
||||
LabelFansResult("ASUS BIOS rejected fan curve");
|
||||
@@ -1056,7 +1113,7 @@ namespace GHelper
|
||||
}
|
||||
|
||||
// fix for misbehaving bios on intell based TUF 2022
|
||||
if ((Program.config.ContainsModel("FX507") || Program.config.ContainsModel("FX517")) && Program.config.getConfigPerf("auto_apply_power") != 1)
|
||||
if ((AppConfig.ContainsModel("FX507") || AppConfig.ContainsModel("FX517")) && AppConfig.getConfigPerf("auto_apply_power") != 1)
|
||||
{
|
||||
Task.Run(async () =>
|
||||
{
|
||||
@@ -1076,7 +1133,7 @@ namespace GHelper
|
||||
{
|
||||
|
||||
// fix for misbehaving bios PPTs on G513
|
||||
if (Program.config.ContainsModel("G513") && Program.config.getConfigPerf("auto_apply") != 1)
|
||||
if (AppConfig.ContainsModel("G513") && AppConfig.getConfigPerf("auto_apply") != 1)
|
||||
{
|
||||
AutoFans(true);
|
||||
delay = 500;
|
||||
@@ -1084,7 +1141,7 @@ namespace GHelper
|
||||
|
||||
customPower = 0;
|
||||
|
||||
bool applyPower = Program.config.getConfigPerf("auto_apply_power") == 1;
|
||||
bool applyPower = AppConfig.getConfigPerf("auto_apply_power") == 1;
|
||||
bool applyGPU = true;
|
||||
|
||||
if (delay > 0)
|
||||
@@ -1112,7 +1169,7 @@ namespace GHelper
|
||||
{
|
||||
|
||||
if (PerformanceMode < 0)
|
||||
PerformanceMode = Program.config.getConfig("performance_mode");
|
||||
PerformanceMode = AppConfig.getConfig("performance_mode");
|
||||
|
||||
buttonSilent.Activated = false;
|
||||
buttonBalanced.Activated = false;
|
||||
@@ -1139,12 +1196,12 @@ namespace GHelper
|
||||
menuBalanced.Checked = buttonBalanced.Activated;
|
||||
menuTurbo.Checked = buttonTurbo.Activated;
|
||||
|
||||
int oldMode = Program.config.getConfig("performance_mode");
|
||||
Program.config.setConfig("performance_" + (int)SystemInformation.PowerStatus.PowerLineStatus, PerformanceMode);
|
||||
Program.config.setConfig("performance_mode", PerformanceMode);
|
||||
int oldMode = AppConfig.getConfig("performance_mode");
|
||||
AppConfig.setConfig("performance_" + (int)SystemInformation.PowerStatus.PowerLineStatus, PerformanceMode);
|
||||
AppConfig.setConfig("performance_mode", PerformanceMode);
|
||||
|
||||
Program.acpi.DeviceSet(AsusACPI.PerformanceMode, PerformanceMode, "PerformanceMode");
|
||||
if (Program.config.isConfig("xgm_fan") && Program.acpi.IsXGConnected()) AsusUSB.ResetXGM();
|
||||
if (AppConfig.isConfig("xgm_fan") && Program.acpi.IsXGConnected()) AsusUSB.ResetXGM();
|
||||
|
||||
if (notify && (oldMode != PerformanceMode))
|
||||
{
|
||||
@@ -1163,17 +1220,17 @@ namespace GHelper
|
||||
AutoFans();
|
||||
AutoPower(1000);
|
||||
|
||||
if (Program.config.getConfig("auto_apply_power_plan") != 0)
|
||||
if (AppConfig.getConfig("auto_apply_power_plan") != 0)
|
||||
{
|
||||
if (Program.config.getConfigPerfString("scheme") is not null)
|
||||
NativeMethods.SetPowerScheme(Program.config.getConfigPerfString("scheme"));
|
||||
if (AppConfig.getConfigPerfString("scheme") is not null)
|
||||
NativeMethods.SetPowerScheme(AppConfig.getConfigPerfString("scheme"));
|
||||
else
|
||||
NativeMethods.SetPowerScheme(PerformanceMode);
|
||||
}
|
||||
|
||||
if (Program.config.getConfigPerf("auto_boost") != -1)
|
||||
if (AppConfig.getConfigPerf("auto_boost") != -1)
|
||||
{
|
||||
NativeMethods.SetCPUBoost(Program.config.getConfigPerf("auto_boost"));
|
||||
NativeMethods.SetCPUBoost(AppConfig.getConfigPerf("auto_boost"));
|
||||
}
|
||||
|
||||
if (NativeMethods.PowerGetEffectiveOverlayScheme(out Guid activeScheme) == 0)
|
||||
@@ -1193,7 +1250,7 @@ namespace GHelper
|
||||
|
||||
public void CyclePerformanceMode()
|
||||
{
|
||||
int mode = Program.config.getConfig("performance_mode");
|
||||
int mode = AppConfig.getConfig("performance_mode");
|
||||
|
||||
if (Control.ModifierKeys == Keys.Shift)
|
||||
mode = (mode == 0) ? 2 : mode - 1;
|
||||
@@ -1206,13 +1263,14 @@ namespace GHelper
|
||||
|
||||
public void AutoKeyboard()
|
||||
{
|
||||
if (Program.config.getConfig("keyboard_auto") != 1) return;
|
||||
AsusUSB.Init();
|
||||
|
||||
if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online)
|
||||
AsusUSB.ApplyBrightness(3);
|
||||
else
|
||||
int backlight = AppConfig.getConfig("keyboard_brightness");
|
||||
|
||||
if (AppConfig.isConfig("keyboard_auto") && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online)
|
||||
AsusUSB.ApplyBrightness(0);
|
||||
|
||||
else if (backlight >= 0)
|
||||
AsusUSB.ApplyBrightness(backlight);
|
||||
|
||||
}
|
||||
|
||||
@@ -1220,17 +1278,17 @@ namespace GHelper
|
||||
{
|
||||
var Plugged = SystemInformation.PowerStatus.PowerLineStatus;
|
||||
|
||||
int mode = Program.config.getConfig("performance_" + (int)Plugged);
|
||||
int mode = AppConfig.getConfig("performance_" + (int)Plugged);
|
||||
if (mode != -1)
|
||||
SetPerformanceMode(mode, true);
|
||||
else
|
||||
SetPerformanceMode(Program.config.getConfig("performance_mode"));
|
||||
SetPerformanceMode(AppConfig.getConfig("performance_mode"));
|
||||
}
|
||||
|
||||
|
||||
public void AutoScreen(bool force = false)
|
||||
{
|
||||
if (force || Program.config.getConfig("screen_auto") == 1)
|
||||
if (force || AppConfig.getConfig("screen_auto") == 1)
|
||||
{
|
||||
if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online)
|
||||
SetScreen(1000, 1);
|
||||
@@ -1239,7 +1297,7 @@ namespace GHelper
|
||||
}
|
||||
else
|
||||
{
|
||||
SetScreen(overdrive: Program.config.getConfig("overdrive"));
|
||||
SetScreen(overdrive: AppConfig.getConfig("overdrive"));
|
||||
}
|
||||
|
||||
|
||||
@@ -1248,20 +1306,20 @@ namespace GHelper
|
||||
|
||||
public static bool IsPlugged()
|
||||
{
|
||||
bool optimizedUSBC = Program.config.getConfig("optimized_usbc") != 1;
|
||||
bool optimizedUSBC = AppConfig.getConfig("optimized_usbc") != 1;
|
||||
|
||||
return SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online &&
|
||||
(optimizedUSBC || Program.acpi.DeviceGet(AsusACPI.ChargerMode) != AsusACPI.ChargerUSB);
|
||||
(optimizedUSBC || Program.acpi.DeviceGet(AsusACPI.ChargerMode) < AsusACPI.ChargerUSB);
|
||||
|
||||
}
|
||||
|
||||
public bool AutoGPUMode()
|
||||
{
|
||||
|
||||
bool GpuAuto = Program.config.getConfig("gpu_auto") == 1;
|
||||
bool ForceGPU = Program.config.ContainsModel("503");
|
||||
bool GpuAuto = AppConfig.getConfig("gpu_auto") == 1;
|
||||
bool ForceGPU = AppConfig.ContainsModel("503");
|
||||
|
||||
int GpuMode = Program.config.getConfig("gpu_mode");
|
||||
int GpuMode = AppConfig.getConfig("gpu_mode");
|
||||
|
||||
if (!GpuAuto && !ForceGPU) return false;
|
||||
|
||||
@@ -1303,7 +1361,7 @@ namespace GHelper
|
||||
public bool ReEnableGPU()
|
||||
{
|
||||
|
||||
if (Program.config.getConfig("gpu_reenable") != 1) return false;
|
||||
if (AppConfig.getConfig("gpu_reenable") != 1) return false;
|
||||
if (Screen.AllScreens.Length <= 1) return false;
|
||||
|
||||
Logger.WriteLine("Re-enabling gpu for 503 model");
|
||||
@@ -1331,8 +1389,29 @@ namespace GHelper
|
||||
|
||||
public void InitXGM()
|
||||
{
|
||||
|
||||
buttonXGM.Enabled = buttonXGM.Visible = Program.acpi.IsXGConnected();
|
||||
buttonXGM.Activated = (Program.acpi.DeviceGet(AsusACPI.GPUXG) == 1);
|
||||
|
||||
int activated = Program.acpi.DeviceGet(AsusACPI.GPUXG);
|
||||
if (activated < 0) return;
|
||||
|
||||
buttonXGM.Activated = (activated == 1);
|
||||
|
||||
if (buttonXGM.Activated)
|
||||
{
|
||||
ButtonEnabled(buttonOptimized, false);
|
||||
ButtonEnabled(buttonEco, false);
|
||||
ButtonEnabled(buttonStandard, false);
|
||||
ButtonEnabled(buttonUltimate, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
ButtonEnabled(buttonOptimized, true);
|
||||
ButtonEnabled(buttonEco, true);
|
||||
ButtonEnabled(buttonStandard, true);
|
||||
ButtonEnabled(buttonUltimate, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -1360,7 +1439,7 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
Program.config.setConfig("gpu_mode", GpuMode);
|
||||
AppConfig.setConfig("gpu_mode", GpuMode);
|
||||
|
||||
ButtonEnabled(buttonOptimized, true);
|
||||
ButtonEnabled(buttonEco, true);
|
||||
@@ -1415,6 +1494,14 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
protected static void KillGPUApps()
|
||||
{
|
||||
string[] tokill = { "EADesktop", "RadeonSoftware", "epicgameslauncher" };
|
||||
foreach (string kill in tokill)
|
||||
foreach (var process in Process.GetProcessesByName(kill)) process.Kill();
|
||||
|
||||
}
|
||||
|
||||
public void SetGPUEco(int eco, bool hardWay = false)
|
||||
{
|
||||
|
||||
@@ -1422,6 +1509,7 @@ namespace GHelper
|
||||
ButtonEnabled(buttonEco, false);
|
||||
ButtonEnabled(buttonStandard, false);
|
||||
ButtonEnabled(buttonUltimate, false);
|
||||
ButtonEnabled(buttonXGM, false);
|
||||
|
||||
labelGPU.Text = Properties.Strings.GPUMode + ": " + Properties.Strings.GPUChanging + " ...";
|
||||
|
||||
@@ -1430,12 +1518,7 @@ namespace GHelper
|
||||
|
||||
int status;
|
||||
|
||||
if (eco == 1)
|
||||
{
|
||||
string[] tokill = { "EADesktop", "RadeonSoftware" };
|
||||
foreach (string kill in tokill)
|
||||
foreach (var process in Process.GetProcessesByName(kill)) process.Kill();
|
||||
}
|
||||
if (eco == 1) KillGPUApps();
|
||||
|
||||
//if (eco == 1) status = 0; else
|
||||
status = Program.acpi.SetGPUEco(eco);
|
||||
@@ -1467,8 +1550,8 @@ namespace GHelper
|
||||
public void SetGPUMode(int GPUMode)
|
||||
{
|
||||
|
||||
int CurrentGPU = Program.config.getConfig("gpu_mode");
|
||||
Program.config.setConfig("gpu_auto", 0);
|
||||
int CurrentGPU = AppConfig.getConfig("gpu_mode");
|
||||
AppConfig.setConfig("gpu_auto", 0);
|
||||
|
||||
if (CurrentGPU == GPUMode)
|
||||
{
|
||||
@@ -1515,7 +1598,7 @@ namespace GHelper
|
||||
|
||||
if (changed)
|
||||
{
|
||||
Program.config.setConfig("gpu_mode", GPUMode);
|
||||
AppConfig.setConfig("gpu_mode", GPUMode);
|
||||
}
|
||||
|
||||
if (restart)
|
||||
@@ -1531,9 +1614,9 @@ namespace GHelper
|
||||
{
|
||||
|
||||
if (GPUMode == -1)
|
||||
GPUMode = Program.config.getConfig("gpu_mode");
|
||||
GPUMode = AppConfig.getConfig("gpu_mode");
|
||||
|
||||
bool GPUAuto = (Program.config.getConfig("gpu_auto") == 1);
|
||||
bool GPUAuto = (AppConfig.getConfig("gpu_auto") == 1);
|
||||
|
||||
buttonEco.Activated = false;
|
||||
buttonStandard.Activated = false;
|
||||
@@ -1548,6 +1631,7 @@ namespace GHelper
|
||||
buttonOptimized.Activated = GPUAuto;
|
||||
labelGPU.Text = Properties.Strings.GPUMode + ": " + Properties.Strings.GPUModeEco;
|
||||
Program.trayIcon.Icon = Properties.Resources.eco;
|
||||
ButtonEnabled(buttonXGM, false);
|
||||
break;
|
||||
case AsusACPI.GPUModeUltimate:
|
||||
buttonUltimate.Activated = true;
|
||||
@@ -1560,6 +1644,7 @@ namespace GHelper
|
||||
buttonOptimized.Activated = GPUAuto;
|
||||
labelGPU.Text = Properties.Strings.GPUMode + ": " + Properties.Strings.GPUModeStandard;
|
||||
Program.trayIcon.Icon = Properties.Resources.standard;
|
||||
ButtonEnabled(buttonXGM, true);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1624,7 +1709,7 @@ namespace GHelper
|
||||
Debug.WriteLine(ex);
|
||||
}
|
||||
|
||||
Program.config.setConfig("charge_limit", limit);
|
||||
AppConfig.setConfig("charge_limit", limit);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -32,12 +32,13 @@ _If you post about the app - please include a link. Thanks._
|
||||
2. **GPU modes**: Eco - Standard - Ultimate - Optimized
|
||||
3. Laptop screen refresh rate 60hz or 120hz (144hz, etc) with display overdrive (OD) and miniled multizone switch
|
||||
4. Custom fan curve editor, power limits (PPT) and turbo boost selection for every performance mode
|
||||
5. Anime matrix control thanks to [Starlight](https://github.com/vddCore/Starlight) + some tweaks from my side including animated GIFs
|
||||
5. Anime matrix control thanks to [Starlight](https://github.com/vddCore/Starlight) + some tweaks from my side including animated GIFs, clock and autio visualizer
|
||||
6. Keyboard backlit animation and colors (including sleep animation and support for TUF models)
|
||||
7. Custom bindings for M3, M4 keys and FN+F5 (performance mode) FN+F4 (keyboard animation modes)
|
||||
7. All basic and custom Keyboard hotkeys (M-keys, FN+X keys)
|
||||
8. Monitor CPU / GPU temperature, fan speeds and battery discharge rate
|
||||
9. Battery charge limit to preserve battery health
|
||||
10. NVidia GPU overclocking
|
||||
10. NVidia GPU overclocking
|
||||
11. XG Mobile Control
|
||||
|
||||
### :gear: Automatic switching when on battery or plugged in
|
||||
- Performance modes (app remembers last mode used on battery or when plugged)
|
||||
@@ -100,13 +101,11 @@ Open "Event Viewer" from start menu, go to Windows Logs -> Application and check
|
||||
#### Battery charge limiter is not working
|
||||
Open application log.text from ``%AppData%\GHelper`` . If you see something like ``BatteryLimit = 60 : OK`` there (with your selected limit). App has done everything it could to set a limit. It could be that MyASUS or other Asus services are overwriting this limit after. You may want to right click and save this [debloat.bat](https://raw.githubusercontent.com/seerge/g-helper/main/debloat.bat) and then right-click Run it As Admin. It will stop not mandatory asus services.
|
||||
|
||||
What you can also try is to open ``C:\ProgramData\ASUS\ASUS System Control Interface\ASUSOptimization\Customization.ini`` and find following section from that file : ``[BatteryHealthCharging] ... value=100`` and either delete it or put same value as you use in G-helper.
|
||||
|
||||
#### Can I use MyASUS app along with G-Helper?
|
||||
You can, the only problem is that MyASUS may override the battery charge limit that you set before. My advice in such a situation would be to set the same limit (i.e. 80%) in both MyASUS and G-Helper.
|
||||
|
||||
#### How do I set Mute Microphone to M3?
|
||||
This function is handled by Asus Optimization Service (therefore G-helper doesn't interfere and doesn't touch this function). Make sure that this service is up and running
|
||||
If you have Asus Optimization Service running, it's controlled by that service (therefore G-helper doesn't interfere and doesn't touch this function). Alternatively you can stop that service - and you can bind M3 to anything you want.
|
||||
|
||||
#### How do I set different "Visual styles"?
|
||||
Personally, i'm not a big fan of them, as they make colors very inaccurate. But if you want so - you can adjust display colors using either Nvidia Control panel or AMD Adrenaline (appropriate display sections). If you really want you can also use [own ASUS utility from MS Store](https://apps.microsoft.com/store/detail/gamevisual/9P4K1LFTXSH8?hl=nl-nl&gl=nl&rtc=1)
|
||||
@@ -146,9 +145,7 @@ It's a lightweight Armoury Crate alternative for Asus laptops. A small utility t
|
||||
|
||||
### Recommendations (optional)
|
||||
|
||||
- I recommend keeping "Asus Optimization Service" running, as it keeps basic laptop hotkeys such as screen or keyboard brightness adjustment working.
|
||||
|
||||
- Optionally(!) you can disable / remove unnecessary services. Ruight click and save [debloat.bat](https://raw.githubusercontent.com/seerge/g-helper/main/debloat.bat). Then right click and Run it as Admin. To restore services - save and run [bloat.bat](https://raw.githubusercontent.com/seerge/g-helper/main/bloat.bat) instead.
|
||||
- You can disable / remove unnecessary services. Ruight click and save [debloat.bat](https://raw.githubusercontent.com/seerge/g-helper/main/debloat.bat). Then right click and Run it as Admin. To restore services - save and run [bloat.bat](https://raw.githubusercontent.com/seerge/g-helper/main/bloat.bat) instead.
|
||||
|
||||
- It's not recommended to use an app in combination with Armoury Crate services, because they adjust the same settings. You can [uninstall it using it's own uninstall tool](https://dlcdnets.asus.com/pub/ASUS/mb/14Utilities/Armoury_Crate_Uninstall_Tool.zip?model=armoury%20crate). Just in case, you can always install it back later.
|
||||
|
||||
@@ -199,7 +196,7 @@ Full list of keycodes https://learn.microsoft.com/en-us/windows/win32/inputdev/v
|
||||
|
||||

|
||||
|
||||
### Workaround for [bugged bios on G15](https://github.com/seerge/g-helper/issues/253)
|
||||
### Workaround for [bugged bios on G15](https://github.com/seerge/g-helper/issues/253) when external monitor is connected
|
||||
|
||||
Some people reported that on G15 model bios can be bugged and either not turn on or not turn off fans, when you set custom fan curve (in Armoury or g-helper, or any other app)
|
||||
I have added a very optional workaround as it was asked, on launch app will try to disable and re-enable dGPU when external monitor is connected, that seems to wake up fans :)
|
||||
|
||||
Reference in New Issue
Block a user