mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8a1dd9f137 | ||
|
|
325f16cf55 | ||
|
|
42cc1bdb98 | ||
|
|
83a2d1dc9f | ||
|
|
3aae223b15 | ||
|
|
b22d2f8ceb | ||
|
|
2041861a14 | ||
|
|
dfc3c0e515 | ||
|
|
796ec34284 | ||
|
|
50894a59d3 | ||
|
|
1472004d4b | ||
|
|
36c42ed05f | ||
|
|
66220351f1 | ||
|
|
8f2c8842e0 | ||
|
|
1cda822820 | ||
|
|
2afba74dd5 | ||
|
|
e69f9d1014 | ||
|
|
47d96aca61 | ||
|
|
f36fb6ca55 | ||
|
|
e765b4f037 | ||
|
|
f395c706f6 |
@@ -71,11 +71,11 @@ public static class AppConfig
|
||||
File.WriteAllText(configFile, jsonString);
|
||||
}
|
||||
|
||||
public static int getConfig(string name)
|
||||
public static int getConfig(string name, int empty = -1)
|
||||
{
|
||||
if (config.ContainsKey(name))
|
||||
return int.Parse(config[name].ToString());
|
||||
else return -1;
|
||||
else return empty;
|
||||
}
|
||||
|
||||
public static bool isConfig(string name)
|
||||
@@ -83,11 +83,11 @@ public static class AppConfig
|
||||
return getConfig(name) == 1;
|
||||
}
|
||||
|
||||
public static string getConfigString(string name)
|
||||
public static string getConfigString(string name, string empty = null)
|
||||
{
|
||||
if (config.ContainsKey(name))
|
||||
return config[name].ToString();
|
||||
else return null;
|
||||
else return empty;
|
||||
}
|
||||
|
||||
public static void setConfig(string name, int value)
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using System.Diagnostics;
|
||||
using System.Management;
|
||||
using System.Management;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
public enum AsusFan
|
||||
@@ -32,6 +31,7 @@ public class AsusACPI
|
||||
|
||||
const uint DSTS = 0x53545344;
|
||||
const uint DEVS = 0x53564544;
|
||||
const uint INIT = 0x54494E49;
|
||||
|
||||
public const uint UniversalControl = 0x00100021;
|
||||
public const int KB_Light_Up = 0xc4;
|
||||
@@ -161,7 +161,7 @@ public class AsusACPI
|
||||
public void RunListener()
|
||||
{
|
||||
|
||||
eventHandle = CreateEvent(IntPtr.Zero, false, false, "ATK Event");
|
||||
eventHandle = CreateEvent(IntPtr.Zero, false, false, "ATK4001");
|
||||
|
||||
byte[] outBuffer = new byte[16];
|
||||
byte[] data = new byte[8];
|
||||
@@ -178,7 +178,7 @@ public class AsusACPI
|
||||
WaitForSingleObject(eventHandle, Timeout.Infinite);
|
||||
Control(0x222408, new byte[0], outBuffer);
|
||||
int code = BitConverter.ToInt32(outBuffer);
|
||||
Logger.WriteLine("Code: " + code);
|
||||
Logger.WriteLine("ACPI Code: " + code);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -240,6 +240,13 @@ public class AsusACPI
|
||||
|
||||
}
|
||||
|
||||
public byte[] DeviceInit()
|
||||
{
|
||||
byte[] args = new byte[8];
|
||||
return CallMethod(INIT, args);
|
||||
|
||||
}
|
||||
|
||||
public int DeviceSet(uint DeviceID, int Status, string logName)
|
||||
{
|
||||
byte[] args = new byte[8];
|
||||
|
||||
137
app/AsusUSB.cs
137
app/AsusUSB.cs
@@ -1,5 +1,4 @@
|
||||
using HidLibrary;
|
||||
using Microsoft.Win32;
|
||||
using System.Text;
|
||||
|
||||
namespace GHelper
|
||||
@@ -175,13 +174,13 @@ namespace GHelper
|
||||
}
|
||||
|
||||
|
||||
private static IEnumerable<HidDevice> GetHidDevices(int[] deviceIds, int minInput = 18)
|
||||
private static IEnumerable<HidDevice> GetHidDevices(int[] deviceIds, int minInput = 18, int minFeatures = 1)
|
||||
{
|
||||
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.FeatureReportByteLength >= minFeatures
|
||||
&& device.Capabilities.InputReportByteLength >= minInput)
|
||||
yield return device;
|
||||
}
|
||||
|
||||
@@ -229,9 +228,9 @@ namespace GHelper
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
Task.Run(() =>
|
||||
Task.Run(async () =>
|
||||
{
|
||||
var devices = GetHidDevices(deviceIds);
|
||||
var devices = GetHidDevices(deviceIds, 0);
|
||||
foreach (HidDevice device in devices)
|
||||
{
|
||||
device.OpenDevice();
|
||||
@@ -248,23 +247,42 @@ namespace GHelper
|
||||
|
||||
public static void ApplyBrightness(int brightness)
|
||||
{
|
||||
Task.Run(() =>
|
||||
|
||||
if (AppConfig.ContainsModel("TUF"))
|
||||
Program.acpi.TUFKeyboardBrightness(brightness);
|
||||
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
|
||||
byte[] msg = { INPUT_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness };
|
||||
Logger.WriteLine("KB Backlight:" + BitConverter.ToString(msg));
|
||||
byte[] msg = { AURA_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness };
|
||||
|
||||
var devices = GetHidDevices(deviceIds, 0);
|
||||
var devices = GetHidDevices(deviceIds);
|
||||
foreach (HidDevice device in devices)
|
||||
{
|
||||
device.OpenDevice();
|
||||
device.WriteFeatureData(msg);
|
||||
Logger.WriteLine("KB Backlight:" + BitConverter.ToString(msg));
|
||||
device.CloseDevice();
|
||||
}
|
||||
|
||||
if (AppConfig.ContainsModel("TUF"))
|
||||
Program.acpi.TUFKeyboardBrightness(brightness);
|
||||
// Backup payload for old models
|
||||
if (AppConfig.ContainsModel("503"))
|
||||
{
|
||||
byte[] msgBackup = { INPUT_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness };
|
||||
|
||||
var devicesBackup = GetHidDevices(deviceIds, 0);
|
||||
foreach (HidDevice device in devicesBackup)
|
||||
{
|
||||
device.OpenDevice();
|
||||
device.WriteFeatureData(msgBackup);
|
||||
device.CloseDevice();
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -294,49 +312,6 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
public static int SetXGM(byte[] msg)
|
||||
{
|
||||
|
||||
//Logger.WriteLine("XGM Payload :" + BitConverter.ToString(msg));
|
||||
|
||||
var payload = new byte[300];
|
||||
Array.Copy(msg, payload, msg.Length);
|
||||
|
||||
foreach (HidDevice device in GetHidDevices(new int[] { 0x1970 }, 0))
|
||||
{
|
||||
device.OpenDevice();
|
||||
Logger.WriteLine("XGM " + device.Attributes.ProductHexId + "|" + device.Capabilities.FeatureReportByteLength + ":" + BitConverter.ToString(msg));
|
||||
device.WriteFeatureData(payload);
|
||||
device.CloseDevice();
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static void ApplyXGMLight(bool status)
|
||||
{
|
||||
SetXGM(new byte[] { 0x5e, 0xc5, status ? (byte)0x50 : (byte)0 });
|
||||
}
|
||||
|
||||
|
||||
public static int ResetXGM()
|
||||
{
|
||||
return SetXGM(new byte[] { 0x5e, 0xd1, 0x02 });
|
||||
}
|
||||
|
||||
public static int SetXGMFan(byte[] curve)
|
||||
{
|
||||
|
||||
if (AsusACPI.IsInvalidCurve(curve)) return -1;
|
||||
|
||||
byte[] msg = new byte[19];
|
||||
Array.Copy(new byte[] { 0x5e, 0xd1, 0x01 }, msg, 3);
|
||||
Array.Copy(curve, 0, msg, 3, curve.Length);
|
||||
|
||||
return SetXGM(msg);
|
||||
}
|
||||
|
||||
|
||||
public static void ApplyAura()
|
||||
{
|
||||
@@ -381,21 +356,49 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
public static void SetBacklightOffDelay(int value = 60)
|
||||
|
||||
// Reference : thanks to https://github.com/RomanYazvinsky/ for initial discovery of XGM payloads
|
||||
public static int SetXGM(byte[] msg)
|
||||
{
|
||||
try
|
||||
|
||||
//Logger.WriteLine("XGM Payload :" + BitConverter.ToString(msg));
|
||||
|
||||
var payload = new byte[300];
|
||||
Array.Copy(msg, payload, msg.Length);
|
||||
|
||||
foreach (HidDevice device in GetHidDevices(new int[] { 0x1970 }, 0, 300))
|
||||
{
|
||||
RegistryKey myKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ASUS\ASUS System Control Interface\AsusOptimization\ASUS Keyboard Hotkeys", true);
|
||||
if (myKey != null)
|
||||
{
|
||||
myKey.SetValue("TurnOffKeybdLight", value, RegistryValueKind.DWord);
|
||||
myKey.Close();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.Message);
|
||||
device.OpenDevice();
|
||||
Logger.WriteLine("XGM " + device.Attributes.ProductHexId + "|" + device.Capabilities.FeatureReportByteLength + ":" + BitConverter.ToString(msg));
|
||||
device.WriteFeatureData(payload);
|
||||
device.CloseDevice();
|
||||
//return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static void ApplyXGMLight(bool status)
|
||||
{
|
||||
SetXGM(new byte[] { 0x5e, 0xc5, status ? (byte)0x50 : (byte)0 });
|
||||
}
|
||||
|
||||
|
||||
public static int ResetXGM()
|
||||
{
|
||||
return SetXGM(new byte[] { 0x5e, 0xd1, 0x02 });
|
||||
}
|
||||
|
||||
public static int SetXGMFan(byte[] curve)
|
||||
{
|
||||
|
||||
if (AsusACPI.IsInvalidCurve(curve)) return -1;
|
||||
|
||||
byte[] msg = new byte[19];
|
||||
Array.Copy(new byte[] { 0x5e, 0xd1, 0x01 }, msg, 3);
|
||||
Array.Copy(curve, 0, msg, 3, curve.Length);
|
||||
|
||||
return SetXGM(msg);
|
||||
}
|
||||
|
||||
|
||||
|
||||
49
app/Extra.Designer.cs
generated
49
app/Extra.Designer.cs
generated
@@ -51,6 +51,8 @@ namespace GHelper
|
||||
pictureHelp = new PictureBox();
|
||||
groupLight = new GroupBox();
|
||||
panelBacklightExtra = new Panel();
|
||||
numericBacklightPluggedTime = new NumericUpDown();
|
||||
labelBacklightTimeoutPlugged = new Label();
|
||||
numericBacklightTime = new NumericUpDown();
|
||||
labelBacklightTimeout = new Label();
|
||||
labelBrightness = new Label();
|
||||
@@ -81,6 +83,7 @@ namespace GHelper
|
||||
checkSleepLid = new CheckBox();
|
||||
checkShutdownLid = new CheckBox();
|
||||
groupOther = new GroupBox();
|
||||
checkGpuApps = new CheckBox();
|
||||
checkAutoApplyWindowsPowerMode = new CheckBox();
|
||||
checkKeyboardAuto = new CheckBox();
|
||||
checkUSBC = new CheckBox();
|
||||
@@ -91,6 +94,7 @@ namespace GHelper
|
||||
((System.ComponentModel.ISupportInitialize)pictureHelp).BeginInit();
|
||||
groupLight.SuspendLayout();
|
||||
panelBacklightExtra.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)numericBacklightPluggedTime).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)numericBacklightTime).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)trackBrightness).BeginInit();
|
||||
panelXMG.SuspendLayout();
|
||||
@@ -302,13 +306,15 @@ namespace GHelper
|
||||
groupLight.Dock = DockStyle.Top;
|
||||
groupLight.Location = new Point(10, 334);
|
||||
groupLight.Name = "groupLight";
|
||||
groupLight.Size = new Size(954, 516);
|
||||
groupLight.Size = new Size(954, 563);
|
||||
groupLight.TabIndex = 1;
|
||||
groupLight.TabStop = false;
|
||||
groupLight.Text = "Keyboard Backlight";
|
||||
//
|
||||
// panelBacklightExtra
|
||||
//
|
||||
panelBacklightExtra.Controls.Add(numericBacklightPluggedTime);
|
||||
panelBacklightExtra.Controls.Add(labelBacklightTimeoutPlugged);
|
||||
panelBacklightExtra.Controls.Add(numericBacklightTime);
|
||||
panelBacklightExtra.Controls.Add(labelBacklightTimeout);
|
||||
panelBacklightExtra.Controls.Add(labelBrightness);
|
||||
@@ -318,9 +324,25 @@ namespace GHelper
|
||||
panelBacklightExtra.Dock = DockStyle.Top;
|
||||
panelBacklightExtra.Location = new Point(3, 319);
|
||||
panelBacklightExtra.Name = "panelBacklightExtra";
|
||||
panelBacklightExtra.Size = new Size(948, 194);
|
||||
panelBacklightExtra.Size = new Size(948, 241);
|
||||
panelBacklightExtra.TabIndex = 43;
|
||||
//
|
||||
// numericBacklightPluggedTime
|
||||
//
|
||||
numericBacklightPluggedTime.Location = new Point(655, 181);
|
||||
numericBacklightPluggedTime.Maximum = new decimal(new int[] { 3600, 0, 0, 0 });
|
||||
numericBacklightPluggedTime.Name = "numericBacklightPluggedTime";
|
||||
numericBacklightPluggedTime.Size = new Size(240, 39);
|
||||
numericBacklightPluggedTime.TabIndex = 49;
|
||||
//
|
||||
// labelBacklightTimeoutPlugged
|
||||
//
|
||||
labelBacklightTimeoutPlugged.Location = new Point(13, 183);
|
||||
labelBacklightTimeoutPlugged.Name = "labelBacklightTimeoutPlugged";
|
||||
labelBacklightTimeoutPlugged.Size = new Size(636, 45);
|
||||
labelBacklightTimeoutPlugged.TabIndex = 48;
|
||||
labelBacklightTimeoutPlugged.Text = "Seconds to turn off backlight when plugged";
|
||||
//
|
||||
// numericBacklightTime
|
||||
//
|
||||
numericBacklightTime.Location = new Point(655, 133);
|
||||
@@ -662,23 +684,34 @@ namespace GHelper
|
||||
//
|
||||
// groupOther
|
||||
//
|
||||
groupOther.Controls.Add(checkGpuApps);
|
||||
groupOther.Controls.Add(checkAutoApplyWindowsPowerMode);
|
||||
groupOther.Controls.Add(checkKeyboardAuto);
|
||||
groupOther.Controls.Add(checkUSBC);
|
||||
groupOther.Controls.Add(checkNoOverdrive);
|
||||
groupOther.Controls.Add(checkTopmost);
|
||||
groupOther.Dock = DockStyle.Top;
|
||||
groupOther.Location = new Point(10, 850);
|
||||
groupOther.Location = new Point(10, 897);
|
||||
groupOther.Name = "groupOther";
|
||||
groupOther.Size = new Size(954, 276);
|
||||
groupOther.Size = new Size(954, 310);
|
||||
groupOther.TabIndex = 2;
|
||||
groupOther.TabStop = false;
|
||||
groupOther.Text = "Other";
|
||||
//
|
||||
// checkGpuApps
|
||||
//
|
||||
checkGpuApps.AutoSize = true;
|
||||
checkGpuApps.Location = new Point(25, 220);
|
||||
checkGpuApps.Name = "checkGpuApps";
|
||||
checkGpuApps.Size = new Size(544, 36);
|
||||
checkGpuApps.TabIndex = 48;
|
||||
checkGpuApps.Text = "Stop all apps using GPU when switching to Eco";
|
||||
checkGpuApps.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkAutoApplyWindowsPowerMode
|
||||
//
|
||||
checkAutoApplyWindowsPowerMode.AutoSize = true;
|
||||
checkAutoApplyWindowsPowerMode.Location = new Point(25, 220);
|
||||
checkAutoApplyWindowsPowerMode.Location = new Point(25, 268);
|
||||
checkAutoApplyWindowsPowerMode.Name = "checkAutoApplyWindowsPowerMode";
|
||||
checkAutoApplyWindowsPowerMode.Size = new Size(416, 36);
|
||||
checkAutoApplyWindowsPowerMode.TabIndex = 47;
|
||||
@@ -732,7 +765,7 @@ namespace GHelper
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
AutoSize = true;
|
||||
AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
ClientSize = new Size(974, 1131);
|
||||
ClientSize = new Size(974, 1220);
|
||||
Controls.Add(groupOther);
|
||||
Controls.Add(groupLight);
|
||||
Controls.Add(groupBindings);
|
||||
@@ -754,6 +787,7 @@ namespace GHelper
|
||||
groupLight.PerformLayout();
|
||||
panelBacklightExtra.ResumeLayout(false);
|
||||
panelBacklightExtra.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)numericBacklightPluggedTime).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)numericBacklightTime).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)trackBrightness).EndInit();
|
||||
panelXMG.ResumeLayout(false);
|
||||
@@ -822,5 +856,8 @@ namespace GHelper
|
||||
private RComboBox comboM2;
|
||||
private TextBox textM2;
|
||||
private TextBox textM1;
|
||||
private NumericUpDown numericBacklightPluggedTime;
|
||||
private Label labelBacklightTimeoutPlugged;
|
||||
private CheckBox checkGpuApps;
|
||||
}
|
||||
}
|
||||
23
app/Extra.cs
23
app/Extra.cs
@@ -84,7 +84,9 @@ namespace GHelper
|
||||
|
||||
labelSpeed.Text = Properties.Strings.AnimationSpeed;
|
||||
labelBrightness.Text = Properties.Strings.Brightness;
|
||||
|
||||
labelBacklightTimeout.Text = Properties.Strings.BacklightTimeout;
|
||||
labelBacklightTimeoutPlugged.Text = Properties.Strings.BacklightTimeoutPlugged;
|
||||
|
||||
checkKeyboardAuto.Text = Properties.Strings.KeyboardAuto;
|
||||
checkNoOverdrive.Text = Properties.Strings.DisableOverdrive;
|
||||
@@ -97,6 +99,8 @@ namespace GHelper
|
||||
labelBacklightLid.Text = Properties.Strings.Lid;
|
||||
labelBacklightLogo.Text = Properties.Strings.Logo;
|
||||
|
||||
checkGpuApps.Text = Properties.Strings.KillGpuApps;
|
||||
|
||||
Text = Properties.Strings.ExtraSettings;
|
||||
|
||||
InitTheme();
|
||||
@@ -209,18 +213,27 @@ namespace GHelper
|
||||
checkXMG.Checked = !(AppConfig.getConfig("xmg_light") == 0);
|
||||
checkXMG.CheckedChanged += CheckXMG_CheckedChanged;
|
||||
|
||||
int kb_timeout = AppConfig.getConfig("keyboard_light_tiomeout");
|
||||
numericBacklightTime.Value = (kb_timeout >= 0) ? kb_timeout : 60;
|
||||
numericBacklightTime.Value = AppConfig.getConfig("keyboard_timeout", 60);
|
||||
numericBacklightPluggedTime.Value = AppConfig.getConfig("keyboard_ac_timeout", 0);
|
||||
|
||||
numericBacklightTime.ValueChanged += NumericBacklightTime_ValueChanged;
|
||||
numericBacklightPluggedTime.ValueChanged += NumericBacklightTime_ValueChanged;
|
||||
|
||||
checkGpuApps.Checked = AppConfig.isConfig("kill_gpu_apps");
|
||||
checkGpuApps.CheckedChanged += CheckGpuApps_CheckedChanged;
|
||||
|
||||
}
|
||||
|
||||
private void CheckGpuApps_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
AppConfig.setConfig("kill_gpu_apps", (checkGpuApps.Checked ? 1 : 0));
|
||||
}
|
||||
|
||||
private void NumericBacklightTime_ValueChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.RunAsAdmin("extra");
|
||||
AppConfig.setConfig("keyboard_light_tiomeout", (int)numericBacklightTime.Value);
|
||||
AsusUSB.SetBacklightOffDelay((int)numericBacklightTime.Value);
|
||||
AppConfig.setConfig("keyboard_timeout", (int)numericBacklightTime.Value);
|
||||
AppConfig.setConfig("keyboard_ac_timeout", (int)numericBacklightPluggedTime.Value);
|
||||
Program.inputDispatcher.InitBacklightTimer();
|
||||
}
|
||||
|
||||
private void CheckXMG_CheckedChanged(object? sender, EventArgs e)
|
||||
|
||||
14
app/Fans.cs
14
app/Fans.cs
@@ -303,7 +303,7 @@ namespace GHelper
|
||||
}
|
||||
else
|
||||
{
|
||||
MinimumSize = new Size(0, Program.settingsForm.Height);
|
||||
Size = MinimumSize = new Size(0, Program.settingsForm.Height);
|
||||
Height = Program.settingsForm.Height;
|
||||
Top = Program.settingsForm.Top;
|
||||
}
|
||||
@@ -466,7 +466,6 @@ namespace GHelper
|
||||
chartMid.Visible = true;
|
||||
SetChart(chartMid, AsusFan.Mid);
|
||||
LoadProfile(seriesMid, AsusFan.Mid);
|
||||
MinimumSize = new Size(0, chartCount * 400 + 200);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -481,13 +480,22 @@ namespace GHelper
|
||||
chartXGM.Visible = true;
|
||||
SetChart(chartXGM, AsusFan.XGM);
|
||||
LoadProfile(seriesXGM, AsusFan.XGM);
|
||||
MinimumSize = new Size(0, chartCount * 400 + 200);
|
||||
}
|
||||
else
|
||||
{
|
||||
AppConfig.setConfig("xgm_fan", 0);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (chartCount > 2)
|
||||
Size = MinimumSize = new Size(0, (int)(ControlHelper.GetDpiScale(this).Value * (chartCount * 200 + 100)));
|
||||
} catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex);
|
||||
}
|
||||
|
||||
|
||||
SetChart(chartCPU, AsusFan.CPU);
|
||||
SetChart(chartGPU, AsusFan.GPU);
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
<AssemblyVersion>0.68</AssemblyVersion>
|
||||
<AssemblyVersion>0.71</AssemblyVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using NvAPIWrapper.GPU;
|
||||
using NvAPIWrapper;
|
||||
using NvAPIWrapper.GPU;
|
||||
using NvAPIWrapper.Native;
|
||||
using NvAPIWrapper.Native.Delegates;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
@@ -35,8 +36,7 @@ public class NvidiaGpuControl : IGpuControl
|
||||
|
||||
public int? GetCurrentTemperature()
|
||||
{
|
||||
if (!IsValid)
|
||||
return null;
|
||||
if (!IsValid) return null;
|
||||
|
||||
PhysicalGPU internalGpu = _internalGpu!;
|
||||
IThermalSensor? gpuSensor =
|
||||
@@ -50,6 +50,38 @@ public class NvidiaGpuControl : IGpuControl
|
||||
{
|
||||
}
|
||||
|
||||
public void KillGPUApps()
|
||||
{
|
||||
|
||||
if (!IsValid) return;
|
||||
PhysicalGPU internalGpu = _internalGpu!;
|
||||
|
||||
try
|
||||
{
|
||||
Process[] processes = internalGpu.GetActiveApplications();
|
||||
foreach (Process process in processes)
|
||||
{
|
||||
try
|
||||
{
|
||||
process?.Kill();
|
||||
Logger.WriteLine("Stopped: " + process.ProcessName);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.Message);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//NVIDIA.RestartDisplayDriver();
|
||||
}
|
||||
|
||||
|
||||
public int GetClocks(out int core, out int memory)
|
||||
{
|
||||
@@ -182,7 +214,7 @@ public class NvidiaGpuControl : IGpuControl
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.Message);
|
||||
Debug.WriteLine(ex.Message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -151,9 +151,11 @@ public static class HardwareControl
|
||||
GpuControl?.Dispose();
|
||||
|
||||
IGpuControl _gpuControl = new NvidiaGpuControl();
|
||||
|
||||
if (_gpuControl.IsValid)
|
||||
{
|
||||
GpuControl = _gpuControl;
|
||||
Logger.WriteLine(GpuControl.FullName);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -163,11 +165,14 @@ public static class HardwareControl
|
||||
if (_gpuControl.IsValid)
|
||||
{
|
||||
GpuControl = _gpuControl;
|
||||
Logger.WriteLine(GpuControl.FullName);
|
||||
return;
|
||||
}
|
||||
_gpuControl.Dispose();
|
||||
|
||||
GpuControl = null;
|
||||
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using HidLibrary;
|
||||
using Microsoft.Win32;
|
||||
using NAudio.CoreAudioApi;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Management;
|
||||
using Tools;
|
||||
@@ -15,17 +16,9 @@ namespace GHelper
|
||||
public KeyboardListener(Action<int> KeyHandler)
|
||||
{
|
||||
HidDevice? input = AsusUSB.GetDevice();
|
||||
if (input == null) return;
|
||||
|
||||
if (input == null)
|
||||
{
|
||||
Logger.WriteLine("Input device not found");
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.WriteLine("Listener input " + input.DevicePath);
|
||||
}
|
||||
|
||||
Logger.WriteLine($"Input: {input.DevicePath}");
|
||||
|
||||
var task = Task.Run(() =>
|
||||
{
|
||||
@@ -36,7 +29,7 @@ namespace GHelper
|
||||
var data = input.Read().Data;
|
||||
if (data.Length > 1 && data[0] == AsusUSB.INPUT_HID_ID && data[1] > 0)
|
||||
{
|
||||
Logger.WriteLine("Key:" + data[1]);
|
||||
Logger.WriteLine($"Key: {data[1]}");
|
||||
KeyHandler(data[1]);
|
||||
}
|
||||
}
|
||||
@@ -61,40 +54,88 @@ namespace GHelper
|
||||
|
||||
public class InputDispatcher
|
||||
{
|
||||
System.Timers.Timer timer = new System.Timers.Timer(1000);
|
||||
public bool backlight = true;
|
||||
|
||||
private static bool isOptimizationRunning = OptimizationService.IsRunning();
|
||||
private static nint windowHandle;
|
||||
|
||||
public static Keys keyProfile = Keys.F5;
|
||||
public static Keys keyApp = Keys.F12;
|
||||
|
||||
KeyboardListener listener;
|
||||
|
||||
KeyHandler m1, m2, togggle;
|
||||
KeyHandler m1, m2, handlerProfile, handlerApp;
|
||||
|
||||
public InputDispatcher(nint handle)
|
||||
{
|
||||
|
||||
windowHandle = handle;
|
||||
|
||||
byte[] result = Program.acpi.DeviceInit();
|
||||
Debug.WriteLine($"Init: {BitConverter.ToString(result)}");
|
||||
|
||||
Program.acpi.SubscribeToEvents(WatcherEventArrived);
|
||||
//Task.Run(Program.acpi.RunListener);
|
||||
|
||||
// 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);
|
||||
handlerProfile = new KeyHandler(KeyHandler.SHIFT | KeyHandler.CTRL, keyProfile, windowHandle);
|
||||
handlerApp = new KeyHandler(KeyHandler.SHIFT | KeyHandler.CTRL, keyApp, windowHandle);
|
||||
|
||||
m1 = new KeyHandler(KeyHandler.NOMOD, Keys.VolumeDown, windowHandle);
|
||||
m2 = new KeyHandler(KeyHandler.NOMOD, Keys.VolumeUp, windowHandle);
|
||||
|
||||
RegisterKeys();
|
||||
|
||||
timer.Elapsed += Timer_Elapsed;
|
||||
|
||||
}
|
||||
|
||||
public void InitListener()
|
||||
private void Timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
|
||||
{
|
||||
TimeSpan iddle = NativeMethods.GetIdleTime();
|
||||
|
||||
int kb_timeout;
|
||||
|
||||
if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online)
|
||||
kb_timeout = AppConfig.getConfig("keyboard_ac_timeout", 0);
|
||||
else
|
||||
kb_timeout = AppConfig.getConfig("keyboard_timeout", 60);
|
||||
|
||||
if (kb_timeout == 0) return;
|
||||
|
||||
if (backlight && iddle.TotalSeconds > kb_timeout)
|
||||
{
|
||||
backlight = false;
|
||||
AsusUSB.ApplyBrightness(0);
|
||||
}
|
||||
|
||||
if (!backlight && iddle.TotalSeconds < kb_timeout)
|
||||
{
|
||||
backlight = true;
|
||||
AsusUSB.ApplyBrightness(AppConfig.getConfig("keyboard_brightness"));
|
||||
}
|
||||
|
||||
//Debug.WriteLine(iddle.TotalSeconds);
|
||||
}
|
||||
|
||||
public void Init()
|
||||
{
|
||||
if (listener is not null) listener.Dispose();
|
||||
|
||||
Program.acpi.DeviceInit();
|
||||
|
||||
if (!OptimizationService.IsRunning())
|
||||
listener = new KeyboardListener(HandleEvent);
|
||||
|
||||
InitBacklightTimer();
|
||||
}
|
||||
|
||||
public void InitBacklightTimer()
|
||||
{
|
||||
timer.Enabled = (AppConfig.getConfig("keyboard_timeout") > 0 && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online) ||
|
||||
(AppConfig.getConfig("keyboard_ac_timeout") > 0 && SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online);
|
||||
}
|
||||
|
||||
|
||||
@@ -105,24 +146,16 @@ namespace GHelper
|
||||
string actionM1 = AppConfig.getConfigString("m1");
|
||||
string actionM2 = AppConfig.getConfigString("m2");
|
||||
|
||||
togggle.Unregiser();
|
||||
handlerProfile.Unregiser();
|
||||
m1.Unregiser();
|
||||
m2.Unregiser();
|
||||
|
||||
if (keyProfile != Keys.None)
|
||||
{
|
||||
togggle.Register();
|
||||
}
|
||||
if (keyProfile != Keys.None) handlerProfile.Register();
|
||||
if (keyApp != Keys.None) handlerApp.Register();
|
||||
|
||||
if (actionM1 is not null && actionM1.Length > 0)
|
||||
{
|
||||
m1.Register();
|
||||
}
|
||||
if (actionM1 is not null && actionM1.Length > 0) m1.Register();
|
||||
|
||||
if (actionM2 is not null && actionM2.Length > 0)
|
||||
{
|
||||
m2.Register();
|
||||
}
|
||||
if (actionM2 is not null && actionM2.Length > 0) m2.Register();
|
||||
|
||||
}
|
||||
|
||||
@@ -160,7 +193,7 @@ namespace GHelper
|
||||
action = "aura";
|
||||
if (name == "fnf5")
|
||||
action = "performance";
|
||||
if (name == "m3" && !isOptimizationRunning)
|
||||
if (name == "m3" && !OptimizationService.IsRunning())
|
||||
action = "micmute";
|
||||
}
|
||||
|
||||
@@ -244,6 +277,7 @@ namespace GHelper
|
||||
Program.settingsForm.BeginInvoke(Program.settingsForm.CyclePerformanceMode);
|
||||
return;
|
||||
case 179: // FN+F4
|
||||
case 178: // FN+F4
|
||||
KeyProcess("fnf4");
|
||||
return;
|
||||
case 189: // Tablet mode
|
||||
@@ -251,16 +285,13 @@ namespace GHelper
|
||||
return;
|
||||
}
|
||||
|
||||
if (isOptimizationRunning) return;
|
||||
if (OptimizationService.IsRunning()) 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
|
||||
@@ -289,7 +320,7 @@ namespace GHelper
|
||||
break;
|
||||
case 107: // FN+F10
|
||||
bool touchpadState = GetTouchpadState();
|
||||
if (!AsusUSB.TouchpadToggle()) Program.acpi.DeviceSet(AsusACPI.UniversalControl, 0x6B, "Touchpad");
|
||||
AsusUSB.TouchpadToggle();
|
||||
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, touchpadState ? "Off" : "On", ToastIcon.Touchpad);
|
||||
break;
|
||||
case 108: // FN+F11
|
||||
@@ -302,11 +333,11 @@ namespace GHelper
|
||||
|
||||
static void LaunchProcess(string command = "")
|
||||
{
|
||||
string executable = command.Split(' ')[0];
|
||||
string arguments = command.Substring(executable.Length).Trim();
|
||||
|
||||
try
|
||||
{
|
||||
string executable = command.Split(' ')[0];
|
||||
string arguments = command.Substring(executable.Length).Trim();
|
||||
Process proc = Process.Start(executable, arguments);
|
||||
}
|
||||
catch
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar;
|
||||
using static Tools.ScreenInterrogatory;
|
||||
|
||||
namespace Tools
|
||||
@@ -351,6 +352,25 @@ namespace Tools
|
||||
public class NativeMethods
|
||||
{
|
||||
|
||||
internal struct LASTINPUTINFO
|
||||
{
|
||||
public uint cbSize;
|
||||
public uint dwTime;
|
||||
}
|
||||
|
||||
[DllImport("User32.dll")]
|
||||
private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
|
||||
|
||||
public static TimeSpan GetIdleTime()
|
||||
{
|
||||
LASTINPUTINFO lastInPut = new LASTINPUTINFO();
|
||||
lastInPut.cbSize = (uint)Marshal.SizeOf(lastInPut);
|
||||
GetLastInputInfo(ref lastInPut);
|
||||
return TimeSpan.FromMilliseconds((uint)Environment.TickCount - lastInPut.dwTime);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private const int WM_SYSCOMMAND = 0x0112;
|
||||
private const int SC_MONITORPOWER = 0xF170;
|
||||
private const int MONITOR_OFF = 2;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Text;
|
||||
using System.Diagnostics;
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
@@ -39,6 +40,26 @@ namespace GHelper
|
||||
{
|
||||
return (Process.GetProcessesByName("AsusOptimization").Count() > 0);
|
||||
}
|
||||
|
||||
|
||||
public static void SetBacklightOffDelay(int value = 60)
|
||||
{
|
||||
try
|
||||
{
|
||||
RegistryKey myKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ASUS\ASUS System Control Interface\AsusOptimization\ASUS Keyboard Hotkeys", true);
|
||||
if (myKey != null)
|
||||
{
|
||||
myKey.SetValue("TurnOffKeybdLight", value, RegistryValueKind.DWord);
|
||||
myKey.Close();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -29,7 +29,7 @@ namespace GHelper
|
||||
|
||||
public static InputDispatcher inputDispatcher;
|
||||
|
||||
private static PowerLineStatus isPlugged = PowerLineStatus.Unknown;
|
||||
private static PowerLineStatus isPlugged = SystemInformation.PowerStatus.PowerLineStatus;
|
||||
|
||||
// The main entry point for the application
|
||||
public static void Main(string[] args)
|
||||
@@ -144,7 +144,7 @@ namespace GHelper
|
||||
isPlugged = SystemInformation.PowerStatus.PowerLineStatus;
|
||||
Logger.WriteLine("AutoSetting for " + isPlugged.ToString());
|
||||
|
||||
inputDispatcher.InitListener();
|
||||
inputDispatcher.Init();
|
||||
|
||||
settingsForm.SetBatteryChargeLimit(AppConfig.getConfig("charge_limit"));
|
||||
settingsForm.AutoPerformance();
|
||||
@@ -163,9 +163,10 @@ namespace GHelper
|
||||
|
||||
private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
|
||||
{
|
||||
|
||||
if (SystemInformation.PowerStatus.PowerLineStatus == isPlugged) return;
|
||||
|
||||
Logger.WriteLine("Windows - Power Mode Changed");
|
||||
Logger.WriteLine("Power Mode Changed");
|
||||
SetAutoModes();
|
||||
}
|
||||
|
||||
|
||||
22
app/Properties/Strings.Designer.cs
generated
22
app/Properties/Strings.Designer.cs
generated
@@ -277,7 +277,7 @@ namespace GHelper.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Seconds to turn off backlight on battery.
|
||||
/// Looks up a localized string similar to Backlight timeout on battery.
|
||||
/// </summary>
|
||||
internal static string BacklightTimeout {
|
||||
get {
|
||||
@@ -285,6 +285,15 @@ namespace GHelper.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Backlight timeout when plugged (0 - always on).
|
||||
/// </summary>
|
||||
internal static string BacklightTimeoutPlugged {
|
||||
get {
|
||||
return ResourceManager.GetString("BacklightTimeoutPlugged", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Balanced.
|
||||
/// </summary>
|
||||
@@ -484,7 +493,7 @@ namespace GHelper.Properties {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Fan: .
|
||||
/// Looks up a localized string similar to Fan: .
|
||||
/// </summary>
|
||||
internal static string FanSpeed {
|
||||
get {
|
||||
@@ -618,6 +627,15 @@ namespace GHelper.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Stop all apps using GPU when switching to Eco.
|
||||
/// </summary>
|
||||
internal static string KillGpuApps {
|
||||
get {
|
||||
return ResourceManager.GetString("KillGpuApps", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Laptop Backlight.
|
||||
/// </summary>
|
||||
|
||||
@@ -190,7 +190,10 @@
|
||||
<value>Awake</value>
|
||||
</data>
|
||||
<data name="BacklightTimeout" xml:space="preserve">
|
||||
<value>Seconds to turn off backlight on battery</value>
|
||||
<value>Backlight timeout on battery</value>
|
||||
</data>
|
||||
<data name="BacklightTimeoutPlugged" xml:space="preserve">
|
||||
<value>Backlight timeout when plugged (0 - always on)</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Balanced</value>
|
||||
@@ -259,7 +262,7 @@
|
||||
<value>Fans and Power</value>
|
||||
</data>
|
||||
<data name="FanSpeed" xml:space="preserve">
|
||||
<value> Fan: </value>
|
||||
<value>Fan: </value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>Fans + Power</value>
|
||||
@@ -303,6 +306,9 @@
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>Lower backlight brightness on battery and back when plugged</value>
|
||||
</data>
|
||||
<data name="KillGpuApps" xml:space="preserve">
|
||||
<value>Stop all apps using GPU when switching to Eco</value>
|
||||
</data>
|
||||
<data name="LaptopBacklight" xml:space="preserve">
|
||||
<value>Laptop Backlight</value>
|
||||
</data>
|
||||
|
||||
@@ -189,6 +189,12 @@
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>Робота</value>
|
||||
</data>
|
||||
<data name="BacklightTimeout" xml:space="preserve">
|
||||
<value>Тайм-аут підсвітки на батареї</value>
|
||||
</data>
|
||||
<data name="BacklightTimeoutPlugged" xml:space="preserve">
|
||||
<value>Тайм-аут підсвітки на зарядці (0 - завжди ввімкнено)</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Баланс</value>
|
||||
</data>
|
||||
@@ -324,6 +330,9 @@
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>Мультизони</value>
|
||||
</data>
|
||||
<data name="MuteMic" xml:space="preserve">
|
||||
<value>Вимкнути мікрофон</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>Відкрити вікно G-Helper</value>
|
||||
</data>
|
||||
@@ -333,6 +342,9 @@
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>Вмикає Еко на батареї та Стандартний на зарядці</value>
|
||||
</data>
|
||||
<data name="OptimizedUSBC" xml:space="preserve">
|
||||
<value>Вимикати GPU на зарядці від USB-C в режимі Авто</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>Інше</value>
|
||||
</data>
|
||||
@@ -387,6 +399,12 @@
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>Аура</value>
|
||||
</data>
|
||||
<data name="ToggleMiniled" xml:space="preserve">
|
||||
<value>Міні-лед (якщо підтримується)</value>
|
||||
</data>
|
||||
<data name="ToggleScreen" xml:space="preserve">
|
||||
<value>Вимкнути екран</value>
|
||||
</data>
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<value>Турбо</value>
|
||||
</data>
|
||||
@@ -405,9 +423,15 @@
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>Версія</value>
|
||||
</data>
|
||||
<data name="VolumeDown" xml:space="preserve">
|
||||
<value>Зменшення гучності</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>Вимкнення звуку</value>
|
||||
</data>
|
||||
<data name="VolumeUp" xml:space="preserve">
|
||||
<value>Збільшення гучності</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>Тримати вікно завжди зверху</value>
|
||||
</data>
|
||||
|
||||
468
app/Properties/Strings.vi.resx
Normal file
468
app/Properties/Strings.vi.resx
Normal file
@@ -0,0 +1,468 @@
|
||||
<?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">
|
||||
<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>Không thể kết nối đến ASUS ACPI. Chương trình cần nó để có thể hoạt động. Hãy thử cài lại Asus System Control Interface</value>
|
||||
</data>
|
||||
<data name="AlertDGPU" xml:space="preserve">
|
||||
<value>Có vẻ như GPU rời đang được sử dụng nhiều, tắt nó?</value>
|
||||
</data>
|
||||
<data name="AlertDGPUTitle" xml:space="preserve">
|
||||
<value>Chế độ Tiết kiệm</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<value>Chuyển sang Chế độ Ultimate cần phải khởi động lại</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOn" xml:space="preserve">
|
||||
<value>Chế độ Ultimate yêu cầu phải khởi động lại</value>
|
||||
</data>
|
||||
<data name="AlertUltimateTitle" xml:space="preserve">
|
||||
<value>Khởi động lại ngay?</value>
|
||||
</data>
|
||||
<data name="AnimationSpeed" xml:space="preserve">
|
||||
<value>Tốc độ</value>
|
||||
</data>
|
||||
<data name="AnimeMatrix" xml:space="preserve">
|
||||
<value>AniMe Matrix</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunning" xml:space="preserve">
|
||||
<value>Chương trình đã chạy</value>
|
||||
</data>
|
||||
<data name="AppAlreadyRunningText" xml:space="preserve">
|
||||
<value>G-Helper đã chạy. Hãy kiểm tra khay hệ thống</value>
|
||||
</data>
|
||||
<data name="ApplyFanCurve" xml:space="preserve">
|
||||
<value>Áp dụng Chế độ quạt tuỳ chỉnh</value>
|
||||
</data>
|
||||
<data name="ApplyPowerLimits" xml:space="preserve">
|
||||
<value>Áp dụng Giới hạn nguồn</value>
|
||||
</data>
|
||||
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
|
||||
<value>Tự động điều chỉnh Chế độ nguồn của Windows</value>
|
||||
</data>
|
||||
<data name="AuraBreathe" xml:space="preserve">
|
||||
<value>Hơi thở</value>
|
||||
</data>
|
||||
<data name="AuraColorCycle" xml:space="preserve">
|
||||
<value>Chuyển màu</value>
|
||||
</data>
|
||||
<data name="AuraFast" xml:space="preserve">
|
||||
<value>Nhanh</value>
|
||||
</data>
|
||||
<data name="AuraNormal" xml:space="preserve">
|
||||
<value>Bình thường</value>
|
||||
</data>
|
||||
<data name="AuraRainbow" xml:space="preserve">
|
||||
<value>Cầu vồng</value>
|
||||
</data>
|
||||
<data name="AuraSlow" xml:space="preserve">
|
||||
<value>Chậm</value>
|
||||
</data>
|
||||
<data name="AuraStatic" xml:space="preserve">
|
||||
<value>Tĩnh</value>
|
||||
</data>
|
||||
<data name="AuraStrobe" xml:space="preserve">
|
||||
<value>Nhấp nháy</value>
|
||||
</data>
|
||||
<data name="AutoMode" xml:space="preserve">
|
||||
<value>Tự động</value>
|
||||
</data>
|
||||
<data name="AutoRefreshTooltip" xml:space="preserve">
|
||||
<value>Chuyển về 60Hz để tiết kiệm pin, và chuyển lại tần số quét cao khi cắm sạc</value>
|
||||
</data>
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>Đang bật</value>
|
||||
</data>
|
||||
<data name="BacklightTimeout" xml:space="preserve">
|
||||
<value>Số giây để tắt đèn nền bàn phím(khi dùng pin)</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Cân bằng</value>
|
||||
</data>
|
||||
<data name="BatteryChargeLimit" xml:space="preserve">
|
||||
<value>Giới hạn sạc</value>
|
||||
</data>
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Khởi động</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Độ sáng</value>
|
||||
</data>
|
||||
<data name="Color" xml:space="preserve">
|
||||
<value>Màu</value>
|
||||
</data>
|
||||
<data name="CPUBoost" xml:space="preserve">
|
||||
<value>Tăng tốc CPU</value>
|
||||
</data>
|
||||
<data name="Custom" xml:space="preserve">
|
||||
<value>Tuỳ chỉnh</value>
|
||||
</data>
|
||||
<data name="Default" xml:space="preserve">
|
||||
<value>Mặc định</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>Tắt Overdrive</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>Đang không sạc</value>
|
||||
</data>
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<value>Tải xuống Bản cập nhật</value>
|
||||
</data>
|
||||
<data name="EcoGPUTooltip" xml:space="preserve">
|
||||
<value>Tắt GPU rời để tiết kiệm pin</value>
|
||||
</data>
|
||||
<data name="EcoMode" xml:space="preserve">
|
||||
<value>Tiết kiệm</value>
|
||||
</data>
|
||||
<data name="Extra" xml:space="preserve">
|
||||
<value>Thêm</value>
|
||||
</data>
|
||||
<data name="ExtraSettings" xml:space="preserve">
|
||||
<value>Cài đặt bổ sung</value>
|
||||
</data>
|
||||
<data name="FactoryDefaults" xml:space="preserve">
|
||||
<value>Đặt về Mặc định</value>
|
||||
</data>
|
||||
<data name="FanCurves" xml:space="preserve">
|
||||
<value>Chế độ Quạt</value>
|
||||
</data>
|
||||
<data name="FanProfileCPU" xml:space="preserve">
|
||||
<value>Cấu hình Quạt CPU</value>
|
||||
</data>
|
||||
<data name="FanProfileGPU" xml:space="preserve">
|
||||
<value>Cấu hình Quạt GPU</value>
|
||||
</data>
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<value>Cấu hình Quạt giữa</value>
|
||||
</data>
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<value>Cấu hình Quạt</value>
|
||||
</data>
|
||||
<data name="FansAndPower" xml:space="preserve">
|
||||
<value>Quạt và Nguồn điện</value>
|
||||
</data>
|
||||
<data name="FanSpeed" xml:space="preserve">
|
||||
<value> Quạt: </value>
|
||||
</data>
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>Quạt + Nguồn</value>
|
||||
</data>
|
||||
<data name="GPUBoost" xml:space="preserve">
|
||||
<value>Dynamic Boost</value>
|
||||
</data>
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<value>Đang đổi GPU</value>
|
||||
</data>
|
||||
<data name="GPUCoreClockOffset" xml:space="preserve">
|
||||
<value>Bù trừ Tốc độ Nhân GPU</value>
|
||||
</data>
|
||||
<data name="GPUMemoryClockOffset" xml:space="preserve">
|
||||
<value>Bù trừ Tốc độ RAM GPU</value>
|
||||
</data>
|
||||
<data name="GPUMode" xml:space="preserve">
|
||||
<value>Chế độ GPU</value>
|
||||
</data>
|
||||
<data name="GPUModeEco" xml:space="preserve">
|
||||
<value>Chỉ GPU tích hợp</value>
|
||||
</data>
|
||||
<data name="GPUModeStandard" xml:space="preserve">
|
||||
<value>GPU tích hợp + GPU rời</value>
|
||||
</data>
|
||||
<data name="GPUModeUltimate" xml:space="preserve">
|
||||
<value>Độc quyền của GPU rời</value>
|
||||
</data>
|
||||
<data name="GPUSettings" xml:space="preserve">
|
||||
<value>Cài đặt GPU</value>
|
||||
</data>
|
||||
<data name="GPUTempTarget" xml:space="preserve">
|
||||
<value>Nhiệt độ đích</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>Tổ hợp phím</value>
|
||||
</data>
|
||||
<data name="Keyboard" xml:space="preserve">
|
||||
<value>Bàn phím</value>
|
||||
</data>
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>Giảm độ sáng bàn phím khi không cắm sạc</value>
|
||||
</data>
|
||||
<data name="LaptopBacklight" xml:space="preserve">
|
||||
<value>Độ sáng đèn nền</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>Bàn phím Laptop</value>
|
||||
</data>
|
||||
<data name="LaptopScreen" xml:space="preserve">
|
||||
<value>Màn hình Laptop</value>
|
||||
</data>
|
||||
<data name="Lid" xml:space="preserve">
|
||||
<value>Màn gập</value>
|
||||
</data>
|
||||
<data name="Lightbar" xml:space="preserve">
|
||||
<value>Thanh sáng</value>
|
||||
</data>
|
||||
<data name="Logo" xml:space="preserve">
|
||||
<value>Logo</value>
|
||||
</data>
|
||||
<data name="MatrixAudio" xml:space="preserve">
|
||||
<value>Sóng nhạc</value>
|
||||
</data>
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<value>Nhị phân</value>
|
||||
</data>
|
||||
<data name="MatrixBright" xml:space="preserve">
|
||||
<value>Sáng</value>
|
||||
</data>
|
||||
<data name="MatrixClock" xml:space="preserve">
|
||||
<value>Đồng hồ</value>
|
||||
</data>
|
||||
<data name="MatrixDim" xml:space="preserve">
|
||||
<value>Sáng mờ</value>
|
||||
</data>
|
||||
<data name="MatrixLogo" xml:space="preserve">
|
||||
<value>Logo ROG</value>
|
||||
</data>
|
||||
<data name="MatrixMedium" xml:space="preserve">
|
||||
<value>Vừa phải</value>
|
||||
</data>
|
||||
<data name="MatrixOff" xml:space="preserve">
|
||||
<value>Tắt</value>
|
||||
</data>
|
||||
<data name="MatrixPicture" xml:space="preserve">
|
||||
<value>Hình ảnh</value>
|
||||
</data>
|
||||
<data name="MaxRefreshTooltip" xml:space="preserve">
|
||||
<value>Tốc độ làm mới tối đa để có độ trễ thấp</value>
|
||||
</data>
|
||||
<data name="MinRefreshTooltip" xml:space="preserve">
|
||||
<value>Tốc độ làm mới 60Hz để tiết kiệm pin</value>
|
||||
</data>
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>Đèn nền Đa vùng(Multi-Zone)</value>
|
||||
</data>
|
||||
<data name="MuteMic" xml:space="preserve">
|
||||
<value>Tắt Mic</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>Mở cửa sổ G-Helper</value>
|
||||
</data>
|
||||
<data name="Optimized" xml:space="preserve">
|
||||
<value>Tối ưu</value>
|
||||
</data>
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>Chuyển về Chế độ Tiết kiệm khi dùng pin và Chế độ Tiêu chuẩn khi cắm sạc</value>
|
||||
</data>
|
||||
<data name="OptimizedUSBC" xml:space="preserve">
|
||||
<value>Tắt GPU khi dùng sạc Type-C ở Chế độ Tối ưu</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>Khác</value>
|
||||
</data>
|
||||
<data name="Overdrive" xml:space="preserve">
|
||||
<value>Overdrive</value>
|
||||
</data>
|
||||
<data name="PerformanceMode" xml:space="preserve">
|
||||
<value>Chế độ Hiệu suất</value>
|
||||
</data>
|
||||
<data name="PictureGif" xml:space="preserve">
|
||||
<value>Ảnh tĩnh / Ảnh Động</value>
|
||||
</data>
|
||||
<data name="PlayPause" xml:space="preserve">
|
||||
<value>Phát / Dừng</value>
|
||||
</data>
|
||||
<data name="PowerLimits" xml:space="preserve">
|
||||
<value>Giới hạn Nguồn (PPT)</value>
|
||||
</data>
|
||||
<data name="PPTExperimental" xml:space="preserve">
|
||||
<value>Giới hạn Nguồn (PPT) là tính năng thử nghiệm. Sử dụng nó cẩn thận và tự chịu mọi rủi ro!</value>
|
||||
</data>
|
||||
<data name="PrintScreen" xml:space="preserve">
|
||||
<value>Chụp màn hình</value>
|
||||
</data>
|
||||
<data name="Quit" xml:space="preserve">
|
||||
<value>Thoát</value>
|
||||
</data>
|
||||
<data name="RestartGPU" xml:space="preserve">
|
||||
<value>Không thể chuyển về Chế độ Tiết kiệm do có gì đó đang dùng GPU. Khởi động lại GPU rời trong Quản lý Thiết bị? * Bạn sẽ chịu mọi rủi ro.</value>
|
||||
</data>
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<value>RPM</value>
|
||||
</data>
|
||||
<data name="RunOnStartup" xml:space="preserve">
|
||||
<value>Chạy khi khởi động</value>
|
||||
</data>
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<value>Tắt nguồn</value>
|
||||
</data>
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<value>Im lặng</value>
|
||||
</data>
|
||||
<data name="Sleep" xml:space="preserve">
|
||||
<value>Ngủ</value>
|
||||
</data>
|
||||
<data name="StandardGPUTooltip" xml:space="preserve">
|
||||
<value>Bật GPU rời cho khi cho mức độ dùng tiêu chuẩn</value>
|
||||
</data>
|
||||
<data name="StandardMode" xml:space="preserve">
|
||||
<value>Tiêu chuẩn</value>
|
||||
</data>
|
||||
<data name="StartupError" xml:space="preserve">
|
||||
<value>Khởi động lỗi</value>
|
||||
</data>
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>Bật tắt Aura</value>
|
||||
</data>
|
||||
<data name="ToggleMiniled" xml:space="preserve">
|
||||
<value>Bật tắt Miniled(Nếu có hỗ trợ)</value>
|
||||
</data>
|
||||
<data name="ToggleScreen" xml:space="preserve">
|
||||
<value>Bật tắt màn hình</value>
|
||||
</data>
|
||||
<data name="Turbo" xml:space="preserve">
|
||||
<value>Turbo</value>
|
||||
</data>
|
||||
<data name="TurnedOff" xml:space="preserve">
|
||||
<value>Đã tắt</value>
|
||||
</data>
|
||||
<data name="TurnOffOnBattery" xml:space="preserve">
|
||||
<value>Tắt khi không cắm sạc</value>
|
||||
</data>
|
||||
<data name="UltimateGPUTooltip" xml:space="preserve">
|
||||
<value>Định tuyến màn hình laptop đến Card rời, tối đa hóa FPS</value>
|
||||
</data>
|
||||
<data name="UltimateMode" xml:space="preserve">
|
||||
<value>Ultimate</value>
|
||||
</data>
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>Phiên bản</value>
|
||||
</data>
|
||||
<data name="VolumeDown" xml:space="preserve">
|
||||
<value>Giảm âm lượng</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>Tắt âm lượng</value>
|
||||
</data>
|
||||
<data name="VolumeUp" xml:space="preserve">
|
||||
<value>Tăng âm lượng</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>Giữ cửa sổ ở trên cùng</value>
|
||||
</data>
|
||||
</root>
|
||||
2
app/Settings.Designer.cs
generated
2
app/Settings.Designer.cs
generated
@@ -255,7 +255,7 @@ namespace GHelper
|
||||
//
|
||||
sliderBattery.Location = new Point(16, 70);
|
||||
sliderBattery.Max = 100;
|
||||
sliderBattery.Min = 50;
|
||||
sliderBattery.Min = 40;
|
||||
sliderBattery.Name = "sliderBattery";
|
||||
sliderBattery.Size = new Size(772, 40);
|
||||
sliderBattery.TabIndex = 39;
|
||||
|
||||
162
app/Settings.cs
162
app/Settings.cs
@@ -153,6 +153,64 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
|
||||
switch (m.Msg)
|
||||
{
|
||||
case NativeMethods.WM_POWERBROADCAST:
|
||||
if (m.WParam == (IntPtr)NativeMethods.PBT_POWERSETTINGCHANGE)
|
||||
{
|
||||
var settings = (NativeMethods.POWERBROADCAST_SETTING)m.GetLParam(typeof(NativeMethods.POWERBROADCAST_SETTING));
|
||||
switch (settings.Data)
|
||||
{
|
||||
case 0:
|
||||
Logger.WriteLine("Monitor Power Off");
|
||||
AsusUSB.ApplyBrightness(0);
|
||||
break;
|
||||
case 1:
|
||||
Logger.WriteLine("Monitor Power On");
|
||||
Program.SetAutoModes();
|
||||
break;
|
||||
case 2:
|
||||
Logger.WriteLine("Monitor Dimmed");
|
||||
break;
|
||||
}
|
||||
}
|
||||
m.Result = (IntPtr)1;
|
||||
break;
|
||||
|
||||
case KeyHandler.WM_HOTKEY_MSG_ID:
|
||||
|
||||
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();
|
||||
if (key == InputDispatcher.keyApp) Program.SettingsToggle();
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
base.WndProc(ref m);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public void RunToast(string text, ToastIcon? icon = null)
|
||||
{
|
||||
toast.RunToast(text, icon);
|
||||
@@ -165,36 +223,6 @@ namespace GHelper
|
||||
|
||||
Padding padding = new Padding(15, 5, 5, 5);
|
||||
|
||||
/*
|
||||
TableLayoutPanel[] tables = { tablePerf, tableGPU };
|
||||
string[] titles = { Properties.Strings.PerformanceMode, Properties.Strings.GPUMode};
|
||||
|
||||
int index = 0;
|
||||
foreach (TableLayoutPanel table in tables)
|
||||
{
|
||||
|
||||
var title = new ToolStripMenuItem(titles[index]);
|
||||
title.Margin = padding;
|
||||
title.Enabled = false;
|
||||
contextMenuStrip.Items.Add(title);
|
||||
|
||||
foreach (Control control in table.Controls)
|
||||
{
|
||||
var button = control as RButton;
|
||||
if (button != null && !button.Secondary && button.Enabled)
|
||||
{
|
||||
var menu = new ToolStripMenuItem(button.Text);
|
||||
menu.Margin = padding;
|
||||
menu.Checked = button.Activated;
|
||||
menu.Click += delegate { button.PerformClick(); };
|
||||
contextMenuStrip.Items.Add(menu);
|
||||
}
|
||||
}
|
||||
contextMenuStrip.Items.Add("-");
|
||||
index++;
|
||||
}*/
|
||||
|
||||
|
||||
var title = new ToolStripMenuItem(Properties.Strings.PerformanceMode);
|
||||
title.Margin = padding;
|
||||
title.Enabled = false;
|
||||
@@ -493,59 +521,6 @@ namespace GHelper
|
||||
AutoScreen();
|
||||
}
|
||||
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
|
||||
switch (m.Msg)
|
||||
{
|
||||
case NativeMethods.WM_POWERBROADCAST:
|
||||
if (m.WParam == (IntPtr)NativeMethods.PBT_POWERSETTINGCHANGE)
|
||||
{
|
||||
var settings = (NativeMethods.POWERBROADCAST_SETTING)m.GetLParam(typeof(NativeMethods.POWERBROADCAST_SETTING));
|
||||
switch (settings.Data)
|
||||
{
|
||||
case 0:
|
||||
Logger.WriteLine("Monitor Power Off");
|
||||
AsusUSB.ApplyBrightness(0);
|
||||
SetBatteryChargeLimit(AppConfig.getConfig("charge_limit"));
|
||||
break;
|
||||
case 1:
|
||||
Logger.WriteLine("Monitor Power On");
|
||||
Program.SetAutoModes();
|
||||
break;
|
||||
case 2:
|
||||
Logger.WriteLine("Monitor Dimmed");
|
||||
break;
|
||||
}
|
||||
}
|
||||
m.Result = (IntPtr)1;
|
||||
break;
|
||||
|
||||
case KeyHandler.WM_HOTKEY_MSG_ID:
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
private void CheckStartup_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
@@ -957,10 +932,11 @@ namespace GHelper
|
||||
labelBattery.Text = battery;
|
||||
});
|
||||
|
||||
string trayTip = "CPU" + cpuTemp + HardwareControl.cpuFan;
|
||||
if (gpuTemp.Length > 0) trayTip += "\nGPU" + gpuTemp + HardwareControl.gpuFan;
|
||||
if (battery.Length > 0) trayTip += "\n" + battery;
|
||||
|
||||
Program.trayIcon.Text = "CPU" + cpuTemp + HardwareControl.cpuFan + "\n"
|
||||
+ "GPU" + gpuTemp + HardwareControl.gpuFan +
|
||||
((battery.Length > 0) ? ("\n" + battery) : "");
|
||||
Program.trayIcon.Text = trayTip;
|
||||
|
||||
}
|
||||
|
||||
@@ -1267,7 +1243,7 @@ namespace GHelper
|
||||
|
||||
int backlight = AppConfig.getConfig("keyboard_brightness");
|
||||
|
||||
if (AppConfig.isConfig("keyboard_auto") && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online)
|
||||
if (AppConfig.isConfig("keyboard_auto") && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online)
|
||||
AsusUSB.ApplyBrightness(0);
|
||||
else if (backlight >= 0)
|
||||
AsusUSB.ApplyBrightness(backlight);
|
||||
@@ -1437,6 +1413,12 @@ namespace GHelper
|
||||
|
||||
UltimateUI(mux == 1);
|
||||
|
||||
if (eco < 0)
|
||||
{
|
||||
tableGPU.Visible = false;
|
||||
if (Program.acpi.DeviceGet(AsusACPI.GPU_Fan) < 0) panelGPU.Visible = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
AppConfig.setConfig("gpu_mode", GpuMode);
|
||||
@@ -1497,9 +1479,15 @@ 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();
|
||||
|
||||
if (AppConfig.isConfig("kill_gpu_apps") && HardwareControl.GpuControl is not null && HardwareControl.GpuControl.IsNvidia)
|
||||
{
|
||||
NvidiaGpuControl nvControl = (NvidiaGpuControl)HardwareControl.GpuControl;
|
||||
nvControl.KillGPUApps();
|
||||
}
|
||||
}
|
||||
|
||||
public void SetGPUEco(int eco, bool hardWay = false)
|
||||
|
||||
@@ -6,6 +6,8 @@ sc config ASUSSwitch start= auto
|
||||
sc config ASUSSystemAnalysis start= auto
|
||||
sc config ASUSSystemDiagnosis start= auto
|
||||
sc config ArmouryCrateControlInterface start= auto
|
||||
sc config AsusCertService start= auto
|
||||
sc config ASUSOptimization start= auto
|
||||
|
||||
sc START AsusAppService
|
||||
sc START ASUSLinkNear
|
||||
@@ -14,6 +16,8 @@ sc START ASUSSoftwareManager
|
||||
sc START ASUSSwitch
|
||||
sc START ASUSSystemAnalysis
|
||||
sc START ASUSSystemDiagnosis
|
||||
sc START ArmouryCrateControlInterface
|
||||
sc START ArmouryCrateControlInterface
|
||||
sc START AsusCertService
|
||||
sc START ASUSOptimization
|
||||
|
||||
set /p asd="Hit enter to finish"
|
||||
|
||||
@@ -5,7 +5,9 @@ sc STOP ASUSSoftwareManager
|
||||
sc STOP ASUSSwitch
|
||||
sc STOP ASUSSystemAnalysis
|
||||
sc STOP ASUSSystemDiagnosis
|
||||
sc STOP ArmouryCrateControlInterface
|
||||
sc STOP ArmouryCrateControlInterface
|
||||
sc STOP AsusCertService
|
||||
sc STOP ASUSOptimization
|
||||
|
||||
sc config AsusAppService start= disabled
|
||||
sc config ASUSLinkNear start= disabled
|
||||
@@ -15,5 +17,7 @@ sc config ASUSSwitch start= disabled
|
||||
sc config ASUSSystemAnalysis start= disabled
|
||||
sc config ASUSSystemDiagnosis start= disabled
|
||||
sc config ArmouryCrateControlInterface start= disabled
|
||||
sc config AsusCertService start= disabled
|
||||
sc config ASUSOptimization start= disabled
|
||||
|
||||
set /p asd="Hit enter to finish"
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
|
||||
Language: English | [中文](https://github.com/seerge/g-helper/blob/main/docs/README.zh-CN.md)
|
||||
|
||||
## Lightweight Armoury Crate alternative for Asus laptops
|
||||
## Control tool for Asus laptops
|
||||
|
||||
Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models. A small utility that allows you to do almost everything you could do with Armoury Crate but without extra bloat and unnecessary services.
|
||||
Lightweight Armoury Crate alternative for Asus lapopts. A small utility that allows you to do almost everything you could do with Armoury Crate but without extra bloat and unnecessary services. Works on all popular models, such as ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar, ProArt and many more! Feel free to try :)
|
||||
|
||||
|
||||
## :gift: Main advantages
|
||||
@@ -20,11 +20,11 @@ Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix
|
||||
## [:floppy_disk: Download App](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
|
||||
|
||||
If you like this app, please [star :star: it on Github](https://github.com/seerge/g-helper) and spread a word about it!
|
||||
### [:euro: Donate EUR](https://www.paypal.com/donate/?hosted_button_id=4HMSHS4EBQWTA) | [💵 Donate USD](https://www.paypal.com/donate/?hosted_button_id=SRM6QUX6ACXDY) | [:coin: Donate via Stripe](https://buy.stripe.com/00gaFJ9Lf79v7WobII)
|
||||
### [:euro: Donate EUR](https://www.paypal.com/donate/?hosted_button_id=4HMSHS4EBQWTA) | [💵 Donate USD](https://www.paypal.com/donate/?hosted_button_id=SRM6QUX6ACXDY) | [:credit_card: Donate via Stripe](https://buy.stripe.com/00gaFJ9Lf79v7WobII)
|
||||
|
||||
_If you post about the app - please include a link. Thanks._
|
||||
|
||||

|
||||

|
||||
|
||||
### :zap: Main features
|
||||
|
||||
@@ -48,6 +48,8 @@ _If you post about the app - please include a link. Thanks._
|
||||
|
||||
To keep auto switching and hotkeys working the app needs to stay running in the tray. It doesn't consume any resources.
|
||||
|
||||

|
||||
|
||||
### :rocket: Performance Modes
|
||||
|
||||
Modes are **same** as in Armoury Crate as they are stored in bios including default fan curves
|
||||
@@ -58,8 +60,6 @@ Modes are **same** as in Armoury Crate as they are stored in bios including defa
|
||||
|
||||
_PPTs are shown for G14 2022, for other models PPTs will be different as they are set in bios._
|
||||
|
||||

|
||||
|
||||
### :video_game: GPU Modes
|
||||
|
||||
1. Eco mode : only low power integrated GPU enabled, iGPU drives built in display
|
||||
@@ -67,6 +67,8 @@ _PPTs are shown for G14 2022, for other models PPTs will be different as they ar
|
||||
3. Ultimate mode: iGPU and dGPU enabled, but dGPU drives built in display (supported only on G14 2022 model)
|
||||
4. Optimized: disables dGPU on battery (Eco) and enables when plugged (Standard)
|
||||
|
||||

|
||||
|
||||
## :question: FAQ
|
||||
|
||||
#### How do I stop the Armory Crate install popup appearing every time I press the M4 / Rog key?
|
||||
|
||||
Reference in New Issue
Block a user