mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
63 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5701a287aa | ||
|
|
1968b6487c | ||
|
|
95103108f2 | ||
|
|
defb0790e5 | ||
|
|
9da45b43ea | ||
|
|
32a20c3cce | ||
|
|
763337aedd | ||
|
|
f1b51a726b | ||
|
|
a085615398 | ||
|
|
d32a3452f9 | ||
|
|
433022b65d | ||
|
|
460f921836 | ||
|
|
1e2620c484 | ||
|
|
e774f704dd | ||
|
|
aa327f563f | ||
|
|
b9de97ecf4 | ||
|
|
5d7af9bdcd | ||
|
|
c2ca761d99 | ||
|
|
e480ee6f12 | ||
|
|
393cb3300c | ||
|
|
ee90fe4a3d | ||
|
|
a0628ef368 | ||
|
|
701a7d99c4 | ||
|
|
667d365992 | ||
|
|
6232fb1cfb | ||
|
|
a92924840b | ||
|
|
7a4d885e1b | ||
|
|
1c5e46131f | ||
|
|
49d5df9bac | ||
|
|
b8870ba3d5 | ||
|
|
2d7009d8fb | ||
|
|
46bfda3ad5 | ||
|
|
72b1842520 | ||
|
|
2f7b008557 | ||
|
|
97361e010e | ||
|
|
a30920ed70 | ||
|
|
4509b67ed9 | ||
|
|
e6fd618900 | ||
|
|
9a48e442d5 | ||
|
|
9e3afe73c6 | ||
|
|
d90da6571e | ||
|
|
19e1014f07 | ||
|
|
cd5806ed22 | ||
|
|
0c63e96d0f | ||
|
|
2271df172c | ||
|
|
5995079e17 | ||
|
|
49e6412c3c | ||
|
|
3316e88d38 | ||
|
|
5501c9c587 | ||
|
|
1d0bb67227 | ||
|
|
2dd5e93a7c | ||
|
|
31f19303ec | ||
|
|
eaa1df636d | ||
|
|
2c07a1922c | ||
|
|
0d4fc5d94a | ||
|
|
b641a87455 | ||
|
|
773be3cfd1 | ||
|
|
2b7a89b27f | ||
|
|
ba1607686f | ||
|
|
6375586ff9 | ||
|
|
17da3c7a5c | ||
|
|
9f836ff356 | ||
|
|
35355f6cb7 |
13
.github/workflows/release.yml
vendored
13
.github/workflows/release.yml
vendored
@@ -3,6 +3,8 @@ name: Release
|
||||
on:
|
||||
release:
|
||||
types: [ published ]
|
||||
workflow_dispatch:
|
||||
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
@@ -20,9 +22,18 @@ jobs:
|
||||
- name: Publish
|
||||
run: |
|
||||
dotnet publish app/GHelper.sln --configuration Release --runtime win-x64 -p:PublishSingleFile=true --no-self-contained
|
||||
powershell Compress-Archive app/bin/x64/Release/net7.0-windows/win-x64/publish/* GHelper.zip
|
||||
powershell Compress-Archive app/bin/x64/Release/net7.0-windows/win-x64/publish/* GHelper-${{ github.sha }}.zip
|
||||
|
||||
- name: Upload
|
||||
if: github.event_name != 'workflow_dispatch'
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
gh release upload ${{ github.ref_name }} GHelper.zip
|
||||
|
||||
- name: Artifact
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: GHelper-release-${{ github.sha }}
|
||||
path: GHelper-*.zip
|
||||
|
||||
@@ -9,6 +9,7 @@ public static class AppConfig
|
||||
private static string configFile;
|
||||
|
||||
private static string? _model;
|
||||
private static string? _modelShort;
|
||||
private static string? _bios;
|
||||
|
||||
private static Dictionary<string, object> config = new Dictionary<string, object>();
|
||||
@@ -73,7 +74,7 @@ public static class AppConfig
|
||||
|
||||
public static (string, string) GetBiosAndModel()
|
||||
{
|
||||
if (_bios is not null && _model is not null) return (_bios, _model);
|
||||
if (_bios is not null && _modelShort is not null) return (_bios, _modelShort);
|
||||
|
||||
using (ManagementObjectSearcher objSearcher = new ManagementObjectSearcher(@"SELECT * FROM Win32_BIOS"))
|
||||
{
|
||||
@@ -85,16 +86,16 @@ public static class AppConfig
|
||||
string[] results = obj["SMBIOSBIOSVersion"].ToString().Split(".");
|
||||
if (results.Length > 1)
|
||||
{
|
||||
_model = results[0];
|
||||
_modelShort = results[0];
|
||||
_bios = results[1];
|
||||
}
|
||||
else
|
||||
{
|
||||
_model = obj["SMBIOSBIOSVersion"].ToString();
|
||||
_modelShort = obj["SMBIOSBIOSVersion"].ToString();
|
||||
}
|
||||
}
|
||||
|
||||
return (_bios, _model);
|
||||
return (_bios, _modelShort);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -327,7 +328,7 @@ public static class AppConfig
|
||||
// Devices with bugged bios command to change brightness
|
||||
public static bool SwappedBrightness()
|
||||
{
|
||||
return ContainsModel("FA506IH") || ContainsModel("FX506LU");
|
||||
return ContainsModel("FA506IH") || ContainsModel("FX506LU") || ContainsModel("FX506IC") || ContainsModel("FX506LH");
|
||||
}
|
||||
|
||||
|
||||
@@ -344,7 +345,7 @@ public static class AppConfig
|
||||
|
||||
public static bool IsSingleColor()
|
||||
{
|
||||
return ContainsModel("GA401");
|
||||
return ContainsModel("GA401") || ContainsModel("FX517Z") || ContainsModel("X13");
|
||||
}
|
||||
|
||||
public static bool IsStrix()
|
||||
@@ -352,6 +353,11 @@ public static class AppConfig
|
||||
return ContainsModel("Strix") || ContainsModel("Scar");
|
||||
}
|
||||
|
||||
public static bool IsStrixLimitedRGB()
|
||||
{
|
||||
return ContainsModel("G614JV") || ContainsModel("G614JZ");
|
||||
}
|
||||
|
||||
public static bool IsZ13()
|
||||
{
|
||||
return ContainsModel("Z13");
|
||||
|
||||
@@ -121,7 +121,7 @@ namespace GHelper
|
||||
{
|
||||
timer.Elapsed += Timer_Elapsed;
|
||||
|
||||
isSingleColor = AppConfig.ContainsModel("GA401") || AppConfig.ContainsModel("X13"); // Mono Color
|
||||
isSingleColor = AppConfig.IsSingleColor(); // Mono Color
|
||||
|
||||
var device = GetDevice(AURA_HID_ID);
|
||||
if (device is not null && (device.Attributes.Version == 22 || device.Attributes.Version == 23) && (AppConfig.ContainsModel("GA402X") || AppConfig.ContainsModel("GA402N"))) isSingleColor = true;
|
||||
@@ -211,7 +211,7 @@ namespace GHelper
|
||||
return _modes;
|
||||
}
|
||||
|
||||
if (AppConfig.IsStrix())
|
||||
if (AppConfig.IsStrix() && !AppConfig.IsStrixLimitedRGB())
|
||||
{
|
||||
return _modesStrix;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,21 @@
|
||||
internal class BatteryControl
|
||||
{
|
||||
|
||||
public static void ToggleBatteryLimitFull()
|
||||
{
|
||||
if (AppConfig.Is("charge_full")) SetBatteryChargeLimit();
|
||||
else SetBatteryLimitFull();
|
||||
}
|
||||
|
||||
public static void SetBatteryLimitFull()
|
||||
{
|
||||
AppConfig.Set("charge_full", 1);
|
||||
Program.acpi.DeviceSet(AsusACPI.BatteryLimit, 100, "BatteryLimit");
|
||||
|
||||
Program.settingsForm.VisualiseBatteryFull();
|
||||
}
|
||||
|
||||
|
||||
public static void SetBatteryChargeLimit(int limit = -1)
|
||||
{
|
||||
|
||||
@@ -10,10 +25,11 @@
|
||||
if (limit < 40 || limit > 100) return;
|
||||
|
||||
Program.acpi.DeviceSet(AsusACPI.BatteryLimit, limit, "BatteryLimit");
|
||||
Program.settingsForm.VisualiseBattery(limit);
|
||||
|
||||
AppConfig.Set("charge_limit", limit);
|
||||
AppConfig.Set("charge_full", 0);
|
||||
|
||||
Program.settingsForm.VisualiseBattery(limit);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -160,9 +160,11 @@ namespace GHelper.Display
|
||||
device.monitorFriendlyDeviceName == internalName)
|
||||
{
|
||||
if (log) Logger.WriteLine(device.monitorDevicePath + " " + device.outputTechnology);
|
||||
|
||||
AppConfig.Set("internal_display", device.monitorFriendlyDeviceName);
|
||||
var names = device.monitorDevicePath.Split("#");
|
||||
if (names.Length > 0) return names[1];
|
||||
|
||||
if (names.Length > 1) return names[1];
|
||||
else return "";
|
||||
}
|
||||
}
|
||||
|
||||
33
app/Extra.cs
33
app/Extra.cs
@@ -276,22 +276,27 @@ namespace GHelper
|
||||
checkSleepBar.Visible = false;
|
||||
checkShutdownBar.Visible = false;
|
||||
|
||||
if (!AppConfig.IsZ13())
|
||||
{
|
||||
labelBacklightLid.Visible = false;
|
||||
checkAwakeLid.Visible = false;
|
||||
checkBootLid.Visible = false;
|
||||
checkSleepLid.Visible = false;
|
||||
checkShutdownLid.Visible = false;
|
||||
}
|
||||
|
||||
labelBacklightLogo.Visible = false;
|
||||
checkAwakeLogo.Visible = false;
|
||||
checkBootLogo.Visible = false;
|
||||
checkSleepLogo.Visible = false;
|
||||
checkShutdownLogo.Visible = false;
|
||||
if ((!AppConfig.IsStrix() && !AppConfig.IsZ13()) || AppConfig.IsStrixLimitedRGB())
|
||||
{
|
||||
labelBacklightLid.Visible = false;
|
||||
checkAwakeLid.Visible = false;
|
||||
checkBootLid.Visible = false;
|
||||
checkSleepLid.Visible = false;
|
||||
checkShutdownLid.Visible = false;
|
||||
|
||||
labelBacklightKeyboard.Visible = false;
|
||||
}
|
||||
labelBacklightLogo.Visible = false;
|
||||
checkAwakeLogo.Visible = false;
|
||||
checkBootLogo.Visible = false;
|
||||
checkSleepLogo.Visible = false;
|
||||
checkShutdownLogo.Visible = false;
|
||||
|
||||
}
|
||||
|
||||
if (!AppConfig.IsStrix() && !AppConfig.IsZ13())
|
||||
{
|
||||
labelBacklightKeyboard.Visible = false;
|
||||
}
|
||||
|
||||
//checkAutoToggleClamshellMode.Visible = clamshellControl.IsExternalDisplayConnected();
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
<AssemblyVersion>0.127</AssemblyVersion>
|
||||
<AssemblyVersion>0.129</AssemblyVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
||||
@@ -165,7 +165,7 @@ namespace GHelper.Gpu
|
||||
|
||||
if (status == 0 && eco == 1 && hardWay) RestartGPU();
|
||||
|
||||
await Task.Delay(TimeSpan.FromMilliseconds(100));
|
||||
await Task.Delay(TimeSpan.FromMilliseconds(AppConfig.Get("refresh_delay", 500)));
|
||||
|
||||
settings.Invoke(delegate
|
||||
{
|
||||
|
||||
@@ -10,8 +10,8 @@ public class Startup
|
||||
|
||||
public static bool IsScheduled()
|
||||
{
|
||||
TaskService taskService = new TaskService();
|
||||
return (taskService.RootFolder.AllTasks.Any(t => t.Name == taskName));
|
||||
using (TaskService taskService = new TaskService())
|
||||
return (taskService.RootFolder.AllTasks.Any(t => t.Name == taskName));
|
||||
}
|
||||
|
||||
public static void ReScheduleAdmin()
|
||||
@@ -23,6 +23,26 @@ public class Startup
|
||||
}
|
||||
}
|
||||
|
||||
public static void StartupCheck()
|
||||
{
|
||||
using (TaskService taskService = new TaskService())
|
||||
{
|
||||
var task = taskService.RootFolder.AllTasks.FirstOrDefault(t => t.Name == taskName);
|
||||
if (task != null)
|
||||
{
|
||||
string strExeFilePath = Application.ExecutablePath.Trim();
|
||||
string action = task.Definition.Actions.FirstOrDefault()!.ToString().Trim();
|
||||
if (!strExeFilePath.Equals(action, StringComparison.OrdinalIgnoreCase) && !File.Exists(action))
|
||||
{
|
||||
Logger.WriteLine("File doesn't exist: " + action);
|
||||
Logger.WriteLine("Rescheduling to: " + strExeFilePath);
|
||||
UnSchedule();
|
||||
Schedule();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void Schedule()
|
||||
{
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ using GHelper.Mode;
|
||||
using Microsoft.Win32;
|
||||
using System.Diagnostics;
|
||||
using System.Management;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace GHelper.Input
|
||||
{
|
||||
@@ -142,25 +143,59 @@ namespace GHelper.Input
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static int[] ParseHexValues(string input)
|
||||
{
|
||||
string pattern = @"\b(0x[0-9A-Fa-f]{1,2}|[0-9A-Fa-f]{1,2})\b";
|
||||
|
||||
if (!Regex.IsMatch(input, $"^{pattern}(\\s+{pattern})*$")) return new int[0];
|
||||
|
||||
MatchCollection matches = Regex.Matches(input, pattern);
|
||||
|
||||
int[] hexValues = new int[matches.Count];
|
||||
|
||||
for (int i = 0; i < matches.Count; i++)
|
||||
{
|
||||
string hexValueStr = matches[i].Value;
|
||||
int hexValue = int.Parse(hexValueStr.StartsWith("0x", StringComparison.OrdinalIgnoreCase)
|
||||
? hexValueStr.Substring(2)
|
||||
: hexValueStr, System.Globalization.NumberStyles.HexNumber);
|
||||
|
||||
hexValues[i] = hexValue;
|
||||
}
|
||||
|
||||
return hexValues;
|
||||
}
|
||||
|
||||
|
||||
static void CustomKey(string configKey = "m3")
|
||||
{
|
||||
string command = AppConfig.GetString(configKey + "_custom");
|
||||
int intKey;
|
||||
int[] hexKeys = new int[0];
|
||||
|
||||
try
|
||||
{
|
||||
intKey = Convert.ToInt32(command, 16);
|
||||
hexKeys = ParseHexValues(command);
|
||||
}
|
||||
catch
|
||||
{
|
||||
intKey = -1;
|
||||
}
|
||||
|
||||
|
||||
if (intKey > 0)
|
||||
KeyboardHook.KeyPress((Keys)intKey);
|
||||
else
|
||||
LaunchProcess(command);
|
||||
switch (hexKeys.Length)
|
||||
{
|
||||
case 1:
|
||||
KeyboardHook.KeyPress((Keys)hexKeys[0]);
|
||||
break;
|
||||
case 2:
|
||||
KeyboardHook.KeyKeyPress((Keys)hexKeys[0], (Keys)hexKeys[1]);
|
||||
break;
|
||||
case 3:
|
||||
KeyboardHook.KeyKeyKeyPress((Keys)hexKeys[0], (Keys)hexKeys[1], (Keys)hexKeys[3]);
|
||||
break;
|
||||
default:
|
||||
LaunchProcess(command);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -264,7 +299,7 @@ namespace GHelper.Input
|
||||
SetBrightness(+10);
|
||||
break;
|
||||
case Keys.F9:
|
||||
KeyboardHook.KeyWinPress(Keys.P);
|
||||
KeyboardHook.KeyKeyPress(Keys.LWin, Keys.P);
|
||||
break;
|
||||
case Keys.F10:
|
||||
HandleOptimizationEvent(107);
|
||||
@@ -273,7 +308,7 @@ namespace GHelper.Input
|
||||
HandleOptimizationEvent(108);
|
||||
break;
|
||||
case Keys.F12:
|
||||
KeyboardHook.KeyWinPress(Keys.A);
|
||||
KeyboardHook.KeyKeyPress(Keys.LWin, Keys.A);
|
||||
break;
|
||||
case Keys.VolumeDown:
|
||||
KeyProcess("m1");
|
||||
@@ -442,7 +477,7 @@ namespace GHelper.Input
|
||||
|
||||
static void ToggleTouchpad()
|
||||
{
|
||||
KeyboardHook.KeyCtrlWinPress(Keys.F24);
|
||||
KeyboardHook.KeyKeyKeyPress(Keys.ControlKey, Keys.LWin, Keys.F24);
|
||||
}
|
||||
|
||||
public static void ToggleArrowLock()
|
||||
|
||||
@@ -26,23 +26,23 @@ public sealed class KeyboardHook : IDisposable
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
}
|
||||
|
||||
public static void KeyWinPress(Keys key)
|
||||
public static void KeyKeyPress(Keys key, Keys key2)
|
||||
{
|
||||
keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
}
|
||||
|
||||
public static void KeyCtrlWinPress(Keys key)
|
||||
public static void KeyKeyKeyPress(Keys key, Keys key2, Keys key3)
|
||||
{
|
||||
keybd_event(VK_LCONTROL, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
keybd_event((byte)key3, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
|
||||
keybd_event((byte)key3, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
keybd_event(VK_LCONTROL, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
209
app/Peripherals/Mouse/Models/Chakram.cs
Normal file
209
app/Peripherals/Mouse/Models/Chakram.cs
Normal file
@@ -0,0 +1,209 @@
|
||||
|
||||
namespace GHelper.Peripherals.Mouse.Models
|
||||
{
|
||||
//P704
|
||||
public class Chakram : AsusMouse
|
||||
{
|
||||
public Chakram() : base(0x0B05, 0x18E5, "mi_00", true) {
|
||||
|
||||
}
|
||||
|
||||
protected Chakram(ushort vendorId, bool wireless) : base(0x0B05, vendorId, "mi_00", wireless)
|
||||
{
|
||||
}
|
||||
public override int DPIProfileCount()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
public override string GetDisplayName()
|
||||
{
|
||||
return "ROG Chakram (Wireless)";
|
||||
}
|
||||
|
||||
public override PollingRate[] SupportedPollingrates()
|
||||
{
|
||||
return new PollingRate[] {
|
||||
PollingRate.PR125Hz,
|
||||
PollingRate.PR250Hz,
|
||||
PollingRate.PR500Hz,
|
||||
PollingRate.PR1000Hz
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public override int ProfileCount()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
public override int MaxDPI()
|
||||
{
|
||||
return 16_000;
|
||||
}
|
||||
|
||||
public override bool HasDebounceSetting()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
public override bool HasLiftOffSetting()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
public override int DPIIncrements()
|
||||
{
|
||||
return 100;
|
||||
}
|
||||
|
||||
public override bool HasRGB()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
public override int MaxBrightness()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
public override LightingZone[] SupportedLightingZones()
|
||||
{
|
||||
return new LightingZone[] { LightingZone.Logo, LightingZone.Scrollwheel, LightingZone.Underglow };
|
||||
}
|
||||
|
||||
public override bool HasAutoPowerOff()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasAngleSnapping()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasAngleTuning()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool HasLowBatteryWarning()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override int LowBatteryWarningStep()
|
||||
{
|
||||
return 25;
|
||||
}
|
||||
|
||||
public override int LowBatteryWarningMax()
|
||||
{
|
||||
return 100;
|
||||
}
|
||||
|
||||
protected override int ParseBattery(byte[] packet)
|
||||
{
|
||||
return base.ParseBattery(packet) * 25;
|
||||
}
|
||||
protected override int ParseLowBatteryWarning(byte[] packet)
|
||||
{
|
||||
return base.ParseLowBatteryWarning(packet) * 25;
|
||||
}
|
||||
protected override byte[] GetUpdateEnergySettingsPacket(int lowBatteryWarning, PowerOffSetting powerOff)
|
||||
{
|
||||
return base.GetUpdateEnergySettingsPacket(lowBatteryWarning / 25, powerOff);
|
||||
}
|
||||
protected override byte[] GetReadLightingModePacket(LightingZone zone)
|
||||
{
|
||||
return new byte[] { 0x00, 0x12, 0x03, 0x00 };
|
||||
}
|
||||
|
||||
protected LightingSetting? ParseLightingSetting(byte[] packet, LightingZone zone)
|
||||
{
|
||||
if (packet[1] != 0x12 || packet[2] != 0x03)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
int offset = 5 + (((int)zone) * 5);
|
||||
|
||||
LightingSetting setting = new LightingSetting();
|
||||
|
||||
setting.LightingMode = LightingModeForIndex(packet[offset + 0]);
|
||||
setting.Brightness = packet[offset + 1];
|
||||
|
||||
setting.RGBColor = Color.FromArgb(packet[offset + 2], packet[offset + 3], packet[offset + 4]);
|
||||
|
||||
setting.AnimationDirection = SupportsAnimationDirection(setting.LightingMode)
|
||||
? (AnimationDirection)packet[21]
|
||||
: AnimationDirection.Clockwise;
|
||||
|
||||
if (setting.AnimationDirection != AnimationDirection.Clockwise
|
||||
&& setting.AnimationDirection != AnimationDirection.CounterClockwise)
|
||||
{
|
||||
setting.AnimationDirection = AnimationDirection.Clockwise;
|
||||
}
|
||||
|
||||
setting.RandomColor = SupportsRandomColor(setting.LightingMode) && packet[22] == 0x01;
|
||||
setting.AnimationSpeed = SupportsAnimationSpeed(setting.LightingMode)
|
||||
? (AnimationSpeed)packet[23]
|
||||
: AnimationSpeed.Medium;
|
||||
|
||||
//If the mouse reports an out of range value, which it does when the current setting has no speed option, chose medium as default
|
||||
if (setting.AnimationSpeed != AnimationSpeed.Fast
|
||||
&& setting.AnimationSpeed != AnimationSpeed.Medium
|
||||
&& setting.AnimationSpeed != AnimationSpeed.Slow)
|
||||
{
|
||||
setting.AnimationSpeed = AnimationSpeed.Medium;
|
||||
}
|
||||
return setting;
|
||||
}
|
||||
|
||||
public override void ReadLightingSetting()
|
||||
{
|
||||
if (!HasRGB())
|
||||
{
|
||||
return;
|
||||
}
|
||||
//Mouse sends all lighting zones in one response
|
||||
//21: Direction
|
||||
//22: Random
|
||||
//23: Speed
|
||||
// 20 21 22 23
|
||||
//00 12 03 00 00 [03 04 00 00 ff] [03 04 00 00 ff] [03 04 00 00 ff] 00 04 00 00
|
||||
//00 12 03 00 00 [05 02 ff 00 ff] [05 02 ff 00 ff] [05 02 ff 00 ff] 00 01 01 00
|
||||
//00 12 03 00 00 [03 01 00 00 ff] [03 01 00 00 ff] [03 01 00 00 ff] 00 01 00 01
|
||||
byte[]? response = WriteForResponse(GetReadLightingModePacket(LightingZone.All));
|
||||
if (response is null) return;
|
||||
|
||||
LightingZone[] lz = SupportedLightingZones();
|
||||
for (int i = 0; i < lz.Length; ++i)
|
||||
{
|
||||
LightingSetting? ls = ParseLightingSetting(response, lz[i]);
|
||||
if (ls is null)
|
||||
{
|
||||
Logger.WriteLine(GetDisplayName() + ": Failed to read RGB Setting for Zone " + lz[i].ToString());
|
||||
continue;
|
||||
}
|
||||
|
||||
Logger.WriteLine(GetDisplayName() + ": Read RGB Setting for Zone " + lz[i].ToString() + ": " + ls.ToString());
|
||||
LightingSetting[i] = ls;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool CanChangeDPIProfile()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class ChakramWired : Chakram
|
||||
{
|
||||
public ChakramWired() : base(0x18E3, false)
|
||||
{
|
||||
}
|
||||
|
||||
public override string GetDisplayName()
|
||||
{
|
||||
return "ROG Chakram (Wired)";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -66,6 +66,15 @@
|
||||
return new LightingZone[] { LightingZone.Logo };
|
||||
}
|
||||
|
||||
public override bool IsLightingModeSupported(LightingMode lightingMode)
|
||||
{
|
||||
return lightingMode == LightingMode.Static
|
||||
|| lightingMode == LightingMode.Breathing
|
||||
|| lightingMode == LightingMode.ColorCycle
|
||||
|| lightingMode == LightingMode.BatteryState
|
||||
|| lightingMode == LightingMode.React;
|
||||
}
|
||||
|
||||
public override bool HasAutoPowerOff()
|
||||
{
|
||||
return true;
|
||||
|
||||
170
app/Peripherals/Mouse/Models/TUFM5.cs
Normal file
170
app/Peripherals/Mouse/Models/TUFM5.cs
Normal file
@@ -0,0 +1,170 @@
|
||||
namespace GHelper.Peripherals.Mouse.Models
|
||||
{
|
||||
//P304
|
||||
public class TUFM5 : AsusMouse
|
||||
{
|
||||
public TUFM5() : base(0x0B05, 0x1898, "mi_02", false)
|
||||
{
|
||||
}
|
||||
|
||||
public override int DPIProfileCount()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
public override string GetDisplayName()
|
||||
{
|
||||
return "TUF GAMING M5";
|
||||
}
|
||||
|
||||
|
||||
public override PollingRate[] SupportedPollingrates()
|
||||
{
|
||||
return new PollingRate[] {
|
||||
PollingRate.PR125Hz,
|
||||
PollingRate.PR250Hz,
|
||||
PollingRate.PR500Hz,
|
||||
PollingRate.PR1000Hz
|
||||
};
|
||||
}
|
||||
|
||||
//Mouse has React mapped to 0x03 instead of 0x04 like other mice
|
||||
protected override byte IndexForLightingMode(LightingMode lightingMode)
|
||||
{
|
||||
if (lightingMode == LightingMode.React)
|
||||
{
|
||||
return 0x03;
|
||||
}
|
||||
return ((byte)lightingMode);
|
||||
}
|
||||
|
||||
//Mouse has React mapped to 0x03 instead of 0x04 like other mice
|
||||
protected override LightingMode LightingModeForIndex(byte lightingMode)
|
||||
{
|
||||
if (lightingMode == 0x03)
|
||||
{
|
||||
return LightingMode.React;
|
||||
}
|
||||
return base.LightingModeForIndex(lightingMode);
|
||||
|
||||
}
|
||||
|
||||
public override int ProfileCount()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
public override int MaxDPI()
|
||||
{
|
||||
return 6_200;
|
||||
}
|
||||
public override bool HasBattery()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool HasLiftOffSetting()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
public override LightingZone[] SupportedLightingZones()
|
||||
{
|
||||
return new LightingZone[] { LightingZone.Logo };
|
||||
}
|
||||
|
||||
public override bool HasRGB()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasAngleSnapping()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override int DPIIncrements()
|
||||
{
|
||||
return 100;
|
||||
}
|
||||
|
||||
public override bool CanChangeDPIProfile()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool HasDebounceSetting()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public override int MaxBrightness()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
public override bool IsLightingModeSupported(LightingMode lightingMode)
|
||||
{
|
||||
return lightingMode == LightingMode.Static
|
||||
|| lightingMode == LightingMode.Breathing
|
||||
|| lightingMode == LightingMode.ColorCycle
|
||||
|| lightingMode == LightingMode.React;
|
||||
}
|
||||
|
||||
|
||||
protected override byte[] GetUpdatePollingRatePacket(PollingRate pollingRate)
|
||||
{
|
||||
return new byte[] { reportId, 0x51, 0x31, 0x02, 0x00, (byte)pollingRate };
|
||||
}
|
||||
|
||||
protected override byte[] GetUpdateAngleSnappingPacket(bool angleSnapping)
|
||||
{
|
||||
return new byte[] { reportId, 0x51, 0x31, 0x04, 0x00, (byte)(angleSnapping ? 0x01 : 0x00) };
|
||||
}
|
||||
|
||||
protected override PollingRate ParsePollingRate(byte[] packet)
|
||||
{
|
||||
|
||||
if (packet[1] == 0x12 && packet[2] == 0x04 && packet[3] == 0x00)
|
||||
{
|
||||
return (PollingRate)packet[9];
|
||||
}
|
||||
|
||||
return PollingRate.PR125Hz;
|
||||
}
|
||||
|
||||
protected override bool ParseAngleSnapping(byte[] packet)
|
||||
{
|
||||
|
||||
if (packet[1] == 0x12 && packet[2] == 0x04 && packet[3] == 0x00)
|
||||
{
|
||||
return packet[13] == 0x01;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected override byte[] GetUpdateDebouncePacket(DebounceTime debounce)
|
||||
{
|
||||
return new byte[] { reportId, 0x51, 0x31, 0x03, 0x00, ((byte)debounce) };
|
||||
}
|
||||
|
||||
protected override DebounceTime ParseDebounce(byte[] packet)
|
||||
{
|
||||
if (packet[1] != 0x12 || packet[2] != 0x04 || packet[3] != 0x00)
|
||||
{
|
||||
return DebounceTime.MS12;
|
||||
}
|
||||
|
||||
if (packet[11] < 0x02)
|
||||
{
|
||||
return DebounceTime.MS12;
|
||||
}
|
||||
|
||||
if (packet[11] > 0x07)
|
||||
{
|
||||
return DebounceTime.MS32;
|
||||
}
|
||||
|
||||
return (DebounceTime)packet[11];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -200,11 +200,14 @@ namespace GHelper.Peripherals
|
||||
DetectMouse(new HarpeAceAimLabEditionWired());
|
||||
DetectMouse(new HarpeAceAimLabEditionOmni());
|
||||
DetectMouse(new TUFM3());
|
||||
DetectMouse(new TUFM5());
|
||||
DetectMouse(new KerisWirelssAimpoint());
|
||||
DetectMouse(new KerisWirelssAimpointWired());
|
||||
DetectMouse(new PugioII());
|
||||
DetectMouse(new PugioIIWired());
|
||||
DetectMouse(new StrixImpactII());
|
||||
DetectMouse(new Chakram());
|
||||
DetectMouse(new ChakramWired());
|
||||
}
|
||||
|
||||
public static void DetectMouse(AsusMouse am)
|
||||
|
||||
@@ -119,7 +119,7 @@ namespace GHelper
|
||||
|
||||
if (Environment.CurrentDirectory.Trim('\\') == Application.StartupPath.Trim('\\') || action.Length > 0)
|
||||
{
|
||||
SettingsToggle(action);
|
||||
SettingsToggle(action, false);
|
||||
}
|
||||
|
||||
Application.Run();
|
||||
@@ -156,17 +156,17 @@ namespace GHelper
|
||||
lastTheme = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
||||
}
|
||||
|
||||
if (settingsForm.fans is not null && settingsForm.fans.Text != "")
|
||||
settingsForm.fans.InitTheme();
|
||||
if (settingsForm.fansForm is not null && settingsForm.fansForm.Text != "")
|
||||
settingsForm.fansForm.InitTheme();
|
||||
|
||||
if (settingsForm.keyb is not null && settingsForm.keyb.Text != "")
|
||||
settingsForm.keyb.InitTheme();
|
||||
if (settingsForm.extraForm is not null && settingsForm.extraForm.Text != "")
|
||||
settingsForm.extraForm.InitTheme();
|
||||
|
||||
if (settingsForm.updates is not null && settingsForm.updates.Text != "")
|
||||
settingsForm.updates.InitTheme();
|
||||
if (settingsForm.updatesForm is not null && settingsForm.updatesForm.Text != "")
|
||||
settingsForm.updatesForm.InitTheme();
|
||||
|
||||
if (settingsForm.matrix is not null && settingsForm.matrix.Text != "")
|
||||
settingsForm.matrix.InitTheme();
|
||||
if (settingsForm.matrixForm is not null && settingsForm.matrixForm.Text != "")
|
||||
settingsForm.matrixForm.InitTheme();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -213,11 +213,21 @@ namespace GHelper
|
||||
SetAutoModes(true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static void SettingsToggle(string action = "")
|
||||
public static void SettingsToggle(string action = "", bool checkForFocus = true, bool trayClick = false)
|
||||
{
|
||||
if (settingsForm.Visible) settingsForm.HideAll();
|
||||
if (settingsForm.Visible)
|
||||
{
|
||||
// If helper window is not on top, this just focuses on the app again
|
||||
// Pressing the ghelper button again will hide the app
|
||||
if (checkForFocus && !settingsForm.HasAnyFocus(trayClick))
|
||||
{
|
||||
settingsForm.ShowAll();
|
||||
}
|
||||
else
|
||||
{
|
||||
settingsForm.HideAll();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -246,15 +256,18 @@ namespace GHelper
|
||||
gpuControl.RestartGPU(false);
|
||||
break;
|
||||
case "services":
|
||||
settingsForm.keyb = new Extra();
|
||||
settingsForm.keyb.Show();
|
||||
settingsForm.keyb.ServiesToggle();
|
||||
settingsForm.extraForm = new Extra();
|
||||
settingsForm.extraForm.Show();
|
||||
settingsForm.extraForm.ServiesToggle();
|
||||
break;
|
||||
case "uv":
|
||||
Startup.ReScheduleAdmin();
|
||||
settingsForm.FansToggle(2);
|
||||
modeControl.SetRyzen();
|
||||
break;
|
||||
default:
|
||||
Startup.StartupCheck();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -262,7 +275,7 @@ namespace GHelper
|
||||
static void TrayIcon_MouseClick(object? sender, MouseEventArgs e)
|
||||
{
|
||||
if (e.Button == MouseButtons.Left)
|
||||
SettingsToggle();
|
||||
SettingsToggle(trayClick: true);
|
||||
|
||||
}
|
||||
|
||||
@@ -279,5 +292,4 @@ namespace GHelper
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
9
app/Properties/Strings.Designer.cs
generated
9
app/Properties/Strings.Designer.cs
generated
@@ -465,6 +465,15 @@ namespace GHelper.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to One time charge to 100%.
|
||||
/// </summary>
|
||||
internal static string BatteryLimitFull {
|
||||
get {
|
||||
return ResourceManager.GetString("BatteryLimitFull", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to BIOS and Driver Updates.
|
||||
/// </summary>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Batteriezustand</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>One time charge to 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>BIOS und Treiber Updates</value>
|
||||
</data>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Salud de la batería</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>One time charge to 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>Actualizaciones de BIOS y Drivers</value>
|
||||
</data>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Santé de la batterie</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>One time charge to 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>Mise à jour BIOS et pilotes</value>
|
||||
</data>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Akku állapot</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>One time charge to 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>BIOS és illesztőprogram frissítések</value>
|
||||
</data>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Salute Batteria</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>One time charge to 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>Aggiornamenti Driver e BIOS</value>
|
||||
</data>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>배터리 수명</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>One time charge to 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>바이오스/드라이버 업데이트</value>
|
||||
</data>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Sveikata</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>One time charge to 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>BIOS ir tvarkyklių naujinimai</value>
|
||||
</data>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Stan baterii</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>Jednorazowo naładuj do 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>Aktualizacje BIOS i sterowników</value>
|
||||
</data>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Battery Health</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>One time charge to 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>BIOS and Driver Updates</value>
|
||||
</data>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Estado da bateria</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>One time charge to 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>Atualizações de Drivers e da BIOS</value>
|
||||
</data>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Battery Health</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>One time charge to 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>BIOS and Driver Updates</value>
|
||||
</data>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Sănătatea bateriei</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>One time charge to 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>Actualizări BIOS și Driver</value>
|
||||
</data>
|
||||
|
||||
@@ -235,7 +235,7 @@
|
||||
<value>Pil tasarrufu için 60Hz kullanılır ve şarja takıldığında eski haline getirir</value>
|
||||
</data>
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>Uyanık</value>
|
||||
<value>Uyanırken</value>
|
||||
</data>
|
||||
<data name="BacklightTimeout" xml:space="preserve">
|
||||
<value>Pildeyken klavye ışığının kapanma süresi</value>
|
||||
@@ -252,11 +252,14 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Pil Sağlığı</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>Bir seferlik %100 şarj etme</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>BIOS ve Sürücü Güncellemeleri</value>
|
||||
</data>
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Önyükleme</value>
|
||||
<value>Boot</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Boot Sesi</value>
|
||||
@@ -295,7 +298,7 @@
|
||||
<value>Ekran overdrive özelliğini devre dışı bırak</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>Pil boşalıyor</value>
|
||||
<value>Şarj azalıyor</value>
|
||||
</data>
|
||||
<data name="DownloadUpdate" xml:space="preserve">
|
||||
<value>İndir</value>
|
||||
@@ -393,16 +396,16 @@ Yine de devam etmek istiyor musunuz?</value>
|
||||
<value>Yüksek</value>
|
||||
</data>
|
||||
<data name="KeyBindings" xml:space="preserve">
|
||||
<value>Tuş Bağlantıları</value>
|
||||
<value>Tuş Atamaları</value>
|
||||
</data>
|
||||
<data name="Keyboard" xml:space="preserve">
|
||||
<value>Klavye</value>
|
||||
</data>
|
||||
<data name="KillGpuApps" xml:space="preserve">
|
||||
<value>Eco'ya geçerken dGPU kullanan tüm uygulamaları durdur</value>
|
||||
<value>Eco'ya geçerken harici GPU'yu kullanan tüm uygulamaları durdur</value>
|
||||
</data>
|
||||
<data name="LaptopBacklight" xml:space="preserve">
|
||||
<value>Aydınlatması</value>
|
||||
<value>Laptop Aydınlatması</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>Laptop Klavyesi</value>
|
||||
@@ -429,7 +432,7 @@ Yine de devam etmek istiyor musunuz?</value>
|
||||
<value>Ses Görselleştirici</value>
|
||||
</data>
|
||||
<data name="MatrixBanner" xml:space="preserve">
|
||||
<value>Matrix Banner</value>
|
||||
<value>Binary Banner</value>
|
||||
</data>
|
||||
<data name="MatrixBright" xml:space="preserve">
|
||||
<value>Parlak</value>
|
||||
@@ -498,7 +501,7 @@ Yine de devam etmek istiyor musunuz?</value>
|
||||
<value>Yeni güncellemeler</value>
|
||||
</data>
|
||||
<data name="NoNewUpdates" xml:space="preserve">
|
||||
<value>Yeni güncelleme yok</value>
|
||||
<value>Güncelleme yok</value>
|
||||
</data>
|
||||
<data name="NotConnected" xml:space="preserve">
|
||||
<value>Bağlantı Yok</value>
|
||||
@@ -552,7 +555,7 @@ Yine de devam etmek istiyor musunuz?</value>
|
||||
<value>Çıkış Yap</value>
|
||||
</data>
|
||||
<data name="RestartGPU" xml:space="preserve">
|
||||
<value>Bir şey harici GPU'yu kullanıyor ve Eco modunu engelliyor. G-Helper aygıt yöneticisinde harici Gpu'yu yeniden başlatmayı denesin mi? (Kendi sorumluluğunuzdadır)</value>
|
||||
<value>Bir şey harici GPU'yu kullanıyor ve Eco modunu engelliyor. G-Helper aygıt yöneticisinde harici GPU'yu yeniden başlatmayı denesin mi? (Kendi sorumluluğunuzdadır)</value>
|
||||
</data>
|
||||
<data name="RPM" xml:space="preserve">
|
||||
<value>RPM</value>
|
||||
@@ -564,10 +567,10 @@ Yine de devam etmek istiyor musunuz?</value>
|
||||
<value>Screenpad Parlaklığını Azalt</value>
|
||||
</data>
|
||||
<data name="ScreenPadUp" xml:space="preserve">
|
||||
<value>Screenpad Parlaklığını Arttır</value>
|
||||
<value>Screenpad Parlaklığını Artır</value>
|
||||
</data>
|
||||
<data name="Shutdown" xml:space="preserve">
|
||||
<value>Kapalı</value>
|
||||
<value>Kapatma</value>
|
||||
</data>
|
||||
<data name="Silent" xml:space="preserve">
|
||||
<value>Sessiz</value>
|
||||
@@ -600,7 +603,7 @@ Yine de devam etmek istiyor musunuz?</value>
|
||||
<value>Hizmetler Durduruluyor</value>
|
||||
</data>
|
||||
<data name="ToggleAura" xml:space="preserve">
|
||||
<value>Aura'yı Değiştir</value>
|
||||
<value>Aura'yı Kullan</value>
|
||||
</data>
|
||||
<data name="ToggleClamshellMode" xml:space="preserve">
|
||||
<value>Otomatik Clamshell Modunu Aç</value>
|
||||
@@ -642,10 +645,10 @@ Yine de devam etmek istiyor musunuz?</value>
|
||||
<value>Sesi Azalt</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>Ses Kısma</value>
|
||||
<value>Sesi Kapat</value>
|
||||
</data>
|
||||
<data name="VolumeUp" xml:space="preserve">
|
||||
<value>Sesi Arttır</value>
|
||||
<value>Sesi Artır</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>Uygulama penceresini her zaman en üstte tut</value>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Стан батареї</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>One time charge to 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>Оновлення BIOS та драйверів</value>
|
||||
</data>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>Sức khoẻ pin</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>One time charge to 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>Cập nhật BIOS và driver</value>
|
||||
</data>
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="Acceleration" xml:space="preserve">
|
||||
<value>Acceleration</value>
|
||||
<value>加速</value>
|
||||
</data>
|
||||
<data name="ACPIError" xml:space="preserve">
|
||||
<value>无法连接到ASUS ACPI。 没有它应用程序将无法运行。 请尝试安装Asus System Control Interface驱动。</value>
|
||||
@@ -223,7 +223,7 @@
|
||||
<value>滚轮</value>
|
||||
</data>
|
||||
<data name="AuraZoneUnderglow" xml:space="preserve">
|
||||
<value>Underglow</value>
|
||||
<value>底灯</value>
|
||||
</data>
|
||||
<data name="AutoApply" xml:space="preserve">
|
||||
<value>自动应用</value>
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>电池健康</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>一次性充电至 100%</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>BIOS 和驱动程序更新</value>
|
||||
</data>
|
||||
@@ -271,7 +274,7 @@
|
||||
<value>提高亮度</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Calibrate</value>
|
||||
<value>校准</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>充电中</value>
|
||||
@@ -286,7 +289,7 @@
|
||||
<value>自定义设置</value>
|
||||
</data>
|
||||
<data name="Deceleration" xml:space="preserve">
|
||||
<value>Deceleration</value>
|
||||
<value>减速</value>
|
||||
</data>
|
||||
<data name="Default" xml:space="preserve">
|
||||
<value>默认</value>
|
||||
@@ -310,12 +313,12 @@
|
||||
<value>集显模式</value>
|
||||
</data>
|
||||
<data name="EnableOptimusText" xml:space="preserve">
|
||||
<value>若未在nVIDIA控制面板的混合显示模式中设置为Optimus,关闭独立显卡可能会导致亮度控制在系统重启前都不可用。
|
||||
<value>NVIDIA 控制面板中的显示模式未设置为 Optimus 时,通过集显模式禁用独立显卡可能会使亮度控制出现问题,直到下次重启后才能恢复。
|
||||
|
||||
确定还要继续吗?</value>
|
||||
</data>
|
||||
<data name="EnableOptimusTitle" xml:space="preserve">
|
||||
<value>NVIDIA 显示模式未设置为自动切换</value>
|
||||
<value>NVIDIA 显示模式未设置为 Optimus</value>
|
||||
</data>
|
||||
<data name="EnergySettings" xml:space="preserve">
|
||||
<value>电源设置</value>
|
||||
@@ -339,7 +342,7 @@
|
||||
<value>GPU 风扇配置文件</value>
|
||||
</data>
|
||||
<data name="FanProfileMid" xml:space="preserve">
|
||||
<value>中等风扇配置</value>
|
||||
<value>Mid 风扇配置文件</value>
|
||||
</data>
|
||||
<data name="FanProfiles" xml:space="preserve">
|
||||
<value>风扇配置</value>
|
||||
@@ -462,7 +465,7 @@
|
||||
<value>分钟</value>
|
||||
</data>
|
||||
<data name="Minutes" xml:space="preserve">
|
||||
<value>分组</value>
|
||||
<value>分钟</value>
|
||||
</data>
|
||||
<data name="MouseAngleSnapping" xml:space="preserve">
|
||||
<value>角度校正</value>
|
||||
@@ -474,7 +477,7 @@
|
||||
<value>按键响应</value>
|
||||
</data>
|
||||
<data name="MouseLiftOffDistance" xml:space="preserve">
|
||||
<value>静默高度</value>
|
||||
<value>响应高度</value>
|
||||
</data>
|
||||
<data name="MouseLowBatteryWarning" xml:space="preserve">
|
||||
<value>低于该电量时警告</value>
|
||||
|
||||
@@ -252,6 +252,9 @@
|
||||
<data name="BatteryHealth" xml:space="preserve">
|
||||
<value>電池健康度</value>
|
||||
</data>
|
||||
<data name="BatteryLimitFull" xml:space="preserve">
|
||||
<value>僅本次將電力充滿</value>
|
||||
</data>
|
||||
<data name="BiosAndDriverUpdates" xml:space="preserve">
|
||||
<value>BIOS與驅動程式更新 Updates</value>
|
||||
</data>
|
||||
|
||||
35
app/Settings.Designer.cs
generated
35
app/Settings.Designer.cs
generated
@@ -40,6 +40,7 @@ namespace GHelper
|
||||
labelMatrix = new Label();
|
||||
checkMatrix = new CheckBox();
|
||||
panelBattery = new Panel();
|
||||
buttonBatteryFull = new RButton();
|
||||
sliderBattery = new Slider();
|
||||
panelBatteryTitle = new Panel();
|
||||
labelBattery = new Label();
|
||||
@@ -278,6 +279,7 @@ namespace GHelper
|
||||
//
|
||||
panelBattery.AutoSize = true;
|
||||
panelBattery.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelBattery.Controls.Add(buttonBatteryFull);
|
||||
panelBattery.Controls.Add(sliderBattery);
|
||||
panelBattery.Controls.Add(panelBatteryTitle);
|
||||
panelBattery.Dock = DockStyle.Top;
|
||||
@@ -285,19 +287,39 @@ namespace GHelper
|
||||
panelBattery.Margin = new Padding(0);
|
||||
panelBattery.Name = "panelBattery";
|
||||
panelBattery.Padding = new Padding(20, 20, 20, 10);
|
||||
panelBattery.Size = new Size(827, 114);
|
||||
panelBattery.Size = new Size(827, 119);
|
||||
panelBattery.TabIndex = 5;
|
||||
//
|
||||
// buttonBatteryFull
|
||||
//
|
||||
buttonBatteryFull.Activated = false;
|
||||
buttonBatteryFull.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
buttonBatteryFull.BackColor = SystemColors.ControlLight;
|
||||
buttonBatteryFull.BorderColor = Color.Transparent;
|
||||
buttonBatteryFull.BorderRadius = 2;
|
||||
buttonBatteryFull.FlatAppearance.BorderSize = 0;
|
||||
buttonBatteryFull.FlatStyle = FlatStyle.Flat;
|
||||
buttonBatteryFull.Font = new Font("Segoe UI", 7.125F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
buttonBatteryFull.ForeColor = SystemColors.ControlDark;
|
||||
buttonBatteryFull.Location = new Point(730, 66);
|
||||
buttonBatteryFull.Margin = new Padding(0);
|
||||
buttonBatteryFull.Name = "buttonBatteryFull";
|
||||
buttonBatteryFull.Secondary = true;
|
||||
buttonBatteryFull.Size = new Size(73, 36);
|
||||
buttonBatteryFull.TabIndex = 41;
|
||||
buttonBatteryFull.Text = "100%";
|
||||
buttonBatteryFull.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// sliderBattery
|
||||
//
|
||||
sliderBattery.AccessibleName = "Battery Charge Limit";
|
||||
sliderBattery.Dock = DockStyle.Top;
|
||||
sliderBattery.Location = new Point(20, 64);
|
||||
sliderBattery.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
sliderBattery.Location = new Point(20, 65);
|
||||
sliderBattery.Margin = new Padding(4);
|
||||
sliderBattery.Max = 100;
|
||||
sliderBattery.Min = 40;
|
||||
sliderBattery.Name = "sliderBattery";
|
||||
sliderBattery.Size = new Size(787, 40);
|
||||
sliderBattery.Size = new Size(716, 40);
|
||||
sliderBattery.Step = 5;
|
||||
sliderBattery.TabIndex = 20;
|
||||
sliderBattery.Text = "sliderBattery";
|
||||
@@ -354,7 +376,7 @@ namespace GHelper
|
||||
panelFooter.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelFooter.Controls.Add(tableButtons);
|
||||
panelFooter.Dock = DockStyle.Top;
|
||||
panelFooter.Location = new Point(11, 1435);
|
||||
panelFooter.Location = new Point(11, 1440);
|
||||
panelFooter.Margin = new Padding(0);
|
||||
panelFooter.Name = "panelFooter";
|
||||
panelFooter.Padding = new Padding(20);
|
||||
@@ -1232,7 +1254,7 @@ namespace GHelper
|
||||
panelVersion.Controls.Add(labelCharge);
|
||||
panelVersion.Controls.Add(checkStartup);
|
||||
panelVersion.Dock = DockStyle.Top;
|
||||
panelVersion.Location = new Point(11, 1379);
|
||||
panelVersion.Location = new Point(11, 1384);
|
||||
panelVersion.Margin = new Padding(4);
|
||||
panelVersion.Name = "panelVersion";
|
||||
panelVersion.Size = new Size(827, 56);
|
||||
@@ -1550,5 +1572,6 @@ namespace GHelper
|
||||
private RButton buttonUpdates;
|
||||
private Label labelCharge;
|
||||
private RButton buttonFnLock;
|
||||
private RButton buttonBatteryFull;
|
||||
}
|
||||
}
|
||||
155
app/Settings.cs
155
app/Settings.cs
@@ -32,16 +32,19 @@ namespace GHelper
|
||||
|
||||
public static System.Timers.Timer sensorTimer = default!;
|
||||
|
||||
public Matrix? matrix;
|
||||
public Fans? fans;
|
||||
public Extra? keyb;
|
||||
public Updates? updates;
|
||||
public Matrix? matrixForm;
|
||||
public Fans? fansForm;
|
||||
public Extra? extraForm;
|
||||
public Updates? updatesForm;
|
||||
|
||||
static long lastRefresh;
|
||||
static long lastBatteryRefresh;
|
||||
static long lastLostFocus;
|
||||
|
||||
bool isGpuSection = true;
|
||||
|
||||
bool batteryMouseOver = false;
|
||||
bool batteryFullMouseOver = false;
|
||||
|
||||
public SettingsForm()
|
||||
{
|
||||
@@ -86,6 +89,7 @@ namespace GHelper
|
||||
buttonUpdates.Text = Properties.Strings.Updates;
|
||||
|
||||
FormClosing += SettingsForm_FormClosing;
|
||||
Deactivate += SettingsForm_LostFocus;
|
||||
|
||||
buttonSilent.BorderColor = colorEco;
|
||||
buttonBalanced.BorderColor = colorStandard;
|
||||
@@ -193,6 +197,10 @@ namespace GHelper
|
||||
buttonPeripheral2.MouseEnter += ButtonPeripheral_MouseEnter;
|
||||
buttonPeripheral3.MouseEnter += ButtonPeripheral_MouseEnter;
|
||||
|
||||
buttonBatteryFull.MouseEnter += ButtonBatteryFull_MouseEnter;
|
||||
buttonBatteryFull.MouseLeave += ButtonBatteryFull_MouseLeave;
|
||||
buttonBatteryFull.Click += ButtonBatteryFull_Click;
|
||||
|
||||
Text = "G-Helper " + (ProcessHelper.IsUserAdministrator() ? "—" : "-") + " " + AppConfig.GetModelShort();
|
||||
TopMost = AppConfig.Is("topmost");
|
||||
|
||||
@@ -206,6 +214,27 @@ namespace GHelper
|
||||
panelPerformance.Focus();
|
||||
}
|
||||
|
||||
private void SettingsForm_LostFocus(object? sender, EventArgs e)
|
||||
{
|
||||
lastLostFocus = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
||||
}
|
||||
|
||||
private void ButtonBatteryFull_Click(object? sender, EventArgs e)
|
||||
{
|
||||
BatteryControl.ToggleBatteryLimitFull();
|
||||
}
|
||||
|
||||
private void ButtonBatteryFull_MouseLeave(object? sender, EventArgs e)
|
||||
{
|
||||
batteryFullMouseOver = false;
|
||||
RefreshSensors(true);
|
||||
}
|
||||
|
||||
private void ButtonBatteryFull_MouseEnter(object? sender, EventArgs e)
|
||||
{
|
||||
batteryFullMouseOver = true;
|
||||
labelCharge.Text = Properties.Strings.BatteryLimitFull;
|
||||
}
|
||||
|
||||
private void SettingsForm_Resize(object? sender, EventArgs e)
|
||||
{
|
||||
@@ -260,21 +289,26 @@ namespace GHelper
|
||||
|
||||
private void ButtonUpdates_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (updates == null || updates.Text == "")
|
||||
if (updatesForm == null || updatesForm.Text == "")
|
||||
{
|
||||
updates = new Updates();
|
||||
updates.Show();
|
||||
updatesForm = new Updates();
|
||||
AddOwnedForm(updatesForm);
|
||||
}
|
||||
|
||||
if (updatesForm.Visible)
|
||||
{
|
||||
updatesForm.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
updates.Close();
|
||||
updatesForm.Show();
|
||||
}
|
||||
}
|
||||
|
||||
public void VisualiseMatrix(string image)
|
||||
{
|
||||
if (matrix == null || matrix.Text == "") return;
|
||||
matrix.VisualiseMatrix(image);
|
||||
if (matrixForm == null || matrixForm.Text == "") return;
|
||||
matrixForm.VisualiseMatrix(image);
|
||||
}
|
||||
|
||||
protected override void WndProc(ref Message m)
|
||||
@@ -522,19 +556,20 @@ namespace GHelper
|
||||
private void ButtonMatrix_Click(object? sender, EventArgs e)
|
||||
{
|
||||
|
||||
if (matrix == null || matrix.Text == "")
|
||||
if (matrixForm == null || matrixForm.Text == "")
|
||||
{
|
||||
matrix = new Matrix();
|
||||
matrixForm = new Matrix();
|
||||
AddOwnedForm(matrixForm);
|
||||
}
|
||||
|
||||
if (matrix.Visible)
|
||||
if (matrixForm.Visible)
|
||||
{
|
||||
matrix.Close();
|
||||
matrixForm.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
matrix.FormPosition();
|
||||
matrix.Show();
|
||||
matrixForm.FormPosition();
|
||||
matrixForm.Show();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -589,14 +624,19 @@ namespace GHelper
|
||||
|
||||
private void ButtonKeyboard_Click(object? sender, EventArgs e)
|
||||
{
|
||||
if (keyb == null || keyb.Text == "")
|
||||
if (extraForm == null || extraForm.Text == "")
|
||||
{
|
||||
keyb = new Extra();
|
||||
keyb.Show();
|
||||
extraForm = new Extra();
|
||||
AddOwnedForm(extraForm);
|
||||
}
|
||||
|
||||
if (extraForm.Visible)
|
||||
{
|
||||
extraForm.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
keyb.Close();
|
||||
extraForm.Show();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -604,7 +644,7 @@ namespace GHelper
|
||||
{
|
||||
Invoke(delegate
|
||||
{
|
||||
if (fans != null && fans.Text != "") fans.InitAll();
|
||||
if (fansForm != null && fansForm.Text != "") fansForm.InitAll();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -612,26 +652,27 @@ namespace GHelper
|
||||
{
|
||||
Invoke(delegate
|
||||
{
|
||||
if (fans != null && fans.Text != "") fans.InitGPU();
|
||||
if (fansForm != null && fansForm.Text != "") fansForm.InitGPU();
|
||||
});
|
||||
}
|
||||
|
||||
public void FansToggle(int index = 0)
|
||||
{
|
||||
if (fans == null || fans.Text == "")
|
||||
if (fansForm == null || fansForm.Text == "")
|
||||
{
|
||||
fans = new Fans();
|
||||
fansForm = new Fans();
|
||||
AddOwnedForm(fansForm);
|
||||
}
|
||||
|
||||
if (fans.Visible)
|
||||
if (fansForm.Visible)
|
||||
{
|
||||
fans.Close();
|
||||
fansForm.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
fans.FormPosition();
|
||||
fans.Show();
|
||||
fans.ToggleNavigation(index);
|
||||
fansForm.FormPosition();
|
||||
fansForm.Show();
|
||||
fansForm.ToggleNavigation(index);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -817,14 +858,39 @@ namespace GHelper
|
||||
Application.Exit();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Closes all forms except the settings. Hides the settings
|
||||
/// </summary>
|
||||
public void HideAll()
|
||||
{
|
||||
this.Hide();
|
||||
if (fans != null && fans.Text != "") fans.Close();
|
||||
if (keyb != null && keyb.Text != "") keyb.Close();
|
||||
if (updates != null && updates.Text != "") updates.Close();
|
||||
if (fansForm != null && fansForm.Text != "") fansForm.Close();
|
||||
if (extraForm != null && extraForm.Text != "") extraForm.Close();
|
||||
if (updatesForm != null && updatesForm.Text != "") updatesForm.Close();
|
||||
if (matrixForm != null && matrixForm.Text != "") matrixForm.Close();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Brings all visible windows to the top, with settings being the focus
|
||||
/// </summary>
|
||||
public void ShowAll()
|
||||
{
|
||||
this.Activate();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check if any of fans, keyboard, update, or itself has focus
|
||||
/// </summary>
|
||||
/// <returns>Focus state</returns>
|
||||
public bool HasAnyFocus(bool lostFocusCheck = false)
|
||||
{
|
||||
return (fansForm != null && fansForm.ContainsFocus) ||
|
||||
(extraForm != null && extraForm.ContainsFocus) ||
|
||||
(updatesForm != null && updatesForm.ContainsFocus) ||
|
||||
(matrixForm != null && matrixForm.ContainsFocus) ||
|
||||
this.ContainsFocus ||
|
||||
(lostFocusCheck && Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastLostFocus) < 300);
|
||||
}
|
||||
|
||||
private void SettingsForm_FormClosing(object? sender, FormClosingEventArgs e)
|
||||
{
|
||||
@@ -906,7 +972,7 @@ namespace GHelper
|
||||
labelMidFan.Text = "Mid " + HardwareControl.midFan;
|
||||
|
||||
labelBattery.Text = battery;
|
||||
if (!batteryMouseOver) labelCharge.Text = charge;
|
||||
if (!batteryMouseOver && !batteryFullMouseOver) labelCharge.Text = charge;
|
||||
|
||||
//panelPerformance.AccessibleName = labelPerf.Text + " " + trayTip;
|
||||
});
|
||||
@@ -918,8 +984,8 @@ namespace GHelper
|
||||
|
||||
public void LabelFansResult(string text)
|
||||
{
|
||||
if (fans != null && fans.Text != "")
|
||||
fans.LabelFansResult(text);
|
||||
if (fansForm != null && fansForm.Text != "")
|
||||
fansForm.LabelFansResult(text);
|
||||
}
|
||||
|
||||
public void ShowMode(int mode)
|
||||
@@ -1035,7 +1101,8 @@ namespace GHelper
|
||||
buttonStopGPU.Visible = true;
|
||||
tableGPU.ColumnCount = 3;
|
||||
tableScreen.ColumnCount = 3;
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
buttonStopGPU.Visible = false;
|
||||
}
|
||||
@@ -1164,6 +1231,22 @@ namespace GHelper
|
||||
{
|
||||
labelBatteryTitle.Text = Properties.Strings.BatteryChargeLimit + ": " + limit.ToString() + "%";
|
||||
sliderBattery.Value = limit;
|
||||
VisualiseBatteryFull();
|
||||
}
|
||||
|
||||
public void VisualiseBatteryFull()
|
||||
{
|
||||
if (AppConfig.Is("charge_full"))
|
||||
{
|
||||
buttonBatteryFull.BackColor = colorStandard;
|
||||
buttonBatteryFull.ForeColor = SystemColors.ControlLightLight;
|
||||
}
|
||||
else
|
||||
{
|
||||
buttonBatteryFull.BackColor = buttonSecond;
|
||||
buttonBatteryFull.ForeColor = SystemColors.ControlDark;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ You don't have to, it's purely optional. From my experience built in (in BIOS) p
|
||||
Click on them
|
||||
|
||||
#### When I try to apply a custom fan curve I get "BIOS rejected fan curve"
|
||||
TUF models from 2021 and older don't support custom fan curves at all. Most probably you didn't have them in Armoury as well?
|
||||
TUF models from 2021 and older don't support custom fan curves at all. Most probably you didn't have them in the Armoury as well?
|
||||
|
||||
#### I don't see a GPU temperature in G-helper
|
||||
Most probably either you are using Eco / Optimized mode and your dGPU is simply off, or your windows has put the dGPU into sleep to preserve power.
|
||||
@@ -110,7 +110,7 @@ Please check the system tray for a ``(G)`` icon. By default Windows is keen to h
|
||||
#### App crashes or doesn't work properly
|
||||
Open "Event Viewer" from the start menu, go to Windows Logs -> Application and check for recent Errors mentioning G-Helper. If you see one - please post a [new issue](https://github.com/seerge/g-helper/issues) with all details from this error.
|
||||
|
||||
#### Can I use MyASUS app along with G-Helper?
|
||||
#### Can I use the 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?
|
||||
@@ -123,7 +123,7 @@ Personally, I'm not a big fan of them, as they make colors very inaccurate. But
|
||||
Make sure that your dGPU is enabled (i.e. it's not in Eco mode). Open Fans + Power section and adjust core / memory clock offsets. They work the same as in armoury's manual mode. Please keep in mind that (unfortunately) you need admin permissions for that, and the app will ask you for them. (*)
|
||||
|
||||
#### How to Undervolt GPU
|
||||
Due to the way of how Core Clock offset works for GPU. When you increase clock offset you undervolt it at the same time (see picture)
|
||||
Due to the way the Core Clock offset works for the GPU. When you increase clock offset you undervolt it at the same time (see picture)
|
||||
1. Increase ``Core Clock Offset`` under ``Fans + Power -> GPU`` until your 3dmark / furmark / game runs stable. Start with +100, +150, +200 ... This should make your **scores / fps better within same power** / heat as before.
|
||||
2. Set ``Core Clock Limit`` to a certain value (it really depends on application / game that you use) **to lower your power** / heat consumption
|
||||
|
||||
@@ -250,7 +250,7 @@ Example (for default windows "balanced" power plan):
|
||||
```
|
||||
|
||||
### Alternative Activation for XG Mobile 6850XT
|
||||
If you experience situation when your XG Mobile doesn't work on full power when Activated. It's possible it needs "alternative" command to get activated.
|
||||
If you experience a situation when your XG Mobile doesn't work on full power when Activated. It's possible it needs an "alternative" command to get activated.
|
||||
To turn it on, add following line to config :
|
||||
```
|
||||
"xgm_special" : 1,
|
||||
@@ -258,7 +258,7 @@ To turn it on, add following line to config :
|
||||
|
||||
### Override UI theme
|
||||
|
||||
By default app would set UI theme from "app" theme in windows setting. You can override it to specific theme, or general windows theme
|
||||
By default the app would set the UI theme from the "app" theme in Windows setting. You can override it to specific theme, or general windows theme
|
||||
|
||||
```
|
||||
"ui_mode" : "dark",
|
||||
@@ -267,7 +267,7 @@ By default app would set UI theme from "app" theme in windows setting. You can o
|
||||
```
|
||||
|
||||
### Skip keyboard Aura initialisation on startup
|
||||
By default app would set last remembered RGB mode for keyboard on each launch. To disable it completely
|
||||
By default the app would set the last remembered RGB mode for the keyboard on each launch. To disable it completely
|
||||
|
||||
```
|
||||
"skip_aura" : 1,
|
||||
@@ -280,7 +280,7 @@ Disable app's OSD (for performance modes, keyboard backlight, etc.)
|
||||
```
|
||||
|
||||
### Disable "Tablet mode" on X13/X16
|
||||
To disable automatic touchpad toggling when laptop enteres / leaves tablet mode
|
||||
To disable automatic touchpad toggling when laptop enters / leaves tablet mode
|
||||
```
|
||||
"disable_tablet": 1,
|
||||
```
|
||||
@@ -296,20 +296,24 @@ If you don't want this bindings to work you can add
|
||||
"skip_hotkeys":1,
|
||||
```
|
||||
|
||||
### Toggle Performance Mode key binding
|
||||
### Toggle Performance Mode or Toggle App Window key binding
|
||||
|
||||
To change binding for Toggle Performance Modes to ``Ctrl + Shift + KEY``
|
||||
|
||||
```
|
||||
"keybind_profile": 116,
|
||||
```
|
||||
|
||||
To change binding for Toggle App Window to ``Ctrl + Shift + KEY``
|
||||
```
|
||||
"keybind_app": 123,
|
||||
```
|
||||
|
||||
Where 116 is [numerical code for desired key](https://www.oreilly.com/library/view/javascript-dhtml/9780596514082/apb.html). Put 0 to completely disable this binding.
|
||||
|
||||
|
||||
### Higher Maximum GPU Clock / Memory Offsets
|
||||
|
||||
By default under GPU section you can set up to +250/+250 for Core and Memory Clock Offset. To increase this value:
|
||||
By default under the GPU section you can set up to +250/+250 for Core and Memory Clock Offset. To increase this value:
|
||||
```
|
||||
"max_gpu_core": 300,
|
||||
"max_gpu_memory": 1500,
|
||||
@@ -322,7 +326,9 @@ Select ``Custom`` next to appropriate hotkey under ``Extra`` settings and do one
|
||||
1. To run any custom application - put a full path to exe into "action" text field, for example:
|
||||
``C:\Program Files\EA Games\Battlefield 2042\BF2042.exe``
|
||||
|
||||
2. To simulate any windows key - put appropriate keycode into the "action" field, for example ``0x2C`` for Print Screen.
|
||||
2. To simulate any windows key or key-combination - put appropriate keycode(s) into the "action" field separated by space.
|
||||
For example ``0x2C`` for ``Print Screen`` or ``0x11 0xA0 0x31`` for ``Ctrl+Shift+1``
|
||||
|
||||
Full list of keycodes https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes
|
||||
|
||||

|
||||
|
||||
Reference in New Issue
Block a user