mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dde554eebf |
30
.github/ISSUE_TEMPLATE/bug_report.md
vendored
30
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@@ -1,40 +1,38 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us improve
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**Clear scenario to Reproduce**
|
||||
**To Reproduce**
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. Explanation of an error or a bug
|
||||
4. See error
|
||||
|
||||
**Expected behavior**
|
||||
A clear and concise description of what you expected to happen.
|
||||
|
||||
**App Logs**
|
||||
Please include and attach log.txt from ``%AppData%\GHelper``
|
||||
|
||||
**Screenshots or screencasts**
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**Desktop (please complete the following information):**
|
||||
- OS: [e.g. Windows 11]
|
||||
- Laptop model
|
||||
- OS: [e.g. iOS]
|
||||
- Browser [e.g. chrome, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Asus software**
|
||||
- Armoury crate (or it's services installed)
|
||||
- MyASUS installed
|
||||
- Other Asus services running in background
|
||||
**Smartphone (please complete the following information):**
|
||||
- Device: [e.g. iPhone6]
|
||||
- OS: [e.g. iOS8.1]
|
||||
- Browser [e.g. stock browser, safari]
|
||||
- Version [e.g. 22]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
|
||||
## NOTE
|
||||
Bug reports without clear information or scenario to reproduce will be closed without answer.
|
||||
Please respect time of the developer. Thanks.
|
||||
|
||||
113
app/ASUSWmi.cs
113
app/ASUSWmi.cs
@@ -10,13 +10,8 @@ public class ASUSWmi
|
||||
const uint DSTS = 0x53545344;
|
||||
const uint DEVS = 0x53564544;
|
||||
|
||||
public const uint UniversalControl = 0x00100021;
|
||||
public const int KB_Light_Up = 0xc4;
|
||||
public const int KB_Light_Down = 0xc5;
|
||||
|
||||
public const uint CPU_Fan = 0x00110013;
|
||||
public const uint GPU_Fan = 0x00110014;
|
||||
public const uint Mid_Fan = 0x00110031;
|
||||
|
||||
public const uint PerformanceMode = 0x00120075; // Thermal Control
|
||||
|
||||
@@ -25,15 +20,9 @@ public class ASUSWmi
|
||||
|
||||
public const uint BatteryLimit = 0x00120057;
|
||||
public const uint ScreenOverdrive = 0x00050019;
|
||||
public const uint ScreenMiniled = 0x0005001E;
|
||||
|
||||
public const uint DevsCPUFanCurve = 0x00110024;
|
||||
public const uint DevsGPUFanCurve = 0x00110025;
|
||||
public const uint DevsMidFanCurve = 0x00110032;
|
||||
|
||||
public const int Temp_CPU = 0x00120094;
|
||||
public const int Temp_GPU = 0x00120097;
|
||||
|
||||
|
||||
public const int PPT_TotalA0 = 0x001200A0; // Total PPT on 2022 and CPU PPT on 2021
|
||||
public const int PPT_EDCA1 = 0x001200A1; // CPU EDC
|
||||
@@ -46,9 +35,6 @@ public class ASUSWmi
|
||||
public const int PPT_APUC1 = 0x001200C1;
|
||||
public const int PPT_APUC2 = 0x001200C2;
|
||||
|
||||
public const int TUF_KB = 0x00100056;
|
||||
public const int TUF_KB_STATE = 0x00100057;
|
||||
|
||||
public const int PerformanceBalanced = 0;
|
||||
public const int PerformanceTurbo = 1;
|
||||
public const int PerformanceSilent = 2;
|
||||
@@ -157,31 +143,21 @@ public class ASUSWmi
|
||||
|
||||
}
|
||||
|
||||
public int DeviceSet(uint DeviceID, int Status, string logName)
|
||||
public void DeviceSet(uint DeviceID, int Status)
|
||||
{
|
||||
byte[] args = new byte[8];
|
||||
BitConverter.GetBytes((uint)DeviceID).CopyTo(args, 0);
|
||||
BitConverter.GetBytes((uint)Status).CopyTo(args, 4);
|
||||
|
||||
byte[] status = CallMethod(DEVS, args);
|
||||
int result = BitConverter.ToInt32(status, 0);
|
||||
|
||||
Logger.WriteLine(logName + " = " + Status + " : " + (result == 1 ? "OK" : result));
|
||||
return result;
|
||||
CallMethod(DEVS, args);
|
||||
}
|
||||
|
||||
|
||||
public int DeviceSet(uint DeviceID, byte[] Params, string logName)
|
||||
public void DeviceSet(uint DeviceID, byte[] Params)
|
||||
{
|
||||
byte[] args = new byte[4 + Params.Length];
|
||||
BitConverter.GetBytes((uint)DeviceID).CopyTo(args, 0);
|
||||
Params.CopyTo(args, 4);
|
||||
|
||||
byte[] status = CallMethod(DEVS, args);
|
||||
int result = BitConverter.ToInt32(status, 0);
|
||||
|
||||
Logger.WriteLine(logName + " = " + BitConverter.ToString(Params) + " : " + (result == 1 ? "OK" : result));
|
||||
return BitConverter.ToInt32(status, 0);
|
||||
CallMethod(DEVS, args);
|
||||
}
|
||||
|
||||
|
||||
@@ -190,9 +166,7 @@ public class ASUSWmi
|
||||
byte[] args = new byte[8];
|
||||
BitConverter.GetBytes((uint)DeviceID).CopyTo(args, 0);
|
||||
byte[] status = CallMethod(DSTS, args);
|
||||
|
||||
return BitConverter.ToInt32(status, 0) - 65536;
|
||||
|
||||
}
|
||||
|
||||
public byte[] DeviceGetBuffer(uint DeviceID, uint Status = 0)
|
||||
@@ -200,38 +174,22 @@ public class ASUSWmi
|
||||
byte[] args = new byte[8];
|
||||
BitConverter.GetBytes((uint)DeviceID).CopyTo(args, 0);
|
||||
BitConverter.GetBytes((uint)Status).CopyTo(args, 4);
|
||||
|
||||
return CallMethod(DSTS, args);
|
||||
}
|
||||
|
||||
|
||||
public int SetFanCurve(int device, byte[] curve)
|
||||
public void SetFanCurve(int device, byte[] curve)
|
||||
{
|
||||
|
||||
if (curve.Length != 16) return -1;
|
||||
if (curve.All(singleByte => singleByte == 0)) return -1;
|
||||
if (curve.Length != 16) return;
|
||||
if (curve.All(singleByte => singleByte == 0)) return;
|
||||
|
||||
int result;
|
||||
Logger.WriteLine("Fans" + ((device == 1) ? "GPU" : "CPU") + " " + BitConverter.ToString(curve));
|
||||
|
||||
for (int i = 8; i < curve.Length; i++)
|
||||
{
|
||||
curve[i] = Math.Max((byte)0, Math.Min((byte)99, curve[i])); // it seems to be a bug, when some old model's bios can go nuts if fan is set to 100%
|
||||
}
|
||||
|
||||
switch (device)
|
||||
{
|
||||
case 1:
|
||||
result = DeviceSet(DevsGPUFanCurve, curve, "FanGPU");
|
||||
break;
|
||||
case 2:
|
||||
result = DeviceSet(DevsMidFanCurve, curve, "FanMid");
|
||||
break;
|
||||
default:
|
||||
result = DeviceSet(DevsCPUFanCurve, curve, "FanCPU");
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
if (device == 1)
|
||||
DeviceSet(DevsGPUFanCurve, curve);
|
||||
else
|
||||
DeviceSet(DevsCPUFanCurve, curve);
|
||||
}
|
||||
|
||||
public byte[] GetFanCurve(int device, int mode = 0)
|
||||
@@ -246,52 +204,13 @@ public class ASUSWmi
|
||||
default: fan_mode = 0; break;
|
||||
}
|
||||
|
||||
switch (device)
|
||||
{
|
||||
case 1:
|
||||
return DeviceGetBuffer(DevsGPUFanCurve, fan_mode);
|
||||
case 2:
|
||||
return DeviceGetBuffer(DevsMidFanCurve, fan_mode);
|
||||
default:
|
||||
return DeviceGetBuffer(DevsCPUFanCurve, fan_mode);
|
||||
}
|
||||
if (device == 1)
|
||||
return DeviceGetBuffer(DevsGPUFanCurve, fan_mode);
|
||||
else
|
||||
return DeviceGetBuffer(DevsCPUFanCurve, fan_mode);
|
||||
|
||||
}
|
||||
|
||||
public void TUFKeyboardRGB(int mode, Color color, int speed)
|
||||
{
|
||||
|
||||
byte[] setting = new byte[12];
|
||||
setting[0] = (byte)1;
|
||||
setting[1] = (byte)mode;
|
||||
setting[2] = color.R;
|
||||
setting[3] = color.G;
|
||||
setting[4] = color.B;
|
||||
setting[5] = (byte)speed;
|
||||
|
||||
DeviceSet(TUF_KB, setting, "TUF RGB");
|
||||
//Debug.WriteLine(BitConverter.ToString(setting));
|
||||
|
||||
}
|
||||
|
||||
const int ASUS_WMI_KEYBOARD_POWER_BOOT = 0x03 << 16;
|
||||
const int ASUS_WMI_KEYBOARD_POWER_AWAKE = 0x0C << 16;
|
||||
const int ASUS_WMI_KEYBOARD_POWER_SLEEP = 0x30 << 16;
|
||||
const int ASUS_WMI_KEYBOARD_POWER_SHUTDOWN = 0xC0 << 16;
|
||||
public void TUFKeyboardPower(bool awake = true, bool boot = false, bool sleep = false, bool shutdown = false)
|
||||
{
|
||||
int state = 0xbd;
|
||||
|
||||
if (boot) state = state | ASUS_WMI_KEYBOARD_POWER_BOOT;
|
||||
if (awake) state = state | ASUS_WMI_KEYBOARD_POWER_AWAKE;
|
||||
if (sleep) state = state | ASUS_WMI_KEYBOARD_POWER_SLEEP;
|
||||
if (shutdown) state = state | ASUS_WMI_KEYBOARD_POWER_SHUTDOWN;
|
||||
|
||||
state = state | 0x01 << 8;
|
||||
|
||||
DeviceSet(TUF_KB_STATE, state, "TUF_KB");
|
||||
}
|
||||
|
||||
public void SubscribeToEvents(Action<object, EventArrivedEventArgs> EventHandler)
|
||||
{
|
||||
ManagementEventWatcher watcher = new ManagementEventWatcher();
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
// Source thanks to https://github.com/vddCore/Starlight with some adjustments from me
|
||||
|
||||
using Starlight.Communication;
|
||||
using System.Management;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using System.Globalization;
|
||||
using System;
|
||||
using System.Management;
|
||||
|
||||
namespace Starlight.AnimeMatrix
|
||||
{
|
||||
@@ -59,14 +57,6 @@ namespace Starlight.AnimeMatrix
|
||||
}
|
||||
}
|
||||
|
||||
public enum AnimeType
|
||||
{
|
||||
GA401,
|
||||
GA402
|
||||
}
|
||||
|
||||
|
||||
|
||||
public enum BrightnessMode : byte
|
||||
{
|
||||
Off = 0,
|
||||
@@ -78,47 +68,35 @@ namespace Starlight.AnimeMatrix
|
||||
|
||||
public class AnimeMatrixDevice : Device
|
||||
{
|
||||
int UpdatePageLength = 490;
|
||||
int LedCount = 1450;
|
||||
private const int UpdatePageLength = 0x0278;
|
||||
|
||||
byte[] _displayBuffer;
|
||||
List<byte[]> frames = new List<byte[]>();
|
||||
public int LedCount => 1450;
|
||||
|
||||
public int MaxRows = 61;
|
||||
//public int FullRows = 11;
|
||||
//public int FullEvenRows = -1;
|
||||
private byte[] _displayBuffer = new byte[UpdatePageLength * 3];
|
||||
private List<byte[]> frames = new List<byte[]>();
|
||||
|
||||
private int pages = 3;
|
||||
|
||||
public int dx = 0;
|
||||
public int MaxColumns = 34;
|
||||
public int MaxRows = 61;
|
||||
|
||||
public int FullRows = 11;
|
||||
|
||||
private int frameIndex = 0;
|
||||
|
||||
private static AnimeType _model = AnimeType.GA402;
|
||||
|
||||
public AnimeMatrixDevice()
|
||||
: base(0x0B05, 0x193B, 640)
|
||||
{
|
||||
string model = GetModel();
|
||||
if (model.Contains("401"))
|
||||
Debug.WriteLine(model);
|
||||
if (model is not null && model.Contains("401"))
|
||||
{
|
||||
pages = 2;
|
||||
|
||||
_model = AnimeType.GA401;
|
||||
|
||||
FullRows = 6;
|
||||
MaxColumns = 33;
|
||||
dx = 1;
|
||||
|
||||
//FullRows = 7;
|
||||
//FullEvenRows = 3;
|
||||
|
||||
MaxRows = 55;
|
||||
LedCount = 1245;
|
||||
|
||||
UpdatePageLength = 410;
|
||||
}
|
||||
|
||||
|
||||
_displayBuffer = new byte[LedCount];
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -141,6 +119,7 @@ namespace Starlight.AnimeMatrix
|
||||
|
||||
public void PresentNextFrame()
|
||||
{
|
||||
//Debug.WriteLine(frameIndex);
|
||||
if (frameIndex >= frames.Count) frameIndex = 0;
|
||||
_displayBuffer = frames[frameIndex];
|
||||
Present();
|
||||
@@ -164,110 +143,31 @@ namespace Starlight.AnimeMatrix
|
||||
}
|
||||
|
||||
|
||||
public static int FirstX(int y)
|
||||
{
|
||||
switch (_model)
|
||||
{
|
||||
case AnimeType.GA401:
|
||||
if (y < 5)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (y + 1) / 2 - 3;
|
||||
}
|
||||
case AnimeType.GA402:
|
||||
if (y < 11)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return (y) / 2 - 5;
|
||||
}
|
||||
default:
|
||||
throw new ArgumentException("Invalid anime type", nameof(_model));
|
||||
}
|
||||
}
|
||||
|
||||
public static int Width(int y)
|
||||
{
|
||||
switch (_model)
|
||||
{
|
||||
case AnimeType.GA401:
|
||||
return 33;
|
||||
case AnimeType.GA402:
|
||||
return 34;
|
||||
default:
|
||||
throw new ArgumentException("Invalid anime type", nameof(_model));
|
||||
}
|
||||
}
|
||||
|
||||
public static int Pitch(int y)
|
||||
{
|
||||
switch (_model)
|
||||
{
|
||||
case AnimeType.GA401:
|
||||
switch (y)
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
case 4:
|
||||
return 33;
|
||||
case 1:
|
||||
case 3:
|
||||
return 35;
|
||||
default:
|
||||
return 36 - y / 2;
|
||||
}
|
||||
case AnimeType.GA402:
|
||||
return Width(y) - FirstX(y);
|
||||
default:
|
||||
throw new ArgumentException("Invalid anime type", nameof(_model));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
public int XStart(int row)
|
||||
public int EmptyColumns(int row)
|
||||
{
|
||||
return (int)Math.Ceiling(Math.Max(0, row - FullRows) / 2.0);
|
||||
}
|
||||
|
||||
public int XEnd(int row)
|
||||
public int Columns(int row)
|
||||
{
|
||||
if (row <= FullEvenRows)
|
||||
{
|
||||
if (row % 2 == 1) return MaxColumns + 2;
|
||||
else return MaxColumns;
|
||||
}
|
||||
return MaxColumns;
|
||||
EnsureRowInRange(row);
|
||||
return MaxColumns - EmptyColumns(row);
|
||||
}
|
||||
*/
|
||||
|
||||
public int RowToLinearAddress(int y)
|
||||
public int RowToLinearAddress(int row)
|
||||
{
|
||||
EnsureRowInRange(y);
|
||||
EnsureRowInRange(row);
|
||||
|
||||
int ret = 0;
|
||||
var ret = 0;
|
||||
|
||||
for (var i = 0; i < y; i++)
|
||||
ret += Pitch(i);
|
||||
if (row > 0)
|
||||
{
|
||||
for (var i = 0; i < row; i++)
|
||||
ret += Columns(i);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public void SetLedPlanar(int x, int y, byte value)
|
||||
{
|
||||
EnsureRowInRange(y);
|
||||
|
||||
if (x >= FirstX(y) && x < Width(y))
|
||||
{
|
||||
SetLedLinear(RowToLinearAddress(y) - FirstX(y) + x + dx, value);
|
||||
//Debug.Write((RowToLinearAddress(y) - FirstX(y) + x + dx).ToString() + " ");
|
||||
}
|
||||
}
|
||||
|
||||
public void WakeUp()
|
||||
{
|
||||
Set(Packet<AnimeMatrixPacket>(Encoding.ASCII.GetBytes("ASUS Tech.Inc.")));
|
||||
@@ -275,13 +175,13 @@ namespace Starlight.AnimeMatrix
|
||||
|
||||
public void SetLedLinear(int address, byte value)
|
||||
{
|
||||
if (!IsAddressableLed(address)) return;
|
||||
EnsureAddressableLed(address);
|
||||
_displayBuffer[address] = value;
|
||||
}
|
||||
|
||||
public void SetLedLinearImmediate(int address, byte value)
|
||||
{
|
||||
if (!IsAddressableLed(address)) return;
|
||||
EnsureAddressableLed(address);
|
||||
_displayBuffer[address] = value;
|
||||
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
||||
@@ -293,7 +193,14 @@ namespace Starlight.AnimeMatrix
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x03));
|
||||
}
|
||||
|
||||
public void SetLedPlanar(int x, int y, byte value)
|
||||
{
|
||||
EnsureRowInRange(y);
|
||||
var start = RowToLinearAddress(y) - EmptyColumns(y);
|
||||
|
||||
if (x > EmptyColumns(y))
|
||||
SetLedLinear(start + x, value);
|
||||
}
|
||||
|
||||
public void Clear(bool present = false)
|
||||
{
|
||||
@@ -307,23 +214,26 @@ namespace Starlight.AnimeMatrix
|
||||
public void Present()
|
||||
{
|
||||
|
||||
int page = 0;
|
||||
int start, end;
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
||||
.AppendData(BitConverter.GetBytes((ushort)(UpdatePageLength * 0 + 1)))
|
||||
.AppendData(BitConverter.GetBytes((ushort)UpdatePageLength))
|
||||
.AppendData(_displayBuffer[(UpdatePageLength * 0)..(UpdatePageLength * 1)])
|
||||
);
|
||||
|
||||
while (page * UpdatePageLength < LedCount)
|
||||
{
|
||||
start = page * UpdatePageLength;
|
||||
end = Math.Min(LedCount, (page + 1) * UpdatePageLength);
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
||||
.AppendData(BitConverter.GetBytes((ushort)(UpdatePageLength * 1 + 1)))
|
||||
.AppendData(BitConverter.GetBytes((ushort)UpdatePageLength))
|
||||
.AppendData(_displayBuffer[(UpdatePageLength * 1)..(UpdatePageLength * 2)])
|
||||
);
|
||||
|
||||
if (pages > 2)
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
||||
.AppendData(BitConverter.GetBytes((ushort)(start + 1)))
|
||||
.AppendData(BitConverter.GetBytes((ushort)(end - start)))
|
||||
.AppendData(_displayBuffer[start..end])
|
||||
.AppendData(BitConverter.GetBytes((ushort)(UpdatePageLength * 2 + 1)))
|
||||
.AppendData(BitConverter.GetBytes((ushort)(LedCount - UpdatePageLength * 2)))
|
||||
.AppendData(
|
||||
_displayBuffer[(UpdatePageLength * 2)..(UpdatePageLength * 2 + (LedCount - UpdatePageLength * 2))])
|
||||
);
|
||||
|
||||
page++;
|
||||
}
|
||||
|
||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x03));
|
||||
}
|
||||
|
||||
@@ -360,86 +270,39 @@ namespace Starlight.AnimeMatrix
|
||||
Set(Packet<AnimeMatrixPacket>(0xC5, animation.AsByte));
|
||||
}
|
||||
|
||||
|
||||
public void PresentClock()
|
||||
{
|
||||
int second = DateTime.Now.Second;
|
||||
|
||||
if (CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern.Contains("H"))
|
||||
PresentText(DateTime.Now.ToString("H" + ((second % 2 == 0)?":":" ") + "mm"));
|
||||
else
|
||||
PresentText(DateTime.Now.ToString("h" + ((second % 2 == 0) ? ":" : " ") + "mm"), DateTime.Now.ToString("tt"));
|
||||
}
|
||||
|
||||
public void PresentText(string text1, string text2 = "")
|
||||
{
|
||||
using (Bitmap bmp = new Bitmap(MaxColumns * 3, MaxRows))
|
||||
{
|
||||
using (Graphics g = Graphics.FromImage(bmp))
|
||||
{
|
||||
g.CompositingQuality = CompositingQuality.HighQuality;
|
||||
g.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
|
||||
using (Font font = new Font("Arial", 12F))
|
||||
{
|
||||
SizeF textSize = g.MeasureString(text1, font);
|
||||
g.DrawString(text1, font, Brushes.White, (MaxColumns*3 - textSize.Width)+3, -5);
|
||||
}
|
||||
|
||||
if (text2.Length > 0)
|
||||
using (Font font = new Font("Arial", 9F))
|
||||
{
|
||||
SizeF textSize = g.MeasureString(text2, font);
|
||||
g.DrawString(text2, font, Brushes.White, (MaxColumns * 3 - textSize.Width)+1, 25);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
GenerateFrame(bmp, InterpolationMode.Bicubic);
|
||||
Present();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void GenerateFrame(Image image, InterpolationMode interpolation = InterpolationMode.High)
|
||||
public void GenerateFrame(Image image)
|
||||
{
|
||||
|
||||
int width = MaxColumns/2 * 6;
|
||||
int width = MaxColumns * 3;
|
||||
int height = MaxRows;
|
||||
|
||||
int targetWidth = MaxColumns * 2;
|
||||
|
||||
float scale;
|
||||
|
||||
using (Bitmap bmp = new Bitmap(targetWidth, height))
|
||||
Bitmap canvas = new Bitmap(width, height);
|
||||
|
||||
scale = Math.Min((float)width / (float)image.Width, (float)height / (float)image.Height);
|
||||
|
||||
var graph = Graphics.FromImage(canvas);
|
||||
var scaleWidth = (int)(image.Width * scale);
|
||||
var scaleHeight = (int)(image.Height * scale);
|
||||
|
||||
graph.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
|
||||
graph.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
|
||||
graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
|
||||
|
||||
graph.DrawImage(image, ((int)width - scaleWidth), ((int)height - scaleHeight) / 2, scaleWidth, scaleHeight);
|
||||
|
||||
Bitmap bmp = new Bitmap(canvas, MaxColumns, MaxRows);
|
||||
|
||||
for (int y = 0; y < bmp.Height; y++)
|
||||
{
|
||||
scale = Math.Min((float)width / (float)image.Width, (float)height / (float)image.Height);
|
||||
|
||||
using (var graph = Graphics.FromImage(bmp))
|
||||
for (int x = 0; x < bmp.Width; x++)
|
||||
{
|
||||
var scaleWidth = (float)(image.Width * scale);
|
||||
var scaleHeight = (float)(image.Height * scale);
|
||||
|
||||
graph.InterpolationMode = interpolation;
|
||||
graph.CompositingQuality = CompositingQuality.HighQuality;
|
||||
graph.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
|
||||
graph.DrawImage(image, (float)Math.Round(targetWidth - scaleWidth * targetWidth / width), 0, (float)Math.Round(scaleWidth * targetWidth / width), scaleHeight);
|
||||
|
||||
}
|
||||
|
||||
for (int y = 0; y < bmp.Height; y++)
|
||||
{
|
||||
for (int x = 0; x < bmp.Width; x++)
|
||||
if (x % 2 == (y+dx) % 2)
|
||||
{
|
||||
var pixel = bmp.GetPixel(x, y);
|
||||
var color = (pixel.R + pixel.G + pixel.B) / 3;
|
||||
if (color < 10) color = 0;
|
||||
SetLedPlanar(x / 2, y, (byte)color);
|
||||
}
|
||||
var pixel = bmp.GetPixel(x, y);
|
||||
byte color = (byte)(Math.Max((pixel.R + pixel.G + pixel.B) / 3 - 10, 0));
|
||||
SetLedPlanar(x, y, color);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void EnsureRowInRange(int row)
|
||||
@@ -450,9 +313,12 @@ namespace Starlight.AnimeMatrix
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsAddressableLed(int address)
|
||||
private void EnsureAddressableLed(int address)
|
||||
{
|
||||
return (address >= 0 && address < LedCount);
|
||||
if (address < 0 || address >= LedCount)
|
||||
{
|
||||
throw new IndexOutOfRangeException($"Linear LED address must be in range of [0, {LedCount - 1}].");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
using System.Management;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json;
|
||||
|
||||
public class AppConfig
|
||||
{
|
||||
@@ -7,8 +6,6 @@ public class AppConfig
|
||||
public string appPath;
|
||||
string configFile;
|
||||
|
||||
string _model;
|
||||
|
||||
public Dictionary<string, object> config = new Dictionary<string, object>();
|
||||
|
||||
public AppConfig()
|
||||
@@ -39,31 +36,6 @@ public class AppConfig
|
||||
|
||||
}
|
||||
|
||||
|
||||
public string GetModel()
|
||||
{
|
||||
if (_model is null)
|
||||
{
|
||||
_model = "";
|
||||
using (var searcher = new ManagementObjectSearcher(@"Select * from Win32_ComputerSystem"))
|
||||
{
|
||||
foreach (var process in searcher.Get())
|
||||
{
|
||||
_model = process["Model"].ToString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return _model;
|
||||
}
|
||||
public bool ContainsModel(string contains)
|
||||
{
|
||||
|
||||
GetModel();
|
||||
return (_model is not null && _model.Contains(contains));
|
||||
|
||||
}
|
||||
private void initConfig()
|
||||
{
|
||||
config = new Dictionary<string, object>();
|
||||
@@ -108,8 +80,6 @@ public class AppConfig
|
||||
|
||||
if (device == 1)
|
||||
name = "gpu";
|
||||
else if (device == 2)
|
||||
name = "mid";
|
||||
else
|
||||
name = "cpu";
|
||||
|
||||
|
||||
307
app/Aura.cs
307
app/Aura.cs
@@ -1,269 +1,78 @@
|
||||
using HidLibrary;
|
||||
using System.Data;
|
||||
using System.Diagnostics;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;
|
||||
using System.Security.Policy;
|
||||
|
||||
namespace GHelper
|
||||
public class Aura
|
||||
{
|
||||
|
||||
[Flags]
|
||||
public enum AuraDev19b6 : uint
|
||||
static byte[] MESSAGE_SET = { 0x5d, 0xb5, 0,0,0 };
|
||||
static byte[] MESSAGE_APPLY = { 0x5d, 0xb4};
|
||||
|
||||
public const int Static = 0;
|
||||
public const int Breathe = 1;
|
||||
public const int Strobe = 2;
|
||||
public const int Rainbow = 3;
|
||||
public const int Dingding = 4;
|
||||
|
||||
public const int SpeedSlow = 0xe1;
|
||||
public const int SpeedMedium = 0xeb;
|
||||
public const int SpeedHigh = 0xf5;
|
||||
|
||||
public static int Mode = Static;
|
||||
public static Color Color1 = Color.White;
|
||||
public static Color Color2 = Color.Black;
|
||||
public static int Speed = SpeedSlow;
|
||||
|
||||
public static byte[] AuraMessage(int mode, Color color, Color color2, int speed)
|
||||
{
|
||||
BootLogo = 1,
|
||||
BootKeyb = 1 << 1,
|
||||
AwakeLogo = 1 << 2,
|
||||
AwakeKeyb = 1 << 3,
|
||||
SleepLogo = 1 << 4,
|
||||
SleepKeyb = 1 << 5,
|
||||
ShutdownLogo = 1 << 6,
|
||||
ShutdownKeyb = 1 << 7,
|
||||
BootBar = 1u << (7 + 2),
|
||||
AwakeBar = 1u << (7 + 3),
|
||||
SleepBar = 1u << (7 + 4),
|
||||
ShutdownBar = 1u << (7 + 5),
|
||||
BootLid = 1u << (15 + 1),
|
||||
AwakeLid = 1u << (15 + 2),
|
||||
SleepLid = 1u << (15 + 3),
|
||||
ShutdownLid = 1u << (15 + 4)
|
||||
byte[] msg = new byte[17];
|
||||
msg[0] = 0x5d;
|
||||
msg[1] = 0xb3;
|
||||
msg[2] = 0x00; // Zone
|
||||
msg[3] = (byte)mode; // Aura Mode
|
||||
msg[4] = (byte)(color.R); // R
|
||||
msg[5] = (byte)(color.G); // G
|
||||
msg[6] = (byte)(color.B); // B
|
||||
msg[7] = (byte)speed; // aura.speed as u8;
|
||||
msg[8] = 0; // aura.direction as u8;
|
||||
msg[10] = (byte)(color2.R); // R
|
||||
msg[11] = (byte)(color2.G); // G
|
||||
msg[12] = (byte)(color2.B); // B
|
||||
return msg;
|
||||
}
|
||||
|
||||
public static class AuraDev19b6Extensions
|
||||
{
|
||||
public static byte[] ToBytes(this AuraDev19b6[] controls)
|
||||
{
|
||||
uint a = 0;
|
||||
foreach (var n in controls)
|
||||
{
|
||||
a |= (uint)n;
|
||||
}
|
||||
return new byte[] { 0x5d, 0xbd, 0x01, (byte)(a & 0xff), (byte)((a & 0xff00) >> 8), (byte)((a & 0xff0000) >> 16) };
|
||||
}
|
||||
|
||||
public static ushort BitOr(this AuraDev19b6 self, AuraDev19b6 rhs)
|
||||
{
|
||||
return (ushort)(self | rhs);
|
||||
}
|
||||
|
||||
public static ushort BitAnd(this AuraDev19b6 self, AuraDev19b6 rhs)
|
||||
{
|
||||
return (ushort)(self & rhs);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Aura
|
||||
public static void ApplyAura()
|
||||
{
|
||||
|
||||
static byte[] MESSAGE_SET = { 0x5d, 0xb5, 0, 0, 0 };
|
||||
static byte[] MESSAGE_APPLY = { 0x5d, 0xb4 };
|
||||
HidDevice[] HidDeviceList;
|
||||
int[] deviceIds = { 0x1854, 0x1869, 0x1866, 0x19b6, 0x1822, 0x1837, 0x1854, 0x184a, 0x183d, 0x8502, 0x1807, 0x17e0 };
|
||||
|
||||
static int[] deviceIds = { 0x1854, 0x1869, 0x1866, 0x19b6, 0x1822, 0x1837, 0x1854, 0x184a, 0x183d, 0x8502, 0x1807, 0x17e0 };
|
||||
HidDeviceList = HidDevices.Enumerate(0x0b05, deviceIds).ToArray();
|
||||
|
||||
private static int mode = 0;
|
||||
private static int speed = 1;
|
||||
public static Color Color1 = Color.White;
|
||||
public static Color Color2 = Color.Black;
|
||||
|
||||
|
||||
public static Dictionary<int, string> GetSpeeds()
|
||||
if (Mode == Dingding)
|
||||
{
|
||||
return new Dictionary<int, string>
|
||||
{
|
||||
{ 0, "Slow" },
|
||||
{ 1, "Normal" },
|
||||
{ 2, "Fast" }
|
||||
};
|
||||
Mode = 10;
|
||||
Speed = SpeedMedium;
|
||||
}
|
||||
else if (Mode == Rainbow)
|
||||
{
|
||||
Speed = SpeedMedium;
|
||||
}
|
||||
else
|
||||
{
|
||||
Speed = SpeedSlow;
|
||||
}
|
||||
|
||||
static Dictionary<int, string> _modes = new Dictionary<int, string>
|
||||
{
|
||||
{ 0, "Static" },
|
||||
{ 1, "Breathe" },
|
||||
{ 2, "Color Cycle" },
|
||||
{ 3, "Rainbow" },
|
||||
{ 10, "Strobe" },
|
||||
};
|
||||
|
||||
static Dictionary<int, string> _modesStrix = new Dictionary<int, string>
|
||||
{
|
||||
{ 0, "Static" },
|
||||
{ 1, "Breathe" },
|
||||
{ 2, "Color Cycle" },
|
||||
{ 3, "Rainbow" },
|
||||
{ 4, "Star" },
|
||||
{ 5, "Rain" },
|
||||
{ 6, "Highlight" },
|
||||
{ 7, "Laser" },
|
||||
{ 8, "Ripple" },
|
||||
{ 10, "Strobe" },
|
||||
{ 11, "Comet" },
|
||||
{ 12, "Flash" },
|
||||
};
|
||||
|
||||
|
||||
public static Dictionary<int, string> GetModes()
|
||||
foreach (HidDevice device in HidDeviceList)
|
||||
{
|
||||
if (Program.config.ContainsModel("TUF"))
|
||||
if (device.IsConnected && device.Description.Contains("HID"))
|
||||
{
|
||||
_modes.Remove(3);
|
||||
}
|
||||
|
||||
if (Program.config.ContainsModel("401"))
|
||||
{
|
||||
_modes.Remove(2);
|
||||
_modes.Remove(3);
|
||||
}
|
||||
|
||||
if (Program.config.ContainsModel("Strix") || Program.config.ContainsModel("Scar"))
|
||||
{
|
||||
return _modesStrix;
|
||||
}
|
||||
|
||||
return _modes;
|
||||
}
|
||||
|
||||
|
||||
public static int Mode
|
||||
{
|
||||
get { return mode; }
|
||||
set
|
||||
{
|
||||
if (GetModes().ContainsKey(value))
|
||||
mode = value;
|
||||
else
|
||||
mode = 0;
|
||||
device.OpenDevice();
|
||||
byte[] msg = AuraMessage(Mode, Color1, Color2, Speed);
|
||||
device.Write(msg);
|
||||
device.Write(MESSAGE_SET);
|
||||
device.Write(MESSAGE_APPLY);
|
||||
device.CloseDevice();
|
||||
}
|
||||
}
|
||||
|
||||
public static bool HasSecondColor()
|
||||
{
|
||||
return (mode == 1 && !Program.config.ContainsModel("TUF"));
|
||||
}
|
||||
|
||||
public static int Speed
|
||||
{
|
||||
get { return speed; }
|
||||
set
|
||||
{
|
||||
if (GetSpeeds().ContainsKey(value))
|
||||
speed = value;
|
||||
else
|
||||
speed = 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void SetColor(int colorCode)
|
||||
{
|
||||
Color1 = Color.FromArgb(colorCode);
|
||||
}
|
||||
|
||||
public static void SetColor2(int colorCode)
|
||||
{
|
||||
Color2 = Color.FromArgb(colorCode);
|
||||
}
|
||||
|
||||
public static byte[] AuraMessage(int mode, Color color, Color color2, int speed)
|
||||
{
|
||||
|
||||
byte[] msg = new byte[17];
|
||||
msg[0] = 0x5d;
|
||||
msg[1] = 0xb3;
|
||||
msg[2] = 0x00; // Zone
|
||||
msg[3] = (byte)mode; // Aura Mode
|
||||
msg[4] = (byte)(color.R); // R
|
||||
msg[5] = (byte)(color.G); // G
|
||||
msg[6] = (byte)(color.B); // B
|
||||
msg[7] = (byte)speed; // aura.speed as u8;
|
||||
msg[8] = 0; // aura.direction as u8;
|
||||
msg[10] = (byte)(color2.R); // R
|
||||
msg[11] = (byte)(color2.G); // G
|
||||
msg[12] = (byte)(color2.B); // B
|
||||
return msg;
|
||||
}
|
||||
|
||||
|
||||
public static void ApplyBrightness(int brightness)
|
||||
{
|
||||
HidDevice[] HidDeviceList = HidDevices.Enumerate(0x0b05, deviceIds).ToArray();
|
||||
|
||||
byte[] msg = { 0x5d, 0xba, 0xc5, 0xc4, (byte)brightness };
|
||||
|
||||
foreach (HidDevice device in HidDeviceList)
|
||||
if (device.IsConnected && device.Description.Contains("HID"))
|
||||
{
|
||||
device.OpenDevice();
|
||||
device.Write(msg);
|
||||
device.CloseDevice();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void ApplyAuraPower(bool awake = true, bool boot = false, bool sleep = false, bool shutdown = false)
|
||||
{
|
||||
HidDevice[] HidDeviceList = HidDevices.Enumerate(0x0b05, 0x19b6).ToArray();
|
||||
|
||||
List<AuraDev19b6> flags = new List<AuraDev19b6>();
|
||||
|
||||
if (awake) flags.Add(AuraDev19b6.AwakeKeyb);
|
||||
if (boot) flags.Add(AuraDev19b6.BootKeyb);
|
||||
if (sleep) flags.Add(AuraDev19b6.SleepKeyb);
|
||||
if (shutdown) flags.Add(AuraDev19b6.ShutdownKeyb);
|
||||
|
||||
byte[] msg = AuraDev19b6Extensions.ToBytes(flags.ToArray());
|
||||
|
||||
Debug.WriteLine(BitConverter.ToString(msg));
|
||||
|
||||
foreach (HidDevice device in HidDeviceList)
|
||||
if (device.IsConnected && device.Description.Contains("HID"))
|
||||
{
|
||||
device.OpenDevice();
|
||||
device.Write(msg);
|
||||
device.CloseDevice();
|
||||
}
|
||||
|
||||
if (Program.config.ContainsModel("TUF"))
|
||||
Program.wmi.TUFKeyboardPower(awake, boot, sleep, shutdown);
|
||||
|
||||
}
|
||||
|
||||
public static void ApplyAura()
|
||||
{
|
||||
|
||||
HidDevice[] HidDeviceList = HidDevices.Enumerate(0x0b05, deviceIds).ToArray();
|
||||
|
||||
int _speed;
|
||||
|
||||
switch (Speed)
|
||||
{
|
||||
case 1:
|
||||
_speed = 0xeb;
|
||||
break;
|
||||
case 2:
|
||||
_speed = 0xf5;
|
||||
break;
|
||||
default:
|
||||
_speed = 0xe1;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
byte[] msg = AuraMessage(Mode, Color1, Color2, _speed);
|
||||
foreach (HidDevice device in HidDeviceList)
|
||||
if (device.IsConnected && device.Description.Contains("HID"))
|
||||
{
|
||||
device.OpenDevice();
|
||||
device.Write(msg);
|
||||
device.Write(MESSAGE_SET);
|
||||
device.Write(MESSAGE_APPLY);
|
||||
device.CloseDevice();
|
||||
}
|
||||
|
||||
if (Program.config.ContainsModel("TUF"))
|
||||
Program.wmi.TUFKeyboardRGB(Mode, Color1, _speed);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,195 +0,0 @@
|
||||
using CustomControls;
|
||||
using WinFormsSliderBar;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Windows.Forms.DataVisualization.Charting;
|
||||
|
||||
public static class ControlHelper
|
||||
{
|
||||
|
||||
static bool _invert = false;
|
||||
static bool _darkTheme = false;
|
||||
|
||||
|
||||
static float _scale = 1;
|
||||
|
||||
static Color formBack;
|
||||
static Color backMain;
|
||||
static Color foreMain;
|
||||
static Color foreAccent;
|
||||
static Color borderMain;
|
||||
static Color buttonMain;
|
||||
|
||||
public static void Adjust(RForm container, bool darkTheme = false, bool invert = false)
|
||||
{
|
||||
|
||||
_darkTheme = darkTheme;
|
||||
|
||||
if (darkTheme)
|
||||
{
|
||||
formBack = Color.FromArgb(255, 35, 35, 35);
|
||||
backMain = Color.FromArgb(255, 50, 50, 50);
|
||||
foreMain = Color.FromArgb(255, 240, 240, 240);
|
||||
foreAccent = Color.FromArgb(255, 100, 100, 100);
|
||||
borderMain = Color.FromArgb(255, 50, 50, 50);
|
||||
buttonMain = Color.FromArgb(255, 80, 80, 80);
|
||||
}
|
||||
else
|
||||
{
|
||||
formBack = SystemColors.Control;
|
||||
backMain = SystemColors.ControlLightLight;
|
||||
foreMain = SystemColors.ControlText;
|
||||
foreAccent = Color.LightGray;
|
||||
borderMain = Color.LightGray;
|
||||
buttonMain = Color.FromArgb(255, 230, 230, 230);
|
||||
}
|
||||
|
||||
container.BackColor = formBack;
|
||||
container.ForeColor = foreMain;
|
||||
|
||||
_invert = invert;
|
||||
AdjustControls(container.Controls);
|
||||
_invert = false;
|
||||
|
||||
}
|
||||
|
||||
public static void Resize(RForm container, float baseScale = 2)
|
||||
{
|
||||
_scale = GetDpiScale(container).Value / baseScale;
|
||||
if (Math.Abs(_scale - 1) > 0.2) ResizeControls(container.Controls);
|
||||
|
||||
}
|
||||
|
||||
private static void ResizeControls(Control.ControlCollection controls)
|
||||
{
|
||||
foreach (Control control in controls)
|
||||
{
|
||||
var button = control as RButton;
|
||||
if (button != null && button.Image is not null)
|
||||
button.Image = ResizeImage(button.Image);
|
||||
|
||||
/*
|
||||
var pictureBox = control as PictureBox;
|
||||
if (pictureBox != null && pictureBox.BackgroundImage is not null)
|
||||
pictureBox.BackgroundImage = ResizeImage(pictureBox.BackgroundImage);
|
||||
*/
|
||||
|
||||
ResizeControls(control.Controls);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static void AdjustControls(Control.ControlCollection controls)
|
||||
{
|
||||
foreach (Control control in controls)
|
||||
{
|
||||
var button = control as RButton;
|
||||
if (button != null)
|
||||
{
|
||||
button.BackColor = button.Secondary ? buttonMain : backMain;
|
||||
button.ForeColor = foreMain;
|
||||
|
||||
button.FlatStyle = FlatStyle.Flat;
|
||||
button.FlatAppearance.BorderColor = borderMain;
|
||||
|
||||
if (button.Image is not null)
|
||||
button.Image = AdjustImage(button.Image);
|
||||
}
|
||||
|
||||
var pictureBox = control as PictureBox;
|
||||
if (pictureBox != null && pictureBox.BackgroundImage is not null)
|
||||
pictureBox.BackgroundImage = AdjustImage(pictureBox.BackgroundImage);
|
||||
|
||||
|
||||
var combo = control as RComboBox;
|
||||
if (combo != null)
|
||||
{
|
||||
combo.BackColor = backMain;
|
||||
combo.ForeColor = foreMain;
|
||||
combo.BorderColor = backMain;
|
||||
combo.ButtonColor = backMain;
|
||||
combo.ArrowColor = foreMain;
|
||||
}
|
||||
|
||||
var gb = control as GroupBox;
|
||||
if (gb != null)
|
||||
{
|
||||
gb.ForeColor = foreMain;
|
||||
}
|
||||
|
||||
var sl = control as Slider;
|
||||
if (sl != null)
|
||||
{
|
||||
sl.borderColor = buttonMain;
|
||||
}
|
||||
|
||||
var chart = control as Chart;
|
||||
if (chart != null)
|
||||
{
|
||||
chart.BackColor = backMain;
|
||||
chart.ChartAreas[0].BackColor = backMain;
|
||||
|
||||
chart.ChartAreas[0].AxisX.TitleForeColor = foreMain;
|
||||
chart.ChartAreas[0].AxisY.TitleForeColor = foreMain;
|
||||
|
||||
chart.ChartAreas[0].AxisX.LabelStyle.ForeColor = foreMain;
|
||||
chart.ChartAreas[0].AxisY.LabelStyle.ForeColor = foreMain;
|
||||
|
||||
chart.ChartAreas[0].AxisX.MajorTickMark.LineColor = foreMain;
|
||||
chart.ChartAreas[0].AxisY.MajorTickMark.LineColor = foreMain;
|
||||
|
||||
chart.ChartAreas[0].AxisX.MajorGrid.LineColor = foreAccent;
|
||||
chart.ChartAreas[0].AxisY.MajorGrid.LineColor = foreAccent;
|
||||
chart.ChartAreas[0].AxisX.LineColor = foreAccent;
|
||||
chart.ChartAreas[0].AxisY.LineColor = foreAccent;
|
||||
|
||||
chart.Titles[0].ForeColor = foreMain;
|
||||
|
||||
}
|
||||
|
||||
AdjustControls(control.Controls);
|
||||
}
|
||||
}
|
||||
|
||||
public static Lazy<float> GetDpiScale(Control control)
|
||||
{
|
||||
return new Lazy<float>(() =>
|
||||
{
|
||||
using (var graphics = control.CreateGraphics())
|
||||
return graphics.DpiX / 96.0f;
|
||||
});
|
||||
}
|
||||
|
||||
private static Image ResizeImage(Image image)
|
||||
{
|
||||
var newSize = new Size((int)(image.Width * _scale), (int)(image.Height * _scale));
|
||||
var pic = new Bitmap(newSize.Width, newSize.Height);
|
||||
|
||||
using (var g = Graphics.FromImage(pic))
|
||||
{
|
||||
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||||
g.DrawImage(image, new Rectangle(new Point(), newSize));
|
||||
}
|
||||
return pic;
|
||||
}
|
||||
|
||||
private static Image AdjustImage(Image image)
|
||||
{
|
||||
var pic = new Bitmap(image);
|
||||
|
||||
if (_invert)
|
||||
{
|
||||
for (int y = 0; (y <= (pic.Height - 1)); y++)
|
||||
{
|
||||
for (int x = 0; (x <= (pic.Width - 1)); x++)
|
||||
{
|
||||
Color col = pic.GetPixel(x, y);
|
||||
pic.SetPixel(x, y, Color.FromArgb(col.A, (255 - col.R), (255 - col.G), (255 - col.B)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return pic;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,349 +0,0 @@
|
||||
using Microsoft.Win32;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace CustomControls
|
||||
{
|
||||
|
||||
public class RForm : Form
|
||||
{
|
||||
|
||||
protected static Color colorEco = Color.FromArgb(255, 6, 180, 138);
|
||||
protected static Color colorStandard = Color.FromArgb(255, 58, 174, 239);
|
||||
protected static Color colorTurbo = Color.FromArgb(255, 255, 32, 32);
|
||||
|
||||
[DllImport("UXTheme.dll", SetLastError = true, EntryPoint = "#138")]
|
||||
public static extern bool CheckSystemDarkModeStatus();
|
||||
|
||||
[DllImport("DwmApi")] //System.Runtime.InteropServices
|
||||
private static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, int[] attrValue, int attrSize);
|
||||
|
||||
public bool darkTheme;
|
||||
|
||||
private static bool IsDarkTheme()
|
||||
{
|
||||
using var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize");
|
||||
var registryValueObject = key?.GetValue("AppsUseLightTheme");
|
||||
|
||||
if (registryValueObject == null) return false;
|
||||
return (int)registryValueObject <= 0;
|
||||
}
|
||||
|
||||
public bool InitTheme(bool setDPI = false)
|
||||
{
|
||||
bool newDarkTheme = CheckSystemDarkModeStatus();
|
||||
bool changed = (darkTheme != newDarkTheme);
|
||||
darkTheme = newDarkTheme;
|
||||
|
||||
if (setDPI)
|
||||
ControlHelper.Resize(this);
|
||||
|
||||
if (changed)
|
||||
{
|
||||
DwmSetWindowAttribute(this.Handle, 20, new[] { darkTheme ? 1 : 0 }, 4);
|
||||
ControlHelper.Adjust(this, darkTheme, changed);
|
||||
}
|
||||
|
||||
return changed;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class RComboBox : ComboBox
|
||||
{
|
||||
private Color borderColor = Color.Gray;
|
||||
[DefaultValue(typeof(Color), "Gray")]
|
||||
public Color BorderColor
|
||||
{
|
||||
get { return borderColor; }
|
||||
set
|
||||
{
|
||||
if (borderColor != value)
|
||||
{
|
||||
borderColor = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private Color buttonColor = Color.FromArgb(255, 255, 255, 255);
|
||||
[DefaultValue(typeof(Color), "255, 255, 255")]
|
||||
public Color ButtonColor
|
||||
{
|
||||
get { return buttonColor; }
|
||||
set
|
||||
{
|
||||
if (buttonColor != value)
|
||||
{
|
||||
buttonColor = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Color arrowColor = Color.Black;
|
||||
[DefaultValue(typeof(Color), "Black")]
|
||||
public Color ArrowColor
|
||||
{
|
||||
get { return arrowColor; }
|
||||
set
|
||||
{
|
||||
if (arrowColor != value)
|
||||
{
|
||||
arrowColor = value;
|
||||
Invalidate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
if (m.Msg == WM_PAINT && DropDownStyle != ComboBoxStyle.Simple)
|
||||
{
|
||||
var clientRect = ClientRectangle;
|
||||
var dropDownButtonWidth = SystemInformation.HorizontalScrollBarArrowWidth;
|
||||
var outerBorder = new Rectangle(clientRect.Location,
|
||||
new Size(clientRect.Width - 1, clientRect.Height - 1));
|
||||
var innerBorder = new Rectangle(outerBorder.X + 1, outerBorder.Y + 1,
|
||||
outerBorder.Width - dropDownButtonWidth - 2, outerBorder.Height - 2);
|
||||
var innerInnerBorder = new Rectangle(innerBorder.X + 1, innerBorder.Y + 1,
|
||||
innerBorder.Width - 2, innerBorder.Height - 2);
|
||||
var dropDownRect = new Rectangle(innerBorder.Right + 1, innerBorder.Y,
|
||||
dropDownButtonWidth, innerBorder.Height + 1);
|
||||
if (RightToLeft == RightToLeft.Yes)
|
||||
{
|
||||
innerBorder.X = clientRect.Width - innerBorder.Right;
|
||||
innerInnerBorder.X = clientRect.Width - innerInnerBorder.Right;
|
||||
dropDownRect.X = clientRect.Width - dropDownRect.Right;
|
||||
dropDownRect.Width += 1;
|
||||
}
|
||||
var innerBorderColor = Enabled ? BackColor : SystemColors.Control;
|
||||
var outerBorderColor = Enabled ? BorderColor : SystemColors.ControlDark;
|
||||
var buttonColor = Enabled ? ButtonColor : SystemColors.Control;
|
||||
var middle = new Point(dropDownRect.Left + dropDownRect.Width / 2,
|
||||
dropDownRect.Top + dropDownRect.Height / 2);
|
||||
var arrow = new Point[]
|
||||
{
|
||||
new Point(middle.X - 3, middle.Y - 2),
|
||||
new Point(middle.X + 4, middle.Y - 2),
|
||||
new Point(middle.X, middle.Y + 2)
|
||||
};
|
||||
var ps = new PAINTSTRUCT();
|
||||
bool shoulEndPaint = false;
|
||||
IntPtr dc;
|
||||
if (m.WParam == IntPtr.Zero)
|
||||
{
|
||||
dc = BeginPaint(Handle, ref ps);
|
||||
m.WParam = dc;
|
||||
shoulEndPaint = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
dc = m.WParam;
|
||||
}
|
||||
var rgn = CreateRectRgn(innerInnerBorder.Left, innerInnerBorder.Top,
|
||||
innerInnerBorder.Right, innerInnerBorder.Bottom);
|
||||
SelectClipRgn(dc, rgn);
|
||||
DefWndProc(ref m);
|
||||
DeleteObject(rgn);
|
||||
rgn = CreateRectRgn(clientRect.Left, clientRect.Top,
|
||||
clientRect.Right, clientRect.Bottom);
|
||||
SelectClipRgn(dc, rgn);
|
||||
using (var g = Graphics.FromHdc(dc))
|
||||
{
|
||||
using (var b = new SolidBrush(buttonColor))
|
||||
{
|
||||
g.FillRectangle(b, dropDownRect);
|
||||
}
|
||||
using (var b = new SolidBrush(arrowColor))
|
||||
{
|
||||
g.FillPolygon(b, arrow);
|
||||
}
|
||||
using (var p = new Pen(innerBorderColor))
|
||||
{
|
||||
g.DrawRectangle(p, innerBorder);
|
||||
g.DrawRectangle(p, innerInnerBorder);
|
||||
}
|
||||
using (var p = new Pen(outerBorderColor))
|
||||
{
|
||||
g.DrawRectangle(p, outerBorder);
|
||||
}
|
||||
}
|
||||
if (shoulEndPaint)
|
||||
EndPaint(Handle, ref ps);
|
||||
DeleteObject(rgn);
|
||||
}
|
||||
else
|
||||
base.WndProc(ref m);
|
||||
}
|
||||
|
||||
private const int WM_PAINT = 0xF;
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct RECT
|
||||
{
|
||||
public int L, T, R, B;
|
||||
}
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct PAINTSTRUCT
|
||||
{
|
||||
public IntPtr hdc;
|
||||
public bool fErase;
|
||||
public int rcPaint_left;
|
||||
public int rcPaint_top;
|
||||
public int rcPaint_right;
|
||||
public int rcPaint_bottom;
|
||||
public bool fRestore;
|
||||
public bool fIncUpdate;
|
||||
public int reserved1;
|
||||
public int reserved2;
|
||||
public int reserved3;
|
||||
public int reserved4;
|
||||
public int reserved5;
|
||||
public int reserved6;
|
||||
public int reserved7;
|
||||
public int reserved8;
|
||||
}
|
||||
[DllImport("user32.dll")]
|
||||
private static extern IntPtr BeginPaint(IntPtr hWnd,
|
||||
[In, Out] ref PAINTSTRUCT lpPaint);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool EndPaint(IntPtr hWnd, ref PAINTSTRUCT lpPaint);
|
||||
|
||||
[DllImport("gdi32.dll")]
|
||||
public static extern int SelectClipRgn(IntPtr hDC, IntPtr hRgn);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern int GetUpdateRgn(IntPtr hwnd, IntPtr hrgn, bool fErase);
|
||||
public enum RegionFlags
|
||||
{
|
||||
ERROR = 0,
|
||||
NULLREGION = 1,
|
||||
SIMPLEREGION = 2,
|
||||
COMPLEXREGION = 3,
|
||||
}
|
||||
[DllImport("gdi32.dll")]
|
||||
internal static extern bool DeleteObject(IntPtr hObject);
|
||||
|
||||
[DllImport("gdi32.dll")]
|
||||
private static extern IntPtr CreateRectRgn(int x1, int y1, int x2, int y2);
|
||||
}
|
||||
|
||||
public class RButton : Button
|
||||
{
|
||||
//Fields
|
||||
private int borderSize = 5;
|
||||
|
||||
private int borderRadius = 5;
|
||||
public int BorderRadius
|
||||
{
|
||||
get { return borderRadius; }
|
||||
set
|
||||
{
|
||||
borderRadius = value;
|
||||
}
|
||||
}
|
||||
|
||||
private Color borderColor = Color.Transparent;
|
||||
public Color BorderColor
|
||||
{
|
||||
get { return borderColor; }
|
||||
set
|
||||
{
|
||||
borderColor = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private bool activated = false;
|
||||
public bool Activated
|
||||
{
|
||||
get { return activated; }
|
||||
set
|
||||
{
|
||||
if (activated != value)
|
||||
this.Invalidate();
|
||||
activated = value;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private bool secondary = false;
|
||||
public bool Secondary
|
||||
{
|
||||
get { return secondary; }
|
||||
set
|
||||
{
|
||||
secondary = value;
|
||||
}
|
||||
}
|
||||
|
||||
public RButton()
|
||||
{
|
||||
this.FlatStyle = FlatStyle.Flat;
|
||||
this.FlatAppearance.BorderSize = 0;
|
||||
}
|
||||
|
||||
private GraphicsPath GetFigurePath(Rectangle rect, int radius)
|
||||
{
|
||||
GraphicsPath path = new GraphicsPath();
|
||||
float curveSize = radius * 2F;
|
||||
|
||||
path.StartFigure();
|
||||
path.AddArc(rect.X, rect.Y, curveSize, curveSize, 180, 90);
|
||||
path.AddArc(rect.Right - curveSize, rect.Y, curveSize, curveSize, 270, 90);
|
||||
path.AddArc(rect.Right - curveSize, rect.Bottom - curveSize, curveSize, curveSize, 0, 90);
|
||||
path.AddArc(rect.X, rect.Bottom - curveSize, curveSize, curveSize, 90, 90);
|
||||
path.CloseFigure();
|
||||
return path;
|
||||
}
|
||||
|
||||
|
||||
protected override void OnPaint(PaintEventArgs pevent)
|
||||
{
|
||||
|
||||
base.OnPaint(pevent);
|
||||
|
||||
float ratio = pevent.Graphics.DpiX / 192.0f;
|
||||
int border = (int)(ratio * borderSize);
|
||||
|
||||
Rectangle rectSurface = this.ClientRectangle;
|
||||
Rectangle rectBorder = Rectangle.Inflate(rectSurface, -border, -border);
|
||||
|
||||
Color borderDrawColor = activated ? borderColor : Color.Transparent;
|
||||
|
||||
using (GraphicsPath pathSurface = GetFigurePath(rectSurface, borderRadius + border))
|
||||
using (GraphicsPath pathBorder = GetFigurePath(rectBorder, borderRadius))
|
||||
using (Pen penSurface = new Pen(this.Parent.BackColor, border))
|
||||
using (Pen penBorder = new Pen(borderDrawColor, border))
|
||||
{
|
||||
penBorder.Alignment = PenAlignment.Outset;
|
||||
pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
this.Region = new Region(pathSurface);
|
||||
pevent.Graphics.DrawPath(penSurface, pathSurface);
|
||||
pevent.Graphics.DrawPath(penBorder, pathBorder);
|
||||
}
|
||||
|
||||
if (!Enabled && ForeColor != SystemColors.ControlText)
|
||||
{
|
||||
var rect = pevent.ClipRectangle;
|
||||
if (Image is not null)
|
||||
{
|
||||
rect.Y += Image.Height;
|
||||
rect.Height -= Image.Height;
|
||||
}
|
||||
TextFormatFlags flags = TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter | TextFormatFlags.WordBreak;
|
||||
TextRenderer.DrawText(pevent.Graphics, this.Text, this.Font, rect, Color.Gray, flags);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -1,120 +0,0 @@
|
||||
<?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>
|
||||
</root>
|
||||
117
app/Fans.Designer.cs
generated
117
app/Fans.Designer.cs
generated
@@ -1,7 +1,4 @@
|
||||
using CustomControls;
|
||||
using System.Windows.Forms.DataVisualization.Charting;
|
||||
|
||||
namespace GHelper
|
||||
namespace GHelper
|
||||
{
|
||||
partial class Fans
|
||||
{
|
||||
@@ -31,30 +28,25 @@ namespace GHelper
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
ChartArea chartArea1 = new ChartArea();
|
||||
Title title1 = new Title();
|
||||
ChartArea chartArea2 = new ChartArea();
|
||||
Title title2 = new Title();
|
||||
ChartArea chartArea3 = new ChartArea();
|
||||
Title title3 = new Title();
|
||||
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
|
||||
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
|
||||
panelFans = new Panel();
|
||||
labelTip = new Label();
|
||||
labelBoost = new Label();
|
||||
comboBoost = new RComboBox();
|
||||
comboBoost = new ComboBox();
|
||||
picturePerf = new PictureBox();
|
||||
tableFanCharts = new TableLayoutPanel();
|
||||
chartGPU = new Chart();
|
||||
chartCPU = new Chart();
|
||||
chartMid = new Chart();
|
||||
chartGPU = new System.Windows.Forms.DataVisualization.Charting.Chart();
|
||||
chartCPU = new System.Windows.Forms.DataVisualization.Charting.Chart();
|
||||
labelFans = new Label();
|
||||
checkAuto = new CheckBox();
|
||||
buttonReset = new RButton();
|
||||
buttonApply = new RButton();
|
||||
buttonReset = new Button();
|
||||
buttonApply = new Button();
|
||||
panelPower = new Panel();
|
||||
pictureBox1 = new PictureBox();
|
||||
labelPowerLimits = new Label();
|
||||
checkApplyPower = new CheckBox();
|
||||
buttonApplyPower = new RButton();
|
||||
buttonApplyPower = new Button();
|
||||
panelCPU = new Panel();
|
||||
labelCPU = new Label();
|
||||
label2 = new Label();
|
||||
@@ -71,7 +63,6 @@ namespace GHelper
|
||||
tableFanCharts.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartCPU).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartMid).BeginInit();
|
||||
panelPower.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
|
||||
panelCPU.SuspendLayout();
|
||||
@@ -123,7 +114,6 @@ namespace GHelper
|
||||
// comboBoost
|
||||
//
|
||||
comboBoost.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
comboBoost.BorderColor = Color.White;
|
||||
comboBoost.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboBoost.FormattingEnabled = true;
|
||||
comboBoost.Items.AddRange(new object[] { "Disabled", "Enabled", "Aggressive", "Efficient Enabled", "Efficient Aggressive" });
|
||||
@@ -151,14 +141,14 @@ namespace GHelper
|
||||
tableFanCharts.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
|
||||
tableFanCharts.Controls.Add(chartGPU, 0, 1);
|
||||
tableFanCharts.Controls.Add(chartCPU, 0, 0);
|
||||
tableFanCharts.Controls.Add(chartMid, 0, 2);
|
||||
tableFanCharts.Location = new Point(28, 64);
|
||||
tableFanCharts.Margin = new Padding(6);
|
||||
tableFanCharts.Name = "tableFanCharts";
|
||||
tableFanCharts.RowCount = 2;
|
||||
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 33F));
|
||||
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 33F));
|
||||
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 33F));
|
||||
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
|
||||
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Percent, 50F));
|
||||
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Absolute, 40F));
|
||||
tableFanCharts.RowStyles.Add(new RowStyle(SizeType.Absolute, 40F));
|
||||
tableFanCharts.Size = new Size(764, 992);
|
||||
tableFanCharts.TabIndex = 36;
|
||||
//
|
||||
@@ -167,14 +157,12 @@ namespace GHelper
|
||||
chartArea1.Name = "ChartArea1";
|
||||
chartGPU.ChartAreas.Add(chartArea1);
|
||||
chartGPU.Dock = DockStyle.Fill;
|
||||
chartGPU.Location = new Point(2, 340);
|
||||
chartGPU.Location = new Point(2, 506);
|
||||
chartGPU.Margin = new Padding(2, 10, 2, 10);
|
||||
chartGPU.Name = "chartGPU";
|
||||
chartGPU.Size = new Size(760, 310);
|
||||
chartGPU.Size = new Size(760, 476);
|
||||
chartGPU.TabIndex = 17;
|
||||
chartGPU.Text = "chartGPU";
|
||||
title1.Name = "Title1";
|
||||
chartGPU.Titles.Add(title1);
|
||||
chartGPU.Text = "chart1";
|
||||
//
|
||||
// chartCPU
|
||||
//
|
||||
@@ -184,26 +172,9 @@ namespace GHelper
|
||||
chartCPU.Location = new Point(2, 10);
|
||||
chartCPU.Margin = new Padding(2, 10, 2, 10);
|
||||
chartCPU.Name = "chartCPU";
|
||||
chartCPU.Size = new Size(760, 310);
|
||||
chartCPU.Size = new Size(760, 476);
|
||||
chartCPU.TabIndex = 14;
|
||||
chartCPU.Text = "chartCPU";
|
||||
title2.Name = "Title1";
|
||||
chartCPU.Titles.Add(title2);
|
||||
//
|
||||
// chartMid
|
||||
//
|
||||
chartArea3.Name = "ChartArea3";
|
||||
chartMid.ChartAreas.Add(chartArea3);
|
||||
chartMid.Dock = DockStyle.Fill;
|
||||
chartMid.Location = new Point(2, 670);
|
||||
chartMid.Margin = new Padding(2, 10, 2, 10);
|
||||
chartMid.Name = "chartMid";
|
||||
chartMid.Size = new Size(760, 312);
|
||||
chartMid.TabIndex = 14;
|
||||
chartMid.Text = "chartMid";
|
||||
title3.Name = "Title3";
|
||||
chartMid.Titles.Add(title3);
|
||||
chartMid.Visible = false;
|
||||
//
|
||||
// labelFans
|
||||
//
|
||||
@@ -230,37 +201,25 @@ namespace GHelper
|
||||
//
|
||||
// buttonReset
|
||||
//
|
||||
buttonReset.Activated = false;
|
||||
buttonReset.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
|
||||
buttonReset.BackColor = Color.FromArgb(230, 230, 230);
|
||||
buttonReset.BorderColor = Color.Transparent;
|
||||
buttonReset.BorderRadius = 2;
|
||||
buttonReset.FlatStyle = FlatStyle.Flat;
|
||||
buttonReset.Location = new Point(30, 1081);
|
||||
buttonReset.Margin = new Padding(4, 2, 4, 2);
|
||||
buttonReset.Name = "buttonReset";
|
||||
buttonReset.Secondary = true;
|
||||
buttonReset.Size = new Size(232, 44);
|
||||
buttonReset.TabIndex = 15;
|
||||
buttonReset.Text = "Factory Defaults";
|
||||
buttonReset.UseVisualStyleBackColor = false;
|
||||
buttonReset.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// buttonApply
|
||||
//
|
||||
buttonApply.Activated = false;
|
||||
buttonApply.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||
buttonApply.BackColor = Color.FromArgb(230, 230, 230);
|
||||
buttonApply.BorderColor = Color.Transparent;
|
||||
buttonApply.BorderRadius = 2;
|
||||
buttonApply.FlatStyle = FlatStyle.Flat;
|
||||
buttonApply.Location = new Point(542, 1081);
|
||||
buttonApply.Margin = new Padding(4, 2, 4, 2);
|
||||
buttonApply.Name = "buttonApply";
|
||||
buttonApply.Secondary = true;
|
||||
buttonApply.Size = new Size(248, 44);
|
||||
buttonApply.TabIndex = 14;
|
||||
buttonApply.Text = "Apply Custom Curve";
|
||||
buttonApply.UseVisualStyleBackColor = false;
|
||||
buttonApply.Text = "Apply Fan Curve";
|
||||
buttonApply.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// panelPower
|
||||
//
|
||||
@@ -318,20 +277,14 @@ namespace GHelper
|
||||
//
|
||||
// buttonApplyPower
|
||||
//
|
||||
buttonApplyPower.Activated = false;
|
||||
buttonApplyPower.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||
buttonApplyPower.BackColor = Color.FromArgb(230, 230, 230);
|
||||
buttonApplyPower.BorderColor = Color.Transparent;
|
||||
buttonApplyPower.BorderRadius = 2;
|
||||
buttonApplyPower.FlatStyle = FlatStyle.Flat;
|
||||
buttonApplyPower.Location = new Point(20, 1081);
|
||||
buttonApplyPower.Margin = new Padding(4, 2, 4, 2);
|
||||
buttonApplyPower.Name = "buttonApplyPower";
|
||||
buttonApplyPower.Secondary = true;
|
||||
buttonApplyPower.Size = new Size(324, 44);
|
||||
buttonApplyPower.TabIndex = 24;
|
||||
buttonApplyPower.Text = "Apply Power Limits";
|
||||
buttonApplyPower.UseVisualStyleBackColor = false;
|
||||
buttonApplyPower.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// panelCPU
|
||||
//
|
||||
@@ -346,11 +299,12 @@ namespace GHelper
|
||||
//
|
||||
// labelCPU
|
||||
//
|
||||
labelCPU.AutoSize = true;
|
||||
labelCPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelCPU.Location = new Point(13, 40);
|
||||
labelCPU.Location = new Point(44, 40);
|
||||
labelCPU.Margin = new Padding(4, 0, 4, 0);
|
||||
labelCPU.Name = "labelCPU";
|
||||
labelCPU.Size = new Size(120, 32);
|
||||
labelCPU.Size = new Size(61, 32);
|
||||
labelCPU.TabIndex = 13;
|
||||
labelCPU.Text = "CPU";
|
||||
labelCPU.TextAlign = ContentAlignment.MiddleCenter;
|
||||
@@ -392,24 +346,25 @@ namespace GHelper
|
||||
//
|
||||
// labelTotal
|
||||
//
|
||||
labelTotal.AutoSize = true;
|
||||
labelTotal.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelTotal.Location = new Point(16, 40);
|
||||
labelTotal.Location = new Point(46, 40);
|
||||
labelTotal.Margin = new Padding(4, 0, 4, 0);
|
||||
labelTotal.Name = "labelTotal";
|
||||
labelTotal.Size = new Size(122, 32);
|
||||
labelTotal.Size = new Size(70, 32);
|
||||
labelTotal.TabIndex = 12;
|
||||
labelTotal.Text = "Platform";
|
||||
labelTotal.Text = "Total";
|
||||
labelTotal.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
label1.AutoSize = true;
|
||||
label1.Location = new Point(26, 8);
|
||||
label1.Location = new Point(48, 8);
|
||||
label1.Margin = new Padding(4, 0, 4, 0);
|
||||
label1.Name = "label1";
|
||||
label1.Size = new Size(104, 32);
|
||||
label1.Size = new Size(65, 32);
|
||||
label1.TabIndex = 11;
|
||||
label1.Text = "Platform";
|
||||
label1.Text = "Total";
|
||||
label1.TextAlign = ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// trackTotal
|
||||
@@ -485,7 +440,6 @@ namespace GHelper
|
||||
tableFanCharts.ResumeLayout(false);
|
||||
((System.ComponentModel.ISupportInitialize)chartGPU).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartCPU).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)chartMid).EndInit();
|
||||
panelPower.ResumeLayout(false);
|
||||
panelPower.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
|
||||
@@ -502,11 +456,11 @@ namespace GHelper
|
||||
#endregion
|
||||
private Panel panelFans;
|
||||
private CheckBox checkAuto;
|
||||
private RButton buttonReset;
|
||||
private RButton buttonApply;
|
||||
private Button buttonReset;
|
||||
private Button buttonApply;
|
||||
private Panel panelPower;
|
||||
private CheckBox checkApplyPower;
|
||||
private RButton buttonApplyPower;
|
||||
private Button buttonApplyPower;
|
||||
private Panel panelCPU;
|
||||
private Label labelCPU;
|
||||
private Label label2;
|
||||
@@ -522,11 +476,10 @@ namespace GHelper
|
||||
private TableLayoutPanel tableFanCharts;
|
||||
private System.Windows.Forms.DataVisualization.Charting.Chart chartGPU;
|
||||
private System.Windows.Forms.DataVisualization.Charting.Chart chartCPU;
|
||||
private System.Windows.Forms.DataVisualization.Charting.Chart chartMid;
|
||||
private Label labelFans;
|
||||
private PictureBox picturePerf;
|
||||
private PictureBox pictureBox1;
|
||||
private RComboBox comboBoost;
|
||||
private ComboBox comboBoost;
|
||||
private Label labelBoost;
|
||||
private Label labelTip;
|
||||
}
|
||||
|
||||
87
app/Fans.cs
87
app/Fans.cs
@@ -1,24 +1,19 @@
|
||||
using System.Diagnostics;
|
||||
using System.Windows.Forms.DataVisualization.Charting;
|
||||
using CustomControls;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
public partial class Fans : RForm
|
||||
public partial class Fans : Form
|
||||
{
|
||||
|
||||
DataPoint curPoint = null;
|
||||
Series seriesCPU;
|
||||
Series seriesGPU;
|
||||
Series seriesMid;
|
||||
|
||||
static int MinRPM, MaxRPM;
|
||||
|
||||
static string ChartPercToRPM(int percentage, string unit = "")
|
||||
{
|
||||
if (percentage == 0) return "OFF";
|
||||
|
||||
return (200 * Math.Round((float)(MinRPM*100 + (MaxRPM - MinRPM) * percentage) / 200)).ToString() + unit;
|
||||
return (1800 + 200 * Math.Floor(percentage * 0.2)).ToString() + unit;
|
||||
}
|
||||
|
||||
void SetChart(Chart chart, int device)
|
||||
@@ -28,15 +23,19 @@ namespace GHelper
|
||||
|
||||
if (device == 1)
|
||||
title = "GPU Fan Profile";
|
||||
else if (device == 2)
|
||||
title = "Middle Fan Profile";
|
||||
else
|
||||
title = "CPU Fan Profile";
|
||||
|
||||
if (Program.settingsForm.perfName.Length > 0)
|
||||
labelFans.Text = "Fan Profiles: " + Program.settingsForm.perfName;
|
||||
|
||||
chart.Titles[0].Text = title;
|
||||
if (chart.Titles.Count > 0)
|
||||
chart.Titles[0].Text = title;
|
||||
else
|
||||
chart.Titles.Add(title);
|
||||
|
||||
chart.ChartAreas[0].AxisX.MajorGrid.LineColor = Color.LightGray;
|
||||
chart.ChartAreas[0].AxisY.MajorGrid.LineColor = Color.LightGray;
|
||||
|
||||
chart.ChartAreas[0].AxisX.Minimum = 10;
|
||||
chart.ChartAreas[0].AxisX.Maximum = 100;
|
||||
@@ -47,13 +46,6 @@ namespace GHelper
|
||||
|
||||
chart.ChartAreas[0].AxisY.LabelStyle.Font = new Font("Arial", 7F);
|
||||
|
||||
var foreAccent = Color.FromArgb(255, 100, 100, 100);
|
||||
|
||||
chart.ChartAreas[0].AxisX.MajorGrid.LineColor = foreAccent;
|
||||
chart.ChartAreas[0].AxisY.MajorGrid.LineColor = foreAccent;
|
||||
chart.ChartAreas[0].AxisX.LineColor = foreAccent;
|
||||
chart.ChartAreas[0].AxisY.LineColor = foreAccent;
|
||||
|
||||
for (int i = 0; i <= 90; i += 10)
|
||||
chart.ChartAreas[0].AxisY.CustomLabels.Add(i - 2, i + 2, ChartPercToRPM(i));
|
||||
|
||||
@@ -87,12 +79,6 @@ namespace GHelper
|
||||
{
|
||||
|
||||
InitializeComponent();
|
||||
InitTheme();
|
||||
|
||||
MinRPM = 18;
|
||||
MaxRPM = HardwareMonitor.GetFanMax();
|
||||
|
||||
|
||||
|
||||
labelTip.Visible = false;
|
||||
labelTip.BackColor = Color.Transparent;
|
||||
@@ -101,11 +87,9 @@ namespace GHelper
|
||||
|
||||
seriesCPU = chartCPU.Series.Add("CPU");
|
||||
seriesGPU = chartGPU.Series.Add("GPU");
|
||||
seriesMid = chartMid.Series.Add("Mid");
|
||||
|
||||
seriesCPU.Color = colorStandard;
|
||||
seriesGPU.Color = colorTurbo;
|
||||
seriesMid.Color = colorEco;
|
||||
seriesCPU.Color = Color.Blue;
|
||||
seriesGPU.Color = Color.Red;
|
||||
|
||||
chartCPU.MouseMove += ChartCPU_MouseMove;
|
||||
chartCPU.MouseUp += ChartCPU_MouseUp;
|
||||
@@ -113,9 +97,6 @@ namespace GHelper
|
||||
chartGPU.MouseMove += ChartCPU_MouseMove;
|
||||
chartGPU.MouseUp += ChartCPU_MouseUp;
|
||||
|
||||
chartMid.MouseMove += ChartCPU_MouseMove;
|
||||
chartMid.MouseUp += ChartCPU_MouseUp;
|
||||
|
||||
buttonReset.Click += ButtonReset_Click;
|
||||
buttonApply.Click += ButtonApply_Click;
|
||||
|
||||
@@ -140,7 +121,7 @@ namespace GHelper
|
||||
InitPower();
|
||||
InitBoost();
|
||||
|
||||
comboBoost.SelectedValueChanged += ComboBoost_Changed;
|
||||
comboBoost.SelectedIndexChanged += ComboBoost_Changed;
|
||||
|
||||
Shown += Fans_Shown;
|
||||
|
||||
@@ -156,11 +137,9 @@ namespace GHelper
|
||||
|
||||
private void ComboBoost_Changed(object? sender, EventArgs e)
|
||||
{
|
||||
if (Program.config.getConfigPerf("auto_boost") != comboBoost.SelectedIndex)
|
||||
{
|
||||
NativeMethods.SetCPUBoost(comboBoost.SelectedIndex);
|
||||
Program.config.setConfigPerf("auto_boost", comboBoost.SelectedIndex);
|
||||
}
|
||||
if (sender is null) return;
|
||||
ComboBox cmb = (ComboBox)sender;
|
||||
NativeMethods.SetCPUBoost(cmb.SelectedIndex);
|
||||
}
|
||||
|
||||
private void CheckApplyPower_Click(object? sender, EventArgs e)
|
||||
@@ -261,12 +240,12 @@ namespace GHelper
|
||||
{
|
||||
if (applied)
|
||||
{
|
||||
labelApplied.ForeColor = colorStandard;
|
||||
labelApplied.ForeColor = Color.Blue;
|
||||
labelApplied.Text = "Applied";
|
||||
}
|
||||
else
|
||||
{
|
||||
labelApplied.ForeColor = colorTurbo;
|
||||
labelApplied.ForeColor = Color.Red;
|
||||
labelApplied.Text = "Not Applied";
|
||||
|
||||
}
|
||||
@@ -275,22 +254,6 @@ namespace GHelper
|
||||
public void InitFans()
|
||||
{
|
||||
|
||||
byte[] curve = Program.wmi.GetFanCurve(2);
|
||||
|
||||
if (curve.All(singleByte => singleByte == 0))
|
||||
{
|
||||
Program.config.setConfig("mid_fan", 0);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
Program.config.setConfig("mid_fan", 1);
|
||||
chartMid.Visible = true;
|
||||
SetChart(chartMid, 2);
|
||||
LoadProfile(seriesMid, 2);
|
||||
}
|
||||
|
||||
|
||||
SetChart(chartCPU, 0);
|
||||
SetChart(chartGPU, 1);
|
||||
|
||||
@@ -334,7 +297,7 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
void SaveProfile(Series series, int device)
|
||||
void ApplyProfile(Series series, int device)
|
||||
{
|
||||
byte[] curve = new byte[16];
|
||||
int i = 0;
|
||||
@@ -346,19 +309,15 @@ namespace GHelper
|
||||
}
|
||||
|
||||
Program.config.setFanConfig(device, curve);
|
||||
//Program.wmi.SetFanCurve(device, curve);
|
||||
Program.wmi.SetFanCurve(device, curve);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private void ButtonApply_Click(object? sender, EventArgs e)
|
||||
{
|
||||
SaveProfile(seriesCPU, 0);
|
||||
SaveProfile(seriesGPU, 1);
|
||||
if (Program.config.getConfig("mid_fan") == 1)
|
||||
SaveProfile(seriesMid, 2);
|
||||
|
||||
Program.settingsForm.AutoFans(true);
|
||||
ApplyProfile(seriesCPU, 0);
|
||||
ApplyProfile(seriesGPU, 1);
|
||||
}
|
||||
|
||||
private void ButtonReset_Click(object? sender, EventArgs e)
|
||||
@@ -366,8 +325,6 @@ namespace GHelper
|
||||
|
||||
LoadProfile(seriesCPU, 0, 1);
|
||||
LoadProfile(seriesGPU, 1, 1);
|
||||
if (Program.config.getConfig("mid_fan") == 1)
|
||||
LoadProfile(seriesMid, 2, 1);
|
||||
|
||||
checkAuto.Checked = false;
|
||||
checkApplyPower.Checked = false;
|
||||
@@ -375,7 +332,7 @@ namespace GHelper
|
||||
Program.config.setConfigPerf("auto_apply", 0);
|
||||
Program.config.setConfigPerf("auto_apply_power", 0);
|
||||
|
||||
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, Program.config.getConfig("performance_mode"), "PerfMode");
|
||||
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, Program.config.getConfig("performance_mode"));
|
||||
|
||||
ApplyLabel(false);
|
||||
}
|
||||
|
||||
@@ -16,7 +16,24 @@
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
<AssemblyVersion>0.45</AssemblyVersion>
|
||||
<AssemblyVersion>0.31</AssemblyVersion>
|
||||
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<DebugType>none</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
|
||||
<DebugType>none</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<DebugType>none</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<DebugType>none</DebugType>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -51,6 +68,15 @@
|
||||
<PackageReference Include="WinForms.DataVisualization" Version="1.7.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.Management.Infrastructure">
|
||||
<HintPath>..\..\.nuget\packages\microsoft.management.infrastructure\2.0.0\ref\net451\Microsoft.Management.Infrastructure.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Management.Infrastructure.Native">
|
||||
<HintPath>..\..\.nuget\packages\microsoft.management.infrastructure.runtime.win\2.0.0\runtimes\win10-x64\lib\netstandard1.6\Microsoft.Management.Infrastructure.Native.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="Resources\eco.ico">
|
||||
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
|
||||
@@ -99,4 +125,8 @@
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
|
||||
<Exec Command="call post-build.bat $(TargetPath)
" />
|
||||
</Target>
|
||||
|
||||
</Project>
|
||||
@@ -1,5 +1,4 @@
|
||||
using System.Diagnostics;
|
||||
using GHelper;
|
||||
using GHelper.Gpu;
|
||||
|
||||
public static class HardwareMonitor
|
||||
@@ -10,53 +9,12 @@ public static class HardwareMonitor
|
||||
public static float? batteryDischarge = -1;
|
||||
public static int? gpuTemp = null;
|
||||
|
||||
public static string? cpuFan;
|
||||
public static string? gpuFan;
|
||||
public static string? midFan;
|
||||
|
||||
public static int GetFanMax()
|
||||
{
|
||||
int max = 58;
|
||||
if (Program.config.ContainsModel("401")) max = 72;
|
||||
else if (Program.config.ContainsModel("503")) max = 68;
|
||||
return Math.Max(max, Program.config.getConfig("fan_max"));
|
||||
}
|
||||
|
||||
public static void SetFanMax(int fan)
|
||||
{
|
||||
Program.config.setConfig("fan_max", fan);
|
||||
}
|
||||
private static string FormatFan(int fan)
|
||||
{
|
||||
// fix for old models
|
||||
if (fan < 0)
|
||||
{
|
||||
fan += 65536;
|
||||
if (fan <= 0 || fan > 100) return null; //nothing reasonable
|
||||
}
|
||||
|
||||
int fanMax = GetFanMax();
|
||||
if (fan > fanMax) SetFanMax(fan);
|
||||
|
||||
if (Program.config.getConfig("fan_rpm") == 1)
|
||||
return " Fan: " + (fan * 100).ToString() + "RPM";
|
||||
else
|
||||
return " Fan: " + Math.Min(Math.Round((float)fan/fanMax*100), 100).ToString() + "%"; // relatively to 6000 rpm
|
||||
}
|
||||
|
||||
public static void ReadSensors()
|
||||
{
|
||||
cpuTemp = -1;
|
||||
batteryDischarge = -1;
|
||||
gpuTemp = -1;
|
||||
|
||||
cpuFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.CPU_Fan));
|
||||
gpuFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.GPU_Fan));
|
||||
midFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.Mid_Fan));
|
||||
|
||||
cpuTemp = Program.wmi.DeviceGet(ASUSWmi.Temp_CPU);
|
||||
|
||||
|
||||
if (cpuTemp < 0) try
|
||||
try
|
||||
{
|
||||
var ct = new PerformanceCounter("Thermal Zone Information", "Temperature", @"\_TZ.THRM", true);
|
||||
cpuTemp = ct.NextValue() - 273;
|
||||
@@ -66,77 +24,63 @@ public static class HardwareMonitor
|
||||
Logger.WriteLine("Failed reading CPU temp");
|
||||
}
|
||||
|
||||
if (gpuTemp < 0) try
|
||||
{
|
||||
if (GpuTemperatureProvider is null) RecreateGpuTemperatureProvider();
|
||||
gpuTemp = GpuTemperatureProvider?.GetCurrentTemperature();
|
||||
|
||||
}
|
||||
catch (Exception ex) {
|
||||
gpuTemp = -1;
|
||||
Logger.WriteLine("Failed reading GPU temp");
|
||||
Logger.WriteLine(ex.ToString());
|
||||
}
|
||||
|
||||
if (gpuTemp < 0)
|
||||
gpuTemp = Program.wmi.DeviceGet(ASUSWmi.Temp_GPU);
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
var cb = new PerformanceCounter("Power Meter", "Power", "Power Meter (0)", true);
|
||||
batteryDischarge = cb.NextValue() / 1000;
|
||||
cb.Dispose();
|
||||
|
||||
}
|
||||
catch
|
||||
} catch
|
||||
{
|
||||
Logger.WriteLine("Failed reading Battery discharge");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
gpuTemp = GpuTemperatureProvider?.GetCurrentTemperature();
|
||||
} catch (Exception ex) {
|
||||
gpuTemp = null;
|
||||
Logger.WriteLine("Failed reading GPU temp");
|
||||
Logger.WriteLine(ex.ToString());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static void RecreateGpuTemperatureProviderWithDelay() {
|
||||
public static void RecreateGpuTemperatureProviderWithRetry() {
|
||||
RecreateGpuTemperatureProvider();
|
||||
|
||||
// Re-enabling the discrete GPU takes a bit of time,
|
||||
// so a simple workaround is to refresh again after that happens
|
||||
Task.Run(async () => {
|
||||
await Task.Delay(TimeSpan.FromSeconds(5));
|
||||
await Task.Delay(TimeSpan.FromSeconds(3));
|
||||
RecreateGpuTemperatureProvider();
|
||||
});
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static void RecreateGpuTemperatureProvider() {
|
||||
try
|
||||
{
|
||||
try {
|
||||
GpuTemperatureProvider?.Dispose();
|
||||
|
||||
// Detect valid GPU temperature provider.
|
||||
// We start with NVIDIA because there's always at least an integrated AMD GPU
|
||||
IGpuTemperatureProvider gpuTemperatureProvider = new NvidiaGpuTemperatureProvider();
|
||||
if (gpuTemperatureProvider.IsValid)
|
||||
{
|
||||
if (gpuTemperatureProvider.IsValid) {
|
||||
GpuTemperatureProvider = gpuTemperatureProvider;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
gpuTemperatureProvider.Dispose();
|
||||
gpuTemperatureProvider = new AmdGpuTemperatureProvider();
|
||||
if (gpuTemperatureProvider.IsValid)
|
||||
{
|
||||
if (gpuTemperatureProvider.IsValid) {
|
||||
GpuTemperatureProvider = gpuTemperatureProvider;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
gpuTemperatureProvider.Dispose();
|
||||
|
||||
|
||||
GpuTemperatureProvider = null;
|
||||
} finally {
|
||||
Logger.WriteLine($"GpuTemperatureProvider: {GpuTemperatureProvider?.GetType().Name}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
67
app/HighDpiHelper.cs
Normal file
67
app/HighDpiHelper.cs
Normal file
@@ -0,0 +1,67 @@
|
||||
using System.Drawing.Drawing2D;
|
||||
|
||||
public static class HighDpiHelper
|
||||
{
|
||||
public static void AdjustControlImagesDpiScale(Control container, float baseScale = 2)
|
||||
{
|
||||
var dpiScale = GetDpiScale(container).Value;
|
||||
AdjustControlImagesDpiScale(container.Controls, dpiScale / baseScale);
|
||||
}
|
||||
|
||||
public static void AdjustButtonDpiScale(ButtonBase button, float dpiScale)
|
||||
{
|
||||
var image = button.Image;
|
||||
|
||||
if (image == null)
|
||||
return;
|
||||
|
||||
button.Image = ScaleImage(image, dpiScale);
|
||||
}
|
||||
|
||||
private static void AdjustControlImagesDpiScale(Control.ControlCollection controls, float dpiScale)
|
||||
{
|
||||
foreach (Control control in controls)
|
||||
{
|
||||
var button = control as ButtonBase;
|
||||
if (button != null)
|
||||
AdjustButtonDpiScale(button, dpiScale);
|
||||
|
||||
AdjustControlImagesDpiScale(control.Controls, dpiScale);
|
||||
}
|
||||
}
|
||||
|
||||
public static Lazy<float> GetDpiScale(Control control)
|
||||
{
|
||||
return new Lazy<float>(() =>
|
||||
{
|
||||
using (var graphics = control.CreateGraphics())
|
||||
return graphics.DpiX / 96.0f;
|
||||
});
|
||||
}
|
||||
|
||||
private static Image ScaleImage(Image image, float dpiScale)
|
||||
{
|
||||
var newSize = ScaleSize(image.Size, dpiScale);
|
||||
var newBitmap = new Bitmap(newSize.Width, newSize.Height);
|
||||
|
||||
using (var g = Graphics.FromImage(newBitmap))
|
||||
{
|
||||
// According to this blog post http://blogs.msdn.com/b/visualstudio/archive/2014/03/19/improving-high-dpi-support-for-visual-studio-2013.aspx
|
||||
// NearestNeighbor is more adapted for 200% and 200%+ DPI
|
||||
|
||||
var interpolationMode = InterpolationMode.HighQualityBicubic;
|
||||
if (dpiScale >= 2.0f)
|
||||
interpolationMode = InterpolationMode.NearestNeighbor;
|
||||
|
||||
g.InterpolationMode = interpolationMode;
|
||||
g.DrawImage(image, new Rectangle(new Point(), newSize));
|
||||
}
|
||||
|
||||
return newBitmap;
|
||||
}
|
||||
|
||||
private static Size ScaleSize(Size size, float scale)
|
||||
{
|
||||
return new Size((int)(size.Width * scale), (int)(size.Height * scale));
|
||||
}
|
||||
}
|
||||
218
app/Keyboard.Designer.cs
generated
218
app/Keyboard.Designer.cs
generated
@@ -1,6 +1,4 @@
|
||||
using CustomControls;
|
||||
|
||||
namespace GHelper
|
||||
namespace GHelper
|
||||
{
|
||||
partial class Keyboard
|
||||
{
|
||||
@@ -31,29 +29,16 @@ namespace GHelper
|
||||
private void InitializeComponent()
|
||||
{
|
||||
groupBox1 = new GroupBox();
|
||||
textFNF4 = new TextBox();
|
||||
comboFNF4 = new RComboBox();
|
||||
labelFNF4 = new Label();
|
||||
textM4 = new TextBox();
|
||||
textM3 = new TextBox();
|
||||
comboM4 = new RComboBox();
|
||||
comboM4 = new ComboBox();
|
||||
labelM4 = new Label();
|
||||
comboM3 = new RComboBox();
|
||||
comboM3 = new ComboBox();
|
||||
labelM3 = new Label();
|
||||
groupLight = new GroupBox();
|
||||
labelSpeed = new Label();
|
||||
comboKeyboardSpeed = new RComboBox();
|
||||
checkShutdown = new CheckBox();
|
||||
checkSleep = new CheckBox();
|
||||
checkBoot = new CheckBox();
|
||||
checkAwake = new CheckBox();
|
||||
groupOther = new GroupBox();
|
||||
checkKeyboardAuto = new CheckBox();
|
||||
checkTopmost = new CheckBox();
|
||||
checkNoOverdrive = new CheckBox();
|
||||
textFNF4 = new TextBox();
|
||||
comboFNF4 = new ComboBox();
|
||||
labelFNF4 = new Label();
|
||||
groupBox1.SuspendLayout();
|
||||
groupLight.SuspendLayout();
|
||||
groupOther.SuspendLayout();
|
||||
SuspendLayout();
|
||||
//
|
||||
// groupBox1
|
||||
@@ -70,36 +55,11 @@ namespace GHelper
|
||||
groupBox1.Dock = DockStyle.Top;
|
||||
groupBox1.Location = new Point(10, 10);
|
||||
groupBox1.Name = "groupBox1";
|
||||
groupBox1.Size = new Size(756, 242);
|
||||
groupBox1.Size = new Size(751, 242);
|
||||
groupBox1.TabIndex = 0;
|
||||
groupBox1.TabStop = false;
|
||||
groupBox1.Text = "Key Bindings";
|
||||
//
|
||||
// textFNF4
|
||||
//
|
||||
textFNF4.Location = new Point(411, 176);
|
||||
textFNF4.Name = "textFNF4";
|
||||
textFNF4.PlaceholderText = "action";
|
||||
textFNF4.Size = new Size(320, 39);
|
||||
textFNF4.TabIndex = 8;
|
||||
//
|
||||
// comboFNF4
|
||||
//
|
||||
comboFNF4.FormattingEnabled = true;
|
||||
comboFNF4.Location = new Point(93, 175);
|
||||
comboFNF4.Name = "comboFNF4";
|
||||
comboFNF4.Size = new Size(312, 40);
|
||||
comboFNF4.TabIndex = 7;
|
||||
//
|
||||
// labelFNF4
|
||||
//
|
||||
labelFNF4.AutoSize = true;
|
||||
labelFNF4.Location = new Point(2, 178);
|
||||
labelFNF4.Name = "labelFNF4";
|
||||
labelFNF4.Size = new Size(90, 32);
|
||||
labelFNF4.TabIndex = 6;
|
||||
labelFNF4.Text = "FN+F4:";
|
||||
//
|
||||
// textM4
|
||||
//
|
||||
textM4.Location = new Point(411, 113);
|
||||
@@ -152,137 +112,36 @@ namespace GHelper
|
||||
labelM3.TabIndex = 0;
|
||||
labelM3.Text = "M3:";
|
||||
//
|
||||
// groupLight
|
||||
// textFNF4
|
||||
//
|
||||
groupLight.Controls.Add(labelSpeed);
|
||||
groupLight.Controls.Add(comboKeyboardSpeed);
|
||||
groupLight.Controls.Add(checkShutdown);
|
||||
groupLight.Controls.Add(checkSleep);
|
||||
groupLight.Controls.Add(checkBoot);
|
||||
groupLight.Controls.Add(checkAwake);
|
||||
groupLight.Dock = DockStyle.Top;
|
||||
groupLight.Location = new Point(10, 252);
|
||||
groupLight.Name = "groupLight";
|
||||
groupLight.Size = new Size(756, 304);
|
||||
groupLight.TabIndex = 1;
|
||||
groupLight.TabStop = false;
|
||||
groupLight.Text = "Keyboard Backlight";
|
||||
textFNF4.Location = new Point(411, 176);
|
||||
textFNF4.Name = "textFNF4";
|
||||
textFNF4.PlaceholderText = "action";
|
||||
textFNF4.Size = new Size(320, 39);
|
||||
textFNF4.TabIndex = 8;
|
||||
//
|
||||
// labelSpeed
|
||||
// comboFNF4
|
||||
//
|
||||
labelSpeed.AutoSize = true;
|
||||
labelSpeed.Location = new Point(25, 237);
|
||||
labelSpeed.Name = "labelSpeed";
|
||||
labelSpeed.Size = new Size(198, 32);
|
||||
labelSpeed.TabIndex = 40;
|
||||
labelSpeed.Text = "Animation Speed";
|
||||
comboFNF4.FormattingEnabled = true;
|
||||
comboFNF4.Location = new Point(93, 175);
|
||||
comboFNF4.Name = "comboFNF4";
|
||||
comboFNF4.Size = new Size(312, 40);
|
||||
comboFNF4.TabIndex = 7;
|
||||
//
|
||||
// comboKeyboardSpeed
|
||||
// labelFNF4
|
||||
//
|
||||
comboKeyboardSpeed.BorderColor = Color.White;
|
||||
comboKeyboardSpeed.ButtonColor = SystemColors.ControlLight;
|
||||
comboKeyboardSpeed.FlatStyle = FlatStyle.Flat;
|
||||
comboKeyboardSpeed.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
comboKeyboardSpeed.FormattingEnabled = true;
|
||||
comboKeyboardSpeed.ItemHeight = 32;
|
||||
comboKeyboardSpeed.Items.AddRange(new object[] { "Slow", "Normal", "Fast" });
|
||||
comboKeyboardSpeed.Location = new Point(230, 234);
|
||||
comboKeyboardSpeed.Margin = new Padding(4, 10, 4, 8);
|
||||
comboKeyboardSpeed.Name = "comboKeyboardSpeed";
|
||||
comboKeyboardSpeed.Size = new Size(291, 40);
|
||||
comboKeyboardSpeed.TabIndex = 39;
|
||||
comboKeyboardSpeed.TabStop = false;
|
||||
//
|
||||
// checkShutdown
|
||||
//
|
||||
checkShutdown.AutoSize = true;
|
||||
checkShutdown.Location = new Point(25, 185);
|
||||
checkShutdown.Name = "checkShutdown";
|
||||
checkShutdown.Size = new Size(154, 36);
|
||||
checkShutdown.TabIndex = 3;
|
||||
checkShutdown.Text = "Shutdown";
|
||||
checkShutdown.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkSleep
|
||||
//
|
||||
checkSleep.AutoSize = true;
|
||||
checkSleep.Location = new Point(25, 143);
|
||||
checkSleep.Name = "checkSleep";
|
||||
checkSleep.Size = new Size(105, 36);
|
||||
checkSleep.TabIndex = 2;
|
||||
checkSleep.Text = "Sleep";
|
||||
checkSleep.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkBoot
|
||||
//
|
||||
checkBoot.AutoSize = true;
|
||||
checkBoot.Location = new Point(25, 101);
|
||||
checkBoot.Name = "checkBoot";
|
||||
checkBoot.Size = new Size(96, 36);
|
||||
checkBoot.TabIndex = 1;
|
||||
checkBoot.Text = "Boot";
|
||||
checkBoot.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkAwake
|
||||
//
|
||||
checkAwake.AutoSize = true;
|
||||
checkAwake.Location = new Point(25, 59);
|
||||
checkAwake.Name = "checkAwake";
|
||||
checkAwake.Size = new Size(115, 36);
|
||||
checkAwake.TabIndex = 0;
|
||||
checkAwake.Text = "Awake";
|
||||
checkAwake.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// groupOther
|
||||
//
|
||||
groupOther.Controls.Add(checkNoOverdrive);
|
||||
groupOther.Controls.Add(checkKeyboardAuto);
|
||||
groupOther.Controls.Add(checkTopmost);
|
||||
groupOther.Dock = DockStyle.Top;
|
||||
groupOther.Location = new Point(10, 556);
|
||||
groupOther.Name = "groupOther";
|
||||
groupOther.Size = new Size(756, 225);
|
||||
groupOther.TabIndex = 2;
|
||||
groupOther.TabStop = false;
|
||||
groupOther.Text = "Other";
|
||||
//
|
||||
// checkKeyboardAuto
|
||||
//
|
||||
checkKeyboardAuto.AutoSize = true;
|
||||
checkKeyboardAuto.Location = new Point(25, 51);
|
||||
checkKeyboardAuto.Name = "checkKeyboardAuto";
|
||||
checkKeyboardAuto.Size = new Size(712, 36);
|
||||
checkKeyboardAuto.TabIndex = 2;
|
||||
checkKeyboardAuto.Text = "Lower backlight brightness on battery and back when plugged";
|
||||
checkKeyboardAuto.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkTopmost
|
||||
//
|
||||
checkTopmost.AutoSize = true;
|
||||
checkTopmost.Location = new Point(25, 104);
|
||||
checkTopmost.Name = "checkTopmost";
|
||||
checkTopmost.Size = new Size(390, 36);
|
||||
checkTopmost.TabIndex = 1;
|
||||
checkTopmost.Text = "Keep app window always on top";
|
||||
checkTopmost.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkNoOverdrive
|
||||
//
|
||||
checkNoOverdrive.AutoSize = true;
|
||||
checkNoOverdrive.Location = new Point(25, 156);
|
||||
checkNoOverdrive.Name = "checkNoOverdrive";
|
||||
checkNoOverdrive.Size = new Size(307, 36);
|
||||
checkNoOverdrive.TabIndex = 3;
|
||||
checkNoOverdrive.Text = "Disable screen overdrive";
|
||||
checkNoOverdrive.UseVisualStyleBackColor = true;
|
||||
labelFNF4.AutoSize = true;
|
||||
labelFNF4.Location = new Point(2, 178);
|
||||
labelFNF4.Name = "labelFNF4";
|
||||
labelFNF4.Size = new Size(90, 32);
|
||||
labelFNF4.TabIndex = 6;
|
||||
labelFNF4.Text = "FN+F4:";
|
||||
//
|
||||
// Keyboard
|
||||
//
|
||||
AutoScaleDimensions = new SizeF(13F, 32F);
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
ClientSize = new Size(776, 858);
|
||||
Controls.Add(groupOther);
|
||||
Controls.Add(groupLight);
|
||||
ClientSize = new Size(771, 858);
|
||||
Controls.Add(groupBox1);
|
||||
FormBorderStyle = FormBorderStyle.FixedSingle;
|
||||
MaximizeBox = false;
|
||||
@@ -292,13 +151,9 @@ namespace GHelper
|
||||
Padding = new Padding(10);
|
||||
ShowIcon = false;
|
||||
ShowInTaskbar = false;
|
||||
Text = "Extra Settings";
|
||||
Text = "Keyboard";
|
||||
groupBox1.ResumeLayout(false);
|
||||
groupBox1.PerformLayout();
|
||||
groupLight.ResumeLayout(false);
|
||||
groupLight.PerformLayout();
|
||||
groupOther.ResumeLayout(false);
|
||||
groupOther.PerformLayout();
|
||||
ResumeLayout(false);
|
||||
}
|
||||
|
||||
@@ -306,24 +161,13 @@ namespace GHelper
|
||||
|
||||
private GroupBox groupBox1;
|
||||
private Label labelM3;
|
||||
private RComboBox comboM3;
|
||||
private RComboBox comboM4;
|
||||
private ComboBox comboM3;
|
||||
private ComboBox comboM4;
|
||||
private Label labelM4;
|
||||
private TextBox textM4;
|
||||
private TextBox textM3;
|
||||
private TextBox textFNF4;
|
||||
private RComboBox comboFNF4;
|
||||
private ComboBox comboFNF4;
|
||||
private Label labelFNF4;
|
||||
private GroupBox groupLight;
|
||||
private CheckBox checkSleep;
|
||||
private CheckBox checkBoot;
|
||||
private CheckBox checkAwake;
|
||||
private CheckBox checkShutdown;
|
||||
private Label labelSpeed;
|
||||
private RComboBox comboKeyboardSpeed;
|
||||
private GroupBox groupOther;
|
||||
private CheckBox checkTopmost;
|
||||
private CheckBox checkKeyboardAuto;
|
||||
private CheckBox checkNoOverdrive;
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,6 @@
|
||||
using CustomControls;
|
||||
|
||||
namespace GHelper
|
||||
namespace GHelper
|
||||
{
|
||||
public partial class Keyboard : RForm
|
||||
public partial class Keyboard : Form
|
||||
{
|
||||
|
||||
Dictionary<string, string> customActions = new Dictionary<string, string>
|
||||
@@ -53,73 +51,12 @@ namespace GHelper
|
||||
public Keyboard()
|
||||
{
|
||||
InitializeComponent();
|
||||
InitTheme();
|
||||
|
||||
SetKeyCombo(comboM3, textM3, "m3");
|
||||
SetKeyCombo(comboM4, textM4, "m4");
|
||||
SetKeyCombo(comboFNF4, textFNF4, "fnf4");
|
||||
|
||||
Shown += Keyboard_Shown;
|
||||
|
||||
comboKeyboardSpeed.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboKeyboardSpeed.DataSource = new BindingSource(Aura.GetSpeeds(), null);
|
||||
comboKeyboardSpeed.DisplayMember = "Value";
|
||||
comboKeyboardSpeed.ValueMember = "Key";
|
||||
comboKeyboardSpeed.SelectedValue = Aura.Speed;
|
||||
comboKeyboardSpeed.SelectedValueChanged += ComboKeyboardSpeed_SelectedValueChanged;
|
||||
|
||||
checkAwake.Checked = !(Program.config.getConfig("keyboard_awake") == 0);
|
||||
checkBoot.Checked = !(Program.config.getConfig("keyboard_boot") == 0);
|
||||
checkSleep.Checked = !(Program.config.getConfig("keyboard_sleep") == 0);
|
||||
checkShutdown.Checked = !(Program.config.getConfig("keyboard_shutdown") == 0);
|
||||
|
||||
checkAwake.CheckedChanged += CheckPower_CheckedChanged;
|
||||
checkBoot.CheckedChanged += CheckPower_CheckedChanged;
|
||||
checkSleep.CheckedChanged += CheckPower_CheckedChanged;
|
||||
checkShutdown.CheckedChanged += CheckPower_CheckedChanged;
|
||||
|
||||
checkTopmost.Checked = (Program.config.getConfig("topmost") == 1);
|
||||
checkTopmost.CheckedChanged += CheckTopmost_CheckedChanged; ;
|
||||
|
||||
checkKeyboardAuto.Checked = (Program.config.getConfig("keyboard_auto") == 1);
|
||||
checkKeyboardAuto.CheckedChanged += CheckKeyboardAuto_CheckedChanged;
|
||||
|
||||
checkNoOverdrive.Checked = (Program.config.getConfig("no_overdrive") == 1);
|
||||
checkNoOverdrive.CheckedChanged += CheckNoOverdrive_CheckedChanged;
|
||||
|
||||
}
|
||||
|
||||
private void CheckNoOverdrive_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("no_overdrive", (checkNoOverdrive.Checked ? 1 : 0));
|
||||
Program.settingsForm.AutoScreen(true);
|
||||
}
|
||||
|
||||
private void CheckKeyboardAuto_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("keyboard_auto", (checkKeyboardAuto.Checked ? 1 : 0));
|
||||
}
|
||||
|
||||
private void CheckTopmost_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("topmost", (checkTopmost.Checked ? 1 : 0));
|
||||
Program.settingsForm.TopMost = checkTopmost.Checked;
|
||||
}
|
||||
|
||||
private void CheckPower_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("keyboard_awake", (checkAwake.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_boot", (checkBoot.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_sleep", (checkSleep.Checked ? 1 : 0));
|
||||
Program.config.setConfig("keyboard_shutdown", (checkShutdown.Checked ? 1 : 0));
|
||||
|
||||
Aura.ApplyAuraPower(checkAwake.Checked, checkBoot.Checked, checkSleep.Checked, checkShutdown.Checked);
|
||||
}
|
||||
|
||||
private void ComboKeyboardSpeed_SelectedValueChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("aura_speed", (int)comboKeyboardSpeed.SelectedValue);
|
||||
Program.settingsForm.SetAura();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security.Cryptography;
|
||||
using System.Xml.Linq;
|
||||
using static Tools.ScreenInterrogatory;
|
||||
|
||||
namespace Tools
|
||||
@@ -590,7 +588,7 @@ public class NativeMethods
|
||||
return laptopScreen;
|
||||
}
|
||||
|
||||
public static int GetRefreshRate(bool max = false)
|
||||
public static int GetRefreshRate()
|
||||
{
|
||||
DEVMODE dm = CreateDevmode();
|
||||
|
||||
@@ -600,23 +598,11 @@ public class NativeMethods
|
||||
if (laptopScreen is null)
|
||||
return -1;
|
||||
|
||||
if (max)
|
||||
if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
|
||||
{
|
||||
int i = 0;
|
||||
while (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen, i, ref dm))
|
||||
{
|
||||
if (dm.dmDisplayFrequency > frequency) frequency = dm.dmDisplayFrequency;
|
||||
i++;
|
||||
}
|
||||
} else
|
||||
{
|
||||
if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
|
||||
{
|
||||
frequency = dm.dmDisplayFrequency;
|
||||
}
|
||||
frequency = dm.dmDisplayFrequency;
|
||||
}
|
||||
|
||||
|
||||
return frequency;
|
||||
}
|
||||
|
||||
@@ -632,7 +618,6 @@ public class NativeMethods
|
||||
{
|
||||
dm.dmDisplayFrequency = frequency;
|
||||
int iRet = NativeMethods.ChangeDisplaySettingsEx(laptopScreen, ref dm, IntPtr.Zero, DisplaySettingsFlags.CDS_UPDATEREGISTRY, IntPtr.Zero);
|
||||
Logger.WriteLine("Screen = " + frequency.ToString() + "Hz : " + (iRet == 0 ? "OK" : iRet));
|
||||
return iRet;
|
||||
}
|
||||
|
||||
@@ -686,7 +671,6 @@ public class NativeMethods
|
||||
PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid);
|
||||
*/
|
||||
|
||||
Logger.WriteLine("Boost " + boost);
|
||||
}
|
||||
|
||||
public static void SetPowerScheme(int mode)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using Microsoft.Win32;
|
||||
using System.Diagnostics;
|
||||
using System.Management;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
@@ -21,24 +23,14 @@ namespace GHelper
|
||||
public static SettingsForm settingsForm = new SettingsForm();
|
||||
public static ToastForm toast = new ToastForm();
|
||||
|
||||
public static IntPtr unRegPowerNotify;
|
||||
private static IntPtr unRegPowerNotify;
|
||||
private static IntPtr ds;
|
||||
|
||||
private static long lastAuto;
|
||||
private static long lastTheme;
|
||||
private static PowerLineStatus isPlugged = PowerLineStatus.Unknown;
|
||||
|
||||
// The main entry point for the application
|
||||
public static void Main()
|
||||
{
|
||||
|
||||
if (Process.GetProcesses().Count(p => p.ProcessName == "GHelper") > 1)
|
||||
{
|
||||
MessageBox.Show("G-Helper is already running. Check system tray for an icon.", "App already running", MessageBoxButtons.OK);
|
||||
Application.Exit();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
try
|
||||
{
|
||||
wmi = new ASUSWmi();
|
||||
@@ -56,14 +48,11 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
Logger.WriteLine("------------");
|
||||
Logger.WriteLine("App launched");
|
||||
|
||||
Application.EnableVisualStyles();
|
||||
|
||||
var ds = settingsForm.Handle;
|
||||
ds = settingsForm.Handle;
|
||||
|
||||
trayIcon.MouseClick += TrayIcon_MouseClick;
|
||||
trayIcon.MouseClick += TrayIcon_MouseClick; ;
|
||||
|
||||
wmi.SubscribeToEvents(WatcherEventArrived);
|
||||
|
||||
@@ -74,72 +63,78 @@ namespace GHelper
|
||||
settingsForm.SetStartupCheck(Startup.IsScheduled());
|
||||
|
||||
SetAutoModes();
|
||||
HardwareMonitor.RecreateGpuTemperatureProvider();
|
||||
|
||||
// Subscribing for monitor power on events
|
||||
var settingGuid = new NativeMethods.PowerSettingGuid();
|
||||
unRegPowerNotify = NativeMethods.RegisterPowerSettingNotification(ds, settingGuid.ConsoleDisplayState, NativeMethods.DEVICE_NOTIFY_WINDOW_HANDLE);
|
||||
|
||||
// Subscribing for system power change events
|
||||
SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
|
||||
SystemEvents.UserPreferenceChanged += SystemEvents_UserPreferenceChanged;
|
||||
|
||||
|
||||
if (Environment.CurrentDirectory.Trim('\\') == Application.StartupPath.Trim('\\'))
|
||||
{
|
||||
SettingsToggle();
|
||||
}
|
||||
|
||||
CheckForUpdates();
|
||||
Application.Run();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e)
|
||||
static async void CheckForUpdates()
|
||||
{
|
||||
|
||||
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastTheme) < 2000) return;
|
||||
lastTheme = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
||||
var assembly = Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
||||
settingsForm.SetVersionLabel("Version: " + assembly);
|
||||
|
||||
switch (e.Category)
|
||||
try
|
||||
{
|
||||
case UserPreferenceCategory.General:
|
||||
Debug.WriteLine("Theme Changed");
|
||||
Thread.Sleep(1000);
|
||||
settingsForm.InitTheme();
|
||||
using (var httpClient = new HttpClient())
|
||||
{
|
||||
httpClient.DefaultRequestHeaders.Add("User-Agent", "C# App");
|
||||
var json = await httpClient.GetStringAsync("https://api.github.com/repos/seerge/g-helper/releases/latest");
|
||||
var config = JsonSerializer.Deserialize<JsonElement>(json);
|
||||
var tag = config.GetProperty("tag_name").ToString().Replace("v", "");
|
||||
var url = config.GetProperty("assets")[0].GetProperty("browser_download_url").ToString();
|
||||
|
||||
if (settingsForm.fans is not null && settingsForm.fans.Text != "")
|
||||
settingsForm.fans.InitTheme();
|
||||
var gitVersion = new Version(tag);
|
||||
var appVersion = new Version(assembly);
|
||||
|
||||
if (settingsForm.keyb is not null && settingsForm.keyb.Text != "")
|
||||
settingsForm.keyb.InitTheme();
|
||||
var result = gitVersion.CompareTo(appVersion);
|
||||
if (result > 0)
|
||||
{
|
||||
settingsForm.SetVersionLabel("Download Update: " + tag, url);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
Logger.WriteLine("Failed to get update");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void SetAutoModes()
|
||||
{
|
||||
|
||||
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastAuto) < 2000) return;
|
||||
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastAuto) < 1000) return;
|
||||
lastAuto = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
||||
|
||||
isPlugged = SystemInformation.PowerStatus.PowerLineStatus;
|
||||
PowerLineStatus isPlugged = SystemInformation.PowerStatus.PowerLineStatus;
|
||||
|
||||
Logger.WriteLine("AutoSetting for " + isPlugged.ToString());
|
||||
|
||||
settingsForm.SetBatteryChargeLimit(config.getConfig("charge_limit"));
|
||||
settingsForm.AutoPerformance();
|
||||
|
||||
bool switched = settingsForm.AutoGPUMode();
|
||||
if (!switched) settingsForm.AutoScreen();
|
||||
settingsForm.AutoPerformance(isPlugged);
|
||||
|
||||
settingsForm.SetMatrix();
|
||||
bool switched = settingsForm.AutoGPUMode(isPlugged);
|
||||
if (!switched) settingsForm.AutoScreen(isPlugged);
|
||||
|
||||
settingsForm.SetMatrix(isPlugged);
|
||||
}
|
||||
|
||||
private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
|
||||
{
|
||||
if (SystemInformation.PowerStatus.PowerLineStatus == isPlugged) return;
|
||||
|
||||
Logger.WriteLine("Windows - Power Mode Changed");
|
||||
settingsForm.AutoKeyboard();
|
||||
SetAutoModes();
|
||||
}
|
||||
|
||||
@@ -156,7 +151,7 @@ namespace GHelper
|
||||
}
|
||||
catch
|
||||
{
|
||||
Logger.WriteLine("Failed to run " + fileName);
|
||||
Logger.WriteLine("Failed to run " + fileName);
|
||||
}
|
||||
|
||||
|
||||
|
||||
83
app/RoundedButton.cs
Normal file
83
app/RoundedButton.cs
Normal file
@@ -0,0 +1,83 @@
|
||||
using System.Drawing.Drawing2D;
|
||||
|
||||
namespace CustomControls
|
||||
{
|
||||
public class RoundedButton : Button
|
||||
{
|
||||
//Fields
|
||||
private int borderSize = 5;
|
||||
private int borderRadius = 5;
|
||||
private bool activated = false;
|
||||
private Color borderColor = Color.Transparent;
|
||||
|
||||
public Color BorderColor
|
||||
{
|
||||
get { return borderColor; }
|
||||
set
|
||||
{
|
||||
borderColor = value;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public bool Activated
|
||||
{
|
||||
get { return activated; }
|
||||
set
|
||||
{
|
||||
if (activated != value)
|
||||
this.Invalidate();
|
||||
activated = value;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public RoundedButton()
|
||||
{
|
||||
this.FlatStyle = FlatStyle.Flat;
|
||||
this.FlatAppearance.BorderSize = 0;
|
||||
}
|
||||
|
||||
private GraphicsPath GetFigurePath(Rectangle rect, int radius)
|
||||
{
|
||||
GraphicsPath path = new GraphicsPath();
|
||||
float curveSize = radius * 2F;
|
||||
|
||||
path.StartFigure();
|
||||
path.AddArc(rect.X, rect.Y, curveSize, curveSize, 180, 90);
|
||||
path.AddArc(rect.Right - curveSize, rect.Y, curveSize, curveSize, 270, 90);
|
||||
path.AddArc(rect.Right - curveSize, rect.Bottom - curveSize, curveSize, curveSize, 0, 90);
|
||||
path.AddArc(rect.X, rect.Bottom - curveSize, curveSize, curveSize, 90, 90);
|
||||
path.CloseFigure();
|
||||
return path;
|
||||
}
|
||||
|
||||
|
||||
protected override void OnPaint(PaintEventArgs pevent)
|
||||
{
|
||||
base.OnPaint(pevent);
|
||||
|
||||
float ratio = pevent.Graphics.DpiX / 192.0f;
|
||||
int border = (int)(ratio * borderSize);
|
||||
|
||||
Rectangle rectSurface = this.ClientRectangle;
|
||||
Rectangle rectBorder = Rectangle.Inflate(rectSurface, -border, -border);
|
||||
|
||||
Color borderDrawColor = activated ? borderColor : Color.Transparent;
|
||||
|
||||
using (GraphicsPath pathSurface = GetFigurePath(rectSurface, borderRadius + border))
|
||||
using (GraphicsPath pathBorder = GetFigurePath(rectBorder, borderRadius))
|
||||
using (Pen penSurface = new Pen(this.Parent.BackColor, border))
|
||||
using (Pen penBorder = new Pen(borderDrawColor, border))
|
||||
{
|
||||
penBorder.Alignment = PenAlignment.Outset;
|
||||
pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
this.Region = new Region(pathSurface);
|
||||
pevent.Graphics.DrawPath(penSurface, pathSurface);
|
||||
pevent.Graphics.DrawPath(penBorder, pathBorder);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
387
app/Settings.Designer.cs
generated
387
app/Settings.Designer.cs
generated
@@ -34,58 +34,55 @@ namespace GHelper
|
||||
panelMatrix = new Panel();
|
||||
checkMatrix = new CheckBox();
|
||||
tableLayoutMatrix = new TableLayoutPanel();
|
||||
comboMatrix = new RComboBox();
|
||||
comboMatrixRunning = new RComboBox();
|
||||
buttonMatrix = new RButton();
|
||||
comboMatrix = new ComboBox();
|
||||
buttonMatrix = new Button();
|
||||
comboMatrixRunning = new ComboBox();
|
||||
pictureMatrix = new PictureBox();
|
||||
labelMatrix = new Label();
|
||||
panelBattery = new Panel();
|
||||
sliderBattery = new WinFormsSliderBar.Slider();
|
||||
labelModel = new Label();
|
||||
labelVersion = new Label();
|
||||
labelBattery = new Label();
|
||||
pictureBattery = new PictureBox();
|
||||
labelBatteryTitle = new Label();
|
||||
trackBattery = new TrackBar();
|
||||
panelFooter = new Panel();
|
||||
buttonQuit = new RButton();
|
||||
buttonQuit = new Button();
|
||||
checkStartup = new CheckBox();
|
||||
panelPerformance = new Panel();
|
||||
picturePerf = new PictureBox();
|
||||
labelPerf = new Label();
|
||||
labelCPUFan = new Label();
|
||||
tablePerf = new TableLayoutPanel();
|
||||
buttonSilent = new RButton();
|
||||
buttonBalanced = new RButton();
|
||||
buttonTurbo = new RButton();
|
||||
buttonFans = new RButton();
|
||||
buttonSilent = new RoundedButton();
|
||||
buttonBalanced = new RoundedButton();
|
||||
buttonTurbo = new RoundedButton();
|
||||
buttonFans = new Button();
|
||||
panelGPU = new Panel();
|
||||
labelTipGPU = new Label();
|
||||
pictureGPU = new PictureBox();
|
||||
labelGPU = new Label();
|
||||
labelGPUFan = new Label();
|
||||
tableGPU = new TableLayoutPanel();
|
||||
buttonEco = new RButton();
|
||||
buttonStandard = new RButton();
|
||||
buttonOptimized = new RButton();
|
||||
buttonUltimate = new RButton();
|
||||
buttonEco = new RoundedButton();
|
||||
buttonStandard = new RoundedButton();
|
||||
buttonOptimized = new RoundedButton();
|
||||
buttonUltimate = new RoundedButton();
|
||||
panelScreen = new Panel();
|
||||
labelMidFan = new Label();
|
||||
labelTipScreen = new Label();
|
||||
tableScreen = new TableLayoutPanel();
|
||||
buttonScreenAuto = new RButton();
|
||||
button60Hz = new RButton();
|
||||
button120Hz = new RButton();
|
||||
buttonMiniled = new RButton();
|
||||
buttonScreenAuto = new RoundedButton();
|
||||
button60Hz = new RoundedButton();
|
||||
button120Hz = new RoundedButton();
|
||||
pictureScreen = new PictureBox();
|
||||
labelSreen = new Label();
|
||||
panelKeyboard = new Panel();
|
||||
tableLayoutKeyboard = new TableLayoutPanel();
|
||||
comboKeyboard = new RComboBox();
|
||||
buttonKeyboard = new Button();
|
||||
comboKeyboard = new ComboBox();
|
||||
panelColor = new Panel();
|
||||
pictureColor2 = new PictureBox();
|
||||
pictureColor = new PictureBox();
|
||||
buttonKeyboardColor = new RButton();
|
||||
buttonKeyboard = new RButton();
|
||||
buttonKeyboardColor = new Button();
|
||||
pictureKeyboard = new PictureBox();
|
||||
labelKeyboard = new Label();
|
||||
panelMatrix.SuspendLayout();
|
||||
@@ -93,6 +90,7 @@ namespace GHelper
|
||||
((System.ComponentModel.ISupportInitialize)pictureMatrix).BeginInit();
|
||||
panelBattery.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBattery).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)trackBattery).BeginInit();
|
||||
panelFooter.SuspendLayout();
|
||||
panelPerformance.SuspendLayout();
|
||||
((System.ComponentModel.ISupportInitialize)picturePerf).BeginInit();
|
||||
@@ -124,7 +122,7 @@ namespace GHelper
|
||||
panelMatrix.Margin = new Padding(8);
|
||||
panelMatrix.Name = "panelMatrix";
|
||||
panelMatrix.Padding = new Padding(0, 0, 0, 12);
|
||||
panelMatrix.Size = new Size(810, 168);
|
||||
panelMatrix.Size = new Size(816, 168);
|
||||
panelMatrix.TabIndex = 33;
|
||||
//
|
||||
// checkMatrix
|
||||
@@ -144,25 +142,24 @@ namespace GHelper
|
||||
tableLayoutMatrix.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
tableLayoutMatrix.AutoSize = true;
|
||||
tableLayoutMatrix.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
tableLayoutMatrix.ColumnCount = 3;
|
||||
tableLayoutMatrix.ColumnCount = 4;
|
||||
tableLayoutMatrix.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
|
||||
tableLayoutMatrix.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
|
||||
tableLayoutMatrix.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
|
||||
tableLayoutMatrix.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
|
||||
tableLayoutMatrix.Controls.Add(comboMatrix, 0, 0);
|
||||
tableLayoutMatrix.Controls.Add(comboMatrixRunning, 1, 0);
|
||||
tableLayoutMatrix.Controls.Add(buttonMatrix, 2, 0);
|
||||
tableLayoutMatrix.Controls.Add(comboMatrixRunning, 1, 0);
|
||||
tableLayoutMatrix.Location = new Point(16, 52);
|
||||
tableLayoutMatrix.Margin = new Padding(8);
|
||||
tableLayoutMatrix.Name = "tableLayoutMatrix";
|
||||
tableLayoutMatrix.RowCount = 1;
|
||||
tableLayoutMatrix.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
|
||||
tableLayoutMatrix.Size = new Size(771, 60);
|
||||
tableLayoutMatrix.Size = new Size(780, 60);
|
||||
tableLayoutMatrix.TabIndex = 43;
|
||||
//
|
||||
// comboMatrix
|
||||
//
|
||||
comboMatrix.BorderColor = Color.White;
|
||||
comboMatrix.Dock = DockStyle.Top;
|
||||
comboMatrix.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
comboMatrix.FormattingEnabled = true;
|
||||
@@ -171,43 +168,37 @@ namespace GHelper
|
||||
comboMatrix.Location = new Point(4, 10);
|
||||
comboMatrix.Margin = new Padding(4, 10, 4, 8);
|
||||
comboMatrix.Name = "comboMatrix";
|
||||
comboMatrix.Size = new Size(249, 40);
|
||||
comboMatrix.Size = new Size(187, 40);
|
||||
comboMatrix.TabIndex = 41;
|
||||
comboMatrix.TabStop = false;
|
||||
//
|
||||
// buttonMatrix
|
||||
//
|
||||
buttonMatrix.BackColor = SystemColors.ButtonFace;
|
||||
buttonMatrix.Dock = DockStyle.Top;
|
||||
buttonMatrix.FlatAppearance.BorderSize = 0;
|
||||
buttonMatrix.Location = new Point(394, 8);
|
||||
buttonMatrix.Margin = new Padding(4, 8, 4, 8);
|
||||
buttonMatrix.Name = "buttonMatrix";
|
||||
buttonMatrix.Size = new Size(187, 44);
|
||||
buttonMatrix.TabIndex = 43;
|
||||
buttonMatrix.Text = "Picture / Gif";
|
||||
buttonMatrix.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// comboMatrixRunning
|
||||
//
|
||||
comboMatrixRunning.BorderColor = Color.White;
|
||||
comboMatrixRunning.Dock = DockStyle.Top;
|
||||
comboMatrixRunning.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
comboMatrixRunning.FormattingEnabled = true;
|
||||
comboMatrixRunning.ItemHeight = 32;
|
||||
comboMatrixRunning.Items.AddRange(new object[] { "Binary Banner", "Rog Logo", "Picture", "Clock" });
|
||||
comboMatrixRunning.Location = new Point(261, 10);
|
||||
comboMatrixRunning.Items.AddRange(new object[] { "Binary Banner", "Rog Logo", "Picture" });
|
||||
comboMatrixRunning.Location = new Point(199, 10);
|
||||
comboMatrixRunning.Margin = new Padding(4, 10, 4, 8);
|
||||
comboMatrixRunning.Name = "comboMatrixRunning";
|
||||
comboMatrixRunning.Size = new Size(249, 40);
|
||||
comboMatrixRunning.Size = new Size(187, 40);
|
||||
comboMatrixRunning.TabIndex = 42;
|
||||
comboMatrixRunning.TabStop = false;
|
||||
//
|
||||
// buttonMatrix
|
||||
//
|
||||
buttonMatrix.Activated = false;
|
||||
buttonMatrix.BackColor = Color.FromArgb(230, 230, 230);
|
||||
buttonMatrix.BorderColor = Color.Transparent;
|
||||
buttonMatrix.BorderRadius = 2;
|
||||
buttonMatrix.Dock = DockStyle.Top;
|
||||
buttonMatrix.FlatAppearance.BorderSize = 0;
|
||||
buttonMatrix.FlatStyle = FlatStyle.Flat;
|
||||
buttonMatrix.Location = new Point(518, 8);
|
||||
buttonMatrix.Margin = new Padding(4, 8, 4, 8);
|
||||
buttonMatrix.Name = "buttonMatrix";
|
||||
buttonMatrix.Secondary = true;
|
||||
buttonMatrix.Size = new Size(249, 44);
|
||||
buttonMatrix.TabIndex = 43;
|
||||
buttonMatrix.Text = "Picture / Gif";
|
||||
buttonMatrix.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// pictureMatrix
|
||||
//
|
||||
pictureMatrix.BackgroundImage = Properties.Resources.icons8_matrix_desktop_48;
|
||||
@@ -234,49 +225,25 @@ namespace GHelper
|
||||
//
|
||||
panelBattery.AutoSize = true;
|
||||
panelBattery.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelBattery.Controls.Add(sliderBattery);
|
||||
panelBattery.Controls.Add(labelModel);
|
||||
panelBattery.Controls.Add(labelVersion);
|
||||
panelBattery.Controls.Add(labelBattery);
|
||||
panelBattery.Controls.Add(pictureBattery);
|
||||
panelBattery.Controls.Add(labelBatteryTitle);
|
||||
panelBattery.Controls.Add(trackBattery);
|
||||
panelBattery.Dock = DockStyle.Top;
|
||||
panelBattery.Location = new Point(10, 926);
|
||||
panelBattery.Margin = new Padding(8);
|
||||
panelBattery.Name = "panelBattery";
|
||||
panelBattery.Padding = new Padding(0, 0, 0, 12);
|
||||
panelBattery.Size = new Size(810, 163);
|
||||
panelBattery.Size = new Size(816, 158);
|
||||
panelBattery.TabIndex = 34;
|
||||
//
|
||||
// sliderBattery
|
||||
//
|
||||
sliderBattery.Location = new Point(16, 70);
|
||||
sliderBattery.Max = 100;
|
||||
sliderBattery.Min = 50;
|
||||
sliderBattery.Name = "sliderBattery";
|
||||
sliderBattery.Size = new Size(772, 40);
|
||||
sliderBattery.TabIndex = 39;
|
||||
sliderBattery.Text = "sliderBattery";
|
||||
sliderBattery.Value = 80;
|
||||
//
|
||||
// labelModel
|
||||
//
|
||||
labelModel.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelModel.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
labelModel.ForeColor = SystemColors.ControlDark;
|
||||
labelModel.Location = new Point(291, 119);
|
||||
labelModel.Margin = new Padding(8, 0, 8, 0);
|
||||
labelModel.Name = "labelModel";
|
||||
labelModel.Size = new Size(492, 32);
|
||||
labelModel.TabIndex = 38;
|
||||
labelModel.TextAlign = ContentAlignment.TopRight;
|
||||
//
|
||||
// labelVersion
|
||||
//
|
||||
labelVersion.AutoSize = true;
|
||||
labelVersion.Font = new Font("Segoe UI", 9F, FontStyle.Underline, GraphicsUnit.Point);
|
||||
labelVersion.ForeColor = SystemColors.ControlDark;
|
||||
labelVersion.Location = new Point(25, 119);
|
||||
labelVersion.Location = new Point(25, 109);
|
||||
labelVersion.Margin = new Padding(8, 0, 8, 0);
|
||||
labelVersion.Name = "labelVersion";
|
||||
labelVersion.Size = new Size(44, 32);
|
||||
@@ -286,7 +253,7 @@ namespace GHelper
|
||||
// labelBattery
|
||||
//
|
||||
labelBattery.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelBattery.Location = new Point(422, 9);
|
||||
labelBattery.Location = new Point(428, 9);
|
||||
labelBattery.Margin = new Padding(8, 0, 8, 0);
|
||||
labelBattery.Name = "labelBattery";
|
||||
labelBattery.Size = new Size(364, 44);
|
||||
@@ -315,6 +282,22 @@ namespace GHelper
|
||||
labelBatteryTitle.TabIndex = 34;
|
||||
labelBatteryTitle.Text = "Battery Charge Limit";
|
||||
//
|
||||
// trackBattery
|
||||
//
|
||||
trackBattery.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
trackBattery.LargeChange = 10;
|
||||
trackBattery.Location = new Point(20, 52);
|
||||
trackBattery.Margin = new Padding(8, 4, 8, 4);
|
||||
trackBattery.Maximum = 100;
|
||||
trackBattery.Minimum = 50;
|
||||
trackBattery.Name = "trackBattery";
|
||||
trackBattery.Size = new Size(772, 90);
|
||||
trackBattery.SmallChange = 5;
|
||||
trackBattery.TabIndex = 33;
|
||||
trackBattery.TickFrequency = 10;
|
||||
trackBattery.TickStyle = TickStyle.TopLeft;
|
||||
trackBattery.Value = 100;
|
||||
//
|
||||
// panelFooter
|
||||
//
|
||||
panelFooter.AutoSize = true;
|
||||
@@ -322,26 +305,21 @@ namespace GHelper
|
||||
panelFooter.Controls.Add(buttonQuit);
|
||||
panelFooter.Controls.Add(checkStartup);
|
||||
panelFooter.Dock = DockStyle.Top;
|
||||
panelFooter.Location = new Point(10, 1089);
|
||||
panelFooter.Location = new Point(10, 1084);
|
||||
panelFooter.Margin = new Padding(8);
|
||||
panelFooter.Name = "panelFooter";
|
||||
panelFooter.Padding = new Padding(0, 0, 0, 10);
|
||||
panelFooter.Size = new Size(810, 74);
|
||||
panelFooter.Size = new Size(816, 74);
|
||||
panelFooter.TabIndex = 35;
|
||||
//
|
||||
// buttonQuit
|
||||
//
|
||||
buttonQuit.Activated = false;
|
||||
buttonQuit.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
buttonQuit.BackColor = Color.FromArgb(230, 230, 230);
|
||||
buttonQuit.BorderColor = Color.Transparent;
|
||||
buttonQuit.BorderRadius = 2;
|
||||
buttonQuit.FlatStyle = FlatStyle.Flat;
|
||||
buttonQuit.Location = new Point(599, 16);
|
||||
buttonQuit.BackColor = SystemColors.ButtonFace;
|
||||
buttonQuit.Location = new Point(584, 16);
|
||||
buttonQuit.Margin = new Padding(8, 4, 8, 4);
|
||||
buttonQuit.Name = "buttonQuit";
|
||||
buttonQuit.Secondary = true;
|
||||
buttonQuit.Size = new Size(185, 44);
|
||||
buttonQuit.Size = new Size(208, 44);
|
||||
buttonQuit.TabIndex = 18;
|
||||
buttonQuit.Text = "Quit";
|
||||
buttonQuit.UseVisualStyleBackColor = false;
|
||||
@@ -370,7 +348,7 @@ namespace GHelper
|
||||
panelPerformance.Margin = new Padding(0);
|
||||
panelPerformance.Name = "panelPerformance";
|
||||
panelPerformance.Padding = new Padding(0, 0, 0, 12);
|
||||
panelPerformance.Size = new Size(810, 200);
|
||||
panelPerformance.Size = new Size(816, 200);
|
||||
panelPerformance.TabIndex = 36;
|
||||
//
|
||||
// picturePerf
|
||||
@@ -399,11 +377,10 @@ namespace GHelper
|
||||
// labelCPUFan
|
||||
//
|
||||
labelCPUFan.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelCPUFan.Cursor = Cursors.Hand;
|
||||
labelCPUFan.Location = new Point(384, 15);
|
||||
labelCPUFan.Location = new Point(456, 16);
|
||||
labelCPUFan.Margin = new Padding(8, 0, 8, 0);
|
||||
labelCPUFan.Name = "labelCPUFan";
|
||||
labelCPUFan.Size = new Size(400, 36);
|
||||
labelCPUFan.Size = new Size(336, 36);
|
||||
labelCPUFan.TabIndex = 30;
|
||||
labelCPUFan.Text = " ";
|
||||
labelCPUFan.TextAlign = ContentAlignment.TopRight;
|
||||
@@ -427,7 +404,7 @@ namespace GHelper
|
||||
tablePerf.Name = "tablePerf";
|
||||
tablePerf.RowCount = 1;
|
||||
tablePerf.RowStyles.Add(new RowStyle(SizeType.Absolute, 128F));
|
||||
tablePerf.Size = new Size(772, 128);
|
||||
tablePerf.Size = new Size(780, 128);
|
||||
tablePerf.TabIndex = 29;
|
||||
//
|
||||
// buttonSilent
|
||||
@@ -436,7 +413,6 @@ namespace GHelper
|
||||
buttonSilent.BackColor = SystemColors.ControlLightLight;
|
||||
buttonSilent.BackgroundImageLayout = ImageLayout.None;
|
||||
buttonSilent.BorderColor = Color.Transparent;
|
||||
buttonSilent.BorderRadius = 5;
|
||||
buttonSilent.CausesValidation = false;
|
||||
buttonSilent.Dock = DockStyle.Fill;
|
||||
buttonSilent.FlatAppearance.BorderSize = 0;
|
||||
@@ -447,8 +423,7 @@ namespace GHelper
|
||||
buttonSilent.Location = new Point(4, 4);
|
||||
buttonSilent.Margin = new Padding(4);
|
||||
buttonSilent.Name = "buttonSilent";
|
||||
buttonSilent.Secondary = false;
|
||||
buttonSilent.Size = new Size(185, 120);
|
||||
buttonSilent.Size = new Size(187, 120);
|
||||
buttonSilent.TabIndex = 0;
|
||||
buttonSilent.Text = "Silent";
|
||||
buttonSilent.TextImageRelation = TextImageRelation.ImageAboveText;
|
||||
@@ -459,18 +434,16 @@ namespace GHelper
|
||||
buttonBalanced.Activated = false;
|
||||
buttonBalanced.BackColor = SystemColors.ControlLightLight;
|
||||
buttonBalanced.BorderColor = Color.Transparent;
|
||||
buttonBalanced.BorderRadius = 5;
|
||||
buttonBalanced.Dock = DockStyle.Fill;
|
||||
buttonBalanced.FlatAppearance.BorderSize = 0;
|
||||
buttonBalanced.FlatStyle = FlatStyle.Flat;
|
||||
buttonBalanced.ForeColor = SystemColors.ControlText;
|
||||
buttonBalanced.Image = Properties.Resources.icons8_fiat_500_48;
|
||||
buttonBalanced.ImageAlign = ContentAlignment.BottomCenter;
|
||||
buttonBalanced.Location = new Point(197, 4);
|
||||
buttonBalanced.Location = new Point(199, 4);
|
||||
buttonBalanced.Margin = new Padding(4);
|
||||
buttonBalanced.Name = "buttonBalanced";
|
||||
buttonBalanced.Secondary = false;
|
||||
buttonBalanced.Size = new Size(185, 120);
|
||||
buttonBalanced.Size = new Size(187, 120);
|
||||
buttonBalanced.TabIndex = 1;
|
||||
buttonBalanced.Text = "Balanced";
|
||||
buttonBalanced.TextImageRelation = TextImageRelation.ImageAboveText;
|
||||
@@ -481,18 +454,16 @@ namespace GHelper
|
||||
buttonTurbo.Activated = false;
|
||||
buttonTurbo.BackColor = SystemColors.ControlLightLight;
|
||||
buttonTurbo.BorderColor = Color.Transparent;
|
||||
buttonTurbo.BorderRadius = 5;
|
||||
buttonTurbo.Dock = DockStyle.Fill;
|
||||
buttonTurbo.FlatAppearance.BorderSize = 0;
|
||||
buttonTurbo.FlatStyle = FlatStyle.Flat;
|
||||
buttonTurbo.ForeColor = SystemColors.ControlText;
|
||||
buttonTurbo.Image = Properties.Resources.icons8_rocket_48;
|
||||
buttonTurbo.ImageAlign = ContentAlignment.BottomCenter;
|
||||
buttonTurbo.Location = new Point(390, 4);
|
||||
buttonTurbo.Location = new Point(394, 4);
|
||||
buttonTurbo.Margin = new Padding(4);
|
||||
buttonTurbo.Name = "buttonTurbo";
|
||||
buttonTurbo.Secondary = false;
|
||||
buttonTurbo.Size = new Size(185, 120);
|
||||
buttonTurbo.Size = new Size(187, 120);
|
||||
buttonTurbo.TabIndex = 2;
|
||||
buttonTurbo.Text = "Turbo";
|
||||
buttonTurbo.TextImageRelation = TextImageRelation.ImageAboveText;
|
||||
@@ -500,20 +471,15 @@ namespace GHelper
|
||||
//
|
||||
// buttonFans
|
||||
//
|
||||
buttonFans.Activated = false;
|
||||
buttonFans.BackColor = Color.FromArgb(230, 230, 230);
|
||||
buttonFans.BorderColor = Color.Transparent;
|
||||
buttonFans.BorderRadius = 5;
|
||||
buttonFans.BackColor = SystemColors.ButtonFace;
|
||||
buttonFans.Dock = DockStyle.Fill;
|
||||
buttonFans.FlatAppearance.BorderSize = 0;
|
||||
buttonFans.FlatStyle = FlatStyle.Flat;
|
||||
buttonFans.Image = Properties.Resources.icons8_fan_48;
|
||||
buttonFans.ImageAlign = ContentAlignment.BottomCenter;
|
||||
buttonFans.Location = new Point(583, 4);
|
||||
buttonFans.Location = new Point(589, 4);
|
||||
buttonFans.Margin = new Padding(4);
|
||||
buttonFans.Name = "buttonFans";
|
||||
buttonFans.Secondary = true;
|
||||
buttonFans.Size = new Size(185, 120);
|
||||
buttonFans.Size = new Size(187, 120);
|
||||
buttonFans.TabIndex = 35;
|
||||
buttonFans.Text = "Fans + Power";
|
||||
buttonFans.TextImageRelation = TextImageRelation.ImageAboveText;
|
||||
@@ -533,7 +499,7 @@ namespace GHelper
|
||||
panelGPU.Margin = new Padding(8);
|
||||
panelGPU.Name = "panelGPU";
|
||||
panelGPU.Padding = new Padding(0, 0, 0, 10);
|
||||
panelGPU.Size = new Size(810, 237);
|
||||
panelGPU.Size = new Size(816, 237);
|
||||
panelGPU.TabIndex = 37;
|
||||
//
|
||||
// labelTipGPU
|
||||
@@ -550,7 +516,7 @@ namespace GHelper
|
||||
//
|
||||
pictureGPU.BackgroundImage = (Image)resources.GetObject("pictureGPU.BackgroundImage");
|
||||
pictureGPU.BackgroundImageLayout = ImageLayout.Zoom;
|
||||
pictureGPU.Location = new Point(24, 21);
|
||||
pictureGPU.Location = new Point(24, 20);
|
||||
pictureGPU.Margin = new Padding(4);
|
||||
pictureGPU.Name = "pictureGPU";
|
||||
pictureGPU.Size = new Size(32, 32);
|
||||
@@ -561,7 +527,7 @@ namespace GHelper
|
||||
//
|
||||
labelGPU.AutoSize = true;
|
||||
labelGPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||
labelGPU.Location = new Point(60, 21);
|
||||
labelGPU.Location = new Point(60, 20);
|
||||
labelGPU.Margin = new Padding(8, 0, 8, 0);
|
||||
labelGPU.Name = "labelGPU";
|
||||
labelGPU.Size = new Size(136, 32);
|
||||
@@ -571,10 +537,10 @@ namespace GHelper
|
||||
// labelGPUFan
|
||||
//
|
||||
labelGPUFan.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelGPUFan.Location = new Point(384, 21);
|
||||
labelGPUFan.Location = new Point(244, 12);
|
||||
labelGPUFan.Margin = new Padding(8, 0, 8, 0);
|
||||
labelGPUFan.Name = "labelGPUFan";
|
||||
labelGPUFan.Size = new Size(400, 34);
|
||||
labelGPUFan.Size = new Size(548, 44);
|
||||
labelGPUFan.TabIndex = 17;
|
||||
labelGPUFan.Text = " ";
|
||||
labelGPUFan.TextAlign = ContentAlignment.TopRight;
|
||||
@@ -598,7 +564,7 @@ namespace GHelper
|
||||
tableGPU.Name = "tableGPU";
|
||||
tableGPU.RowCount = 1;
|
||||
tableGPU.RowStyles.Add(new RowStyle(SizeType.Absolute, 128F));
|
||||
tableGPU.Size = new Size(772, 128);
|
||||
tableGPU.Size = new Size(780, 128);
|
||||
tableGPU.TabIndex = 16;
|
||||
//
|
||||
// buttonEco
|
||||
@@ -606,7 +572,6 @@ namespace GHelper
|
||||
buttonEco.Activated = false;
|
||||
buttonEco.BackColor = SystemColors.ControlLightLight;
|
||||
buttonEco.BorderColor = Color.Transparent;
|
||||
buttonEco.BorderRadius = 5;
|
||||
buttonEco.CausesValidation = false;
|
||||
buttonEco.Dock = DockStyle.Top;
|
||||
buttonEco.FlatAppearance.BorderSize = 0;
|
||||
@@ -617,8 +582,7 @@ namespace GHelper
|
||||
buttonEco.Location = new Point(4, 4);
|
||||
buttonEco.Margin = new Padding(4);
|
||||
buttonEco.Name = "buttonEco";
|
||||
buttonEco.Secondary = false;
|
||||
buttonEco.Size = new Size(185, 120);
|
||||
buttonEco.Size = new Size(187, 120);
|
||||
buttonEco.TabIndex = 0;
|
||||
buttonEco.Text = "Eco";
|
||||
buttonEco.TextImageRelation = TextImageRelation.ImageAboveText;
|
||||
@@ -629,18 +593,16 @@ namespace GHelper
|
||||
buttonStandard.Activated = false;
|
||||
buttonStandard.BackColor = SystemColors.ControlLightLight;
|
||||
buttonStandard.BorderColor = Color.Transparent;
|
||||
buttonStandard.BorderRadius = 5;
|
||||
buttonStandard.Dock = DockStyle.Top;
|
||||
buttonStandard.FlatAppearance.BorderSize = 0;
|
||||
buttonStandard.FlatStyle = FlatStyle.Flat;
|
||||
buttonStandard.ForeColor = SystemColors.ControlText;
|
||||
buttonStandard.Image = Properties.Resources.icons8_spa_flower_48;
|
||||
buttonStandard.ImageAlign = ContentAlignment.BottomCenter;
|
||||
buttonStandard.Location = new Point(197, 4);
|
||||
buttonStandard.Location = new Point(199, 4);
|
||||
buttonStandard.Margin = new Padding(4);
|
||||
buttonStandard.Name = "buttonStandard";
|
||||
buttonStandard.Secondary = false;
|
||||
buttonStandard.Size = new Size(185, 120);
|
||||
buttonStandard.Size = new Size(187, 120);
|
||||
buttonStandard.TabIndex = 1;
|
||||
buttonStandard.Text = "Standard";
|
||||
buttonStandard.TextImageRelation = TextImageRelation.ImageAboveText;
|
||||
@@ -651,18 +613,16 @@ namespace GHelper
|
||||
buttonOptimized.Activated = false;
|
||||
buttonOptimized.BackColor = SystemColors.ControlLightLight;
|
||||
buttonOptimized.BorderColor = Color.Transparent;
|
||||
buttonOptimized.BorderRadius = 5;
|
||||
buttonOptimized.Dock = DockStyle.Top;
|
||||
buttonOptimized.FlatAppearance.BorderSize = 0;
|
||||
buttonOptimized.FlatStyle = FlatStyle.Flat;
|
||||
buttonOptimized.ForeColor = SystemColors.ControlText;
|
||||
buttonOptimized.Image = Properties.Resources.icons8_project_management_48__1_;
|
||||
buttonOptimized.ImageAlign = ContentAlignment.BottomCenter;
|
||||
buttonOptimized.Location = new Point(583, 4);
|
||||
buttonOptimized.Location = new Point(589, 4);
|
||||
buttonOptimized.Margin = new Padding(4);
|
||||
buttonOptimized.Name = "buttonOptimized";
|
||||
buttonOptimized.Secondary = false;
|
||||
buttonOptimized.Size = new Size(185, 120);
|
||||
buttonOptimized.Size = new Size(187, 120);
|
||||
buttonOptimized.TabIndex = 3;
|
||||
buttonOptimized.Text = "Optimized";
|
||||
buttonOptimized.TextImageRelation = TextImageRelation.ImageAboveText;
|
||||
@@ -673,18 +633,16 @@ namespace GHelper
|
||||
buttonUltimate.Activated = false;
|
||||
buttonUltimate.BackColor = SystemColors.ControlLightLight;
|
||||
buttonUltimate.BorderColor = Color.Transparent;
|
||||
buttonUltimate.BorderRadius = 5;
|
||||
buttonUltimate.Dock = DockStyle.Top;
|
||||
buttonUltimate.FlatAppearance.BorderSize = 0;
|
||||
buttonUltimate.FlatStyle = FlatStyle.Flat;
|
||||
buttonUltimate.ForeColor = SystemColors.ControlText;
|
||||
buttonUltimate.Image = Properties.Resources.icons8_game_controller_48;
|
||||
buttonUltimate.ImageAlign = ContentAlignment.BottomCenter;
|
||||
buttonUltimate.Location = new Point(390, 4);
|
||||
buttonUltimate.Location = new Point(394, 4);
|
||||
buttonUltimate.Margin = new Padding(4);
|
||||
buttonUltimate.Name = "buttonUltimate";
|
||||
buttonUltimate.Secondary = false;
|
||||
buttonUltimate.Size = new Size(185, 120);
|
||||
buttonUltimate.Size = new Size(187, 120);
|
||||
buttonUltimate.TabIndex = 2;
|
||||
buttonUltimate.Text = "Ultimate";
|
||||
buttonUltimate.TextImageRelation = TextImageRelation.ImageAboveText;
|
||||
@@ -694,7 +652,6 @@ namespace GHelper
|
||||
//
|
||||
panelScreen.AutoSize = true;
|
||||
panelScreen.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
panelScreen.Controls.Add(labelMidFan);
|
||||
panelScreen.Controls.Add(labelTipScreen);
|
||||
panelScreen.Controls.Add(tableScreen);
|
||||
panelScreen.Controls.Add(pictureScreen);
|
||||
@@ -704,20 +661,9 @@ namespace GHelper
|
||||
panelScreen.Margin = new Padding(8);
|
||||
panelScreen.Name = "panelScreen";
|
||||
panelScreen.Padding = new Padding(0, 0, 0, 10);
|
||||
panelScreen.Size = new Size(810, 181);
|
||||
panelScreen.Size = new Size(816, 181);
|
||||
panelScreen.TabIndex = 38;
|
||||
//
|
||||
// labelMidFan
|
||||
//
|
||||
labelMidFan.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
labelMidFan.Location = new Point(488, 13);
|
||||
labelMidFan.Margin = new Padding(8, 0, 8, 0);
|
||||
labelMidFan.Name = "labelMidFan";
|
||||
labelMidFan.Size = new Size(296, 34);
|
||||
labelMidFan.TabIndex = 25;
|
||||
labelMidFan.Text = " ";
|
||||
labelMidFan.TextAlign = ContentAlignment.TopRight;
|
||||
//
|
||||
// labelTipScreen
|
||||
//
|
||||
labelTipScreen.ForeColor = SystemColors.GrayText;
|
||||
@@ -740,13 +686,12 @@ namespace GHelper
|
||||
tableScreen.Controls.Add(buttonScreenAuto, 0, 0);
|
||||
tableScreen.Controls.Add(button60Hz, 1, 0);
|
||||
tableScreen.Controls.Add(button120Hz, 2, 0);
|
||||
tableScreen.Controls.Add(buttonMiniled, 3, 0);
|
||||
tableScreen.Location = new Point(16, 51);
|
||||
tableScreen.Margin = new Padding(8, 4, 8, 4);
|
||||
tableScreen.Name = "tableScreen";
|
||||
tableScreen.RowCount = 1;
|
||||
tableScreen.RowStyles.Add(new RowStyle(SizeType.Absolute, 80F));
|
||||
tableScreen.Size = new Size(772, 80);
|
||||
tableScreen.Size = new Size(780, 80);
|
||||
tableScreen.TabIndex = 23;
|
||||
//
|
||||
// buttonScreenAuto
|
||||
@@ -754,7 +699,6 @@ namespace GHelper
|
||||
buttonScreenAuto.Activated = false;
|
||||
buttonScreenAuto.BackColor = SystemColors.ControlLightLight;
|
||||
buttonScreenAuto.BorderColor = Color.Transparent;
|
||||
buttonScreenAuto.BorderRadius = 5;
|
||||
buttonScreenAuto.Dock = DockStyle.Fill;
|
||||
buttonScreenAuto.FlatAppearance.BorderSize = 0;
|
||||
buttonScreenAuto.FlatStyle = FlatStyle.Flat;
|
||||
@@ -762,8 +706,7 @@ namespace GHelper
|
||||
buttonScreenAuto.Location = new Point(4, 4);
|
||||
buttonScreenAuto.Margin = new Padding(4);
|
||||
buttonScreenAuto.Name = "buttonScreenAuto";
|
||||
buttonScreenAuto.Secondary = false;
|
||||
buttonScreenAuto.Size = new Size(185, 72);
|
||||
buttonScreenAuto.Size = new Size(187, 72);
|
||||
buttonScreenAuto.TabIndex = 0;
|
||||
buttonScreenAuto.Text = "Auto";
|
||||
buttonScreenAuto.UseVisualStyleBackColor = false;
|
||||
@@ -773,17 +716,15 @@ namespace GHelper
|
||||
button60Hz.Activated = false;
|
||||
button60Hz.BackColor = SystemColors.ControlLightLight;
|
||||
button60Hz.BorderColor = Color.Transparent;
|
||||
button60Hz.BorderRadius = 5;
|
||||
button60Hz.CausesValidation = false;
|
||||
button60Hz.Dock = DockStyle.Fill;
|
||||
button60Hz.FlatAppearance.BorderSize = 0;
|
||||
button60Hz.FlatStyle = FlatStyle.Flat;
|
||||
button60Hz.ForeColor = SystemColors.ControlText;
|
||||
button60Hz.Location = new Point(197, 4);
|
||||
button60Hz.Location = new Point(199, 4);
|
||||
button60Hz.Margin = new Padding(4);
|
||||
button60Hz.Name = "button60Hz";
|
||||
button60Hz.Secondary = false;
|
||||
button60Hz.Size = new Size(185, 72);
|
||||
button60Hz.Size = new Size(187, 72);
|
||||
button60Hz.TabIndex = 1;
|
||||
button60Hz.Text = "60Hz";
|
||||
button60Hz.UseVisualStyleBackColor = false;
|
||||
@@ -793,40 +734,18 @@ namespace GHelper
|
||||
button120Hz.Activated = false;
|
||||
button120Hz.BackColor = SystemColors.ControlLightLight;
|
||||
button120Hz.BorderColor = Color.Transparent;
|
||||
button120Hz.BorderRadius = 5;
|
||||
button120Hz.Dock = DockStyle.Fill;
|
||||
button120Hz.FlatAppearance.BorderSize = 0;
|
||||
button120Hz.FlatStyle = FlatStyle.Flat;
|
||||
button120Hz.ForeColor = SystemColors.ControlText;
|
||||
button120Hz.Location = new Point(390, 4);
|
||||
button120Hz.Location = new Point(394, 4);
|
||||
button120Hz.Margin = new Padding(4);
|
||||
button120Hz.Name = "button120Hz";
|
||||
button120Hz.Secondary = false;
|
||||
button120Hz.Size = new Size(185, 72);
|
||||
button120Hz.Size = new Size(187, 72);
|
||||
button120Hz.TabIndex = 2;
|
||||
button120Hz.Text = "120Hz + OD";
|
||||
button120Hz.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// buttonMiniled
|
||||
//
|
||||
buttonMiniled.Activated = false;
|
||||
buttonMiniled.BackColor = SystemColors.ControlLightLight;
|
||||
buttonMiniled.BorderColor = Color.Transparent;
|
||||
buttonMiniled.BorderRadius = 5;
|
||||
buttonMiniled.CausesValidation = false;
|
||||
buttonMiniled.Dock = DockStyle.Fill;
|
||||
buttonMiniled.FlatAppearance.BorderSize = 0;
|
||||
buttonMiniled.FlatStyle = FlatStyle.Flat;
|
||||
buttonMiniled.ForeColor = SystemColors.ControlText;
|
||||
buttonMiniled.Location = new Point(583, 4);
|
||||
buttonMiniled.Margin = new Padding(4);
|
||||
buttonMiniled.Name = "buttonMiniled";
|
||||
buttonMiniled.Secondary = false;
|
||||
buttonMiniled.Size = new Size(185, 72);
|
||||
buttonMiniled.TabIndex = 3;
|
||||
buttonMiniled.Text = "Miniled";
|
||||
buttonMiniled.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// pictureScreen
|
||||
//
|
||||
pictureScreen.BackgroundImage = (Image)resources.GetObject("pictureScreen.BackgroundImage");
|
||||
@@ -861,7 +780,7 @@ namespace GHelper
|
||||
panelKeyboard.Margin = new Padding(8);
|
||||
panelKeyboard.Name = "panelKeyboard";
|
||||
panelKeyboard.Padding = new Padding(0, 0, 0, 12);
|
||||
panelKeyboard.Size = new Size(810, 130);
|
||||
panelKeyboard.Size = new Size(816, 130);
|
||||
panelKeyboard.TabIndex = 39;
|
||||
//
|
||||
// tableLayoutKeyboard
|
||||
@@ -869,35 +788,46 @@ namespace GHelper
|
||||
tableLayoutKeyboard.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||
tableLayoutKeyboard.AutoSize = true;
|
||||
tableLayoutKeyboard.AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
tableLayoutKeyboard.ColumnCount = 3;
|
||||
tableLayoutKeyboard.ColumnCount = 4;
|
||||
tableLayoutKeyboard.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
|
||||
tableLayoutKeyboard.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
|
||||
tableLayoutKeyboard.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
|
||||
tableLayoutKeyboard.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 25F));
|
||||
tableLayoutKeyboard.Controls.Add(buttonKeyboard, 2, 0);
|
||||
tableLayoutKeyboard.Controls.Add(comboKeyboard, 0, 0);
|
||||
tableLayoutKeyboard.Controls.Add(panelColor, 1, 0);
|
||||
tableLayoutKeyboard.Controls.Add(buttonKeyboard, 2, 0);
|
||||
tableLayoutKeyboard.Location = new Point(16, 50);
|
||||
tableLayoutKeyboard.Margin = new Padding(8);
|
||||
tableLayoutKeyboard.Name = "tableLayoutKeyboard";
|
||||
tableLayoutKeyboard.RowCount = 1;
|
||||
tableLayoutKeyboard.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
|
||||
tableLayoutKeyboard.Size = new Size(771, 60);
|
||||
tableLayoutKeyboard.Size = new Size(780, 60);
|
||||
tableLayoutKeyboard.TabIndex = 39;
|
||||
//
|
||||
// buttonKeyboard
|
||||
//
|
||||
buttonKeyboard.BackColor = SystemColors.ButtonFace;
|
||||
buttonKeyboard.Dock = DockStyle.Top;
|
||||
buttonKeyboard.FlatAppearance.BorderSize = 0;
|
||||
buttonKeyboard.Location = new Point(394, 8);
|
||||
buttonKeyboard.Margin = new Padding(4, 8, 4, 8);
|
||||
buttonKeyboard.Name = "buttonKeyboard";
|
||||
buttonKeyboard.Size = new Size(187, 44);
|
||||
buttonKeyboard.TabIndex = 37;
|
||||
buttonKeyboard.Text = "Extra";
|
||||
buttonKeyboard.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// comboKeyboard
|
||||
//
|
||||
comboKeyboard.BorderColor = Color.White;
|
||||
comboKeyboard.Dock = DockStyle.Top;
|
||||
comboKeyboard.FlatStyle = FlatStyle.Flat;
|
||||
comboKeyboard.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
|
||||
comboKeyboard.FormattingEnabled = true;
|
||||
comboKeyboard.ItemHeight = 32;
|
||||
comboKeyboard.Items.AddRange(new object[] { "Static", "Breathe", "Rainbow", "Strobe" });
|
||||
comboKeyboard.Items.AddRange(new object[] { "Static", "Breathe", "Strobe", "Rainbow", "Dingding" });
|
||||
comboKeyboard.Location = new Point(4, 10);
|
||||
comboKeyboard.Margin = new Padding(4, 10, 4, 8);
|
||||
comboKeyboard.Name = "comboKeyboard";
|
||||
comboKeyboard.Size = new Size(249, 40);
|
||||
comboKeyboard.Size = new Size(187, 40);
|
||||
comboKeyboard.TabIndex = 35;
|
||||
comboKeyboard.TabStop = false;
|
||||
//
|
||||
@@ -908,16 +838,16 @@ namespace GHelper
|
||||
panelColor.Controls.Add(pictureColor);
|
||||
panelColor.Controls.Add(buttonKeyboardColor);
|
||||
panelColor.Dock = DockStyle.Fill;
|
||||
panelColor.Location = new Point(261, 8);
|
||||
panelColor.Location = new Point(199, 8);
|
||||
panelColor.Margin = new Padding(4, 8, 4, 8);
|
||||
panelColor.Name = "panelColor";
|
||||
panelColor.Size = new Size(249, 44);
|
||||
panelColor.Size = new Size(187, 44);
|
||||
panelColor.TabIndex = 36;
|
||||
//
|
||||
// pictureColor2
|
||||
//
|
||||
pictureColor2.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
pictureColor2.Location = new Point(188, 12);
|
||||
pictureColor2.Location = new Point(125, 12);
|
||||
pictureColor2.Margin = new Padding(8);
|
||||
pictureColor2.Name = "pictureColor2";
|
||||
pictureColor2.Size = new Size(20, 20);
|
||||
@@ -927,7 +857,7 @@ namespace GHelper
|
||||
// pictureColor
|
||||
//
|
||||
pictureColor.Anchor = AnchorStyles.Top | AnchorStyles.Right;
|
||||
pictureColor.Location = new Point(215, 12);
|
||||
pictureColor.Location = new Point(153, 12);
|
||||
pictureColor.Margin = new Padding(8);
|
||||
pictureColor.Name = "pictureColor";
|
||||
pictureColor.Size = new Size(20, 20);
|
||||
@@ -936,40 +866,19 @@ namespace GHelper
|
||||
//
|
||||
// buttonKeyboardColor
|
||||
//
|
||||
buttonKeyboardColor.Activated = false;
|
||||
buttonKeyboardColor.BackColor = SystemColors.ButtonHighlight;
|
||||
buttonKeyboardColor.BorderColor = Color.Transparent;
|
||||
buttonKeyboardColor.BorderRadius = 2;
|
||||
buttonKeyboardColor.Dock = DockStyle.Top;
|
||||
buttonKeyboardColor.FlatStyle = FlatStyle.Flat;
|
||||
buttonKeyboardColor.FlatAppearance.BorderColor = Color.Red;
|
||||
buttonKeyboardColor.FlatAppearance.BorderSize = 2;
|
||||
buttonKeyboardColor.ForeColor = SystemColors.ControlText;
|
||||
buttonKeyboardColor.Location = new Point(0, 0);
|
||||
buttonKeyboardColor.Margin = new Padding(4, 8, 4, 8);
|
||||
buttonKeyboardColor.Name = "buttonKeyboardColor";
|
||||
buttonKeyboardColor.Secondary = false;
|
||||
buttonKeyboardColor.Size = new Size(249, 44);
|
||||
buttonKeyboardColor.Size = new Size(187, 44);
|
||||
buttonKeyboardColor.TabIndex = 39;
|
||||
buttonKeyboardColor.Text = "Color";
|
||||
buttonKeyboardColor.Text = "Color ";
|
||||
buttonKeyboardColor.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// buttonKeyboard
|
||||
//
|
||||
buttonKeyboard.Activated = false;
|
||||
buttonKeyboard.BackColor = Color.FromArgb(230, 230, 230);
|
||||
buttonKeyboard.BorderColor = Color.Transparent;
|
||||
buttonKeyboard.BorderRadius = 2;
|
||||
buttonKeyboard.Dock = DockStyle.Top;
|
||||
buttonKeyboard.FlatAppearance.BorderSize = 0;
|
||||
buttonKeyboard.FlatStyle = FlatStyle.Flat;
|
||||
buttonKeyboard.Location = new Point(518, 8);
|
||||
buttonKeyboard.Margin = new Padding(4, 8, 4, 8);
|
||||
buttonKeyboard.Name = "buttonKeyboard";
|
||||
buttonKeyboard.Secondary = true;
|
||||
buttonKeyboard.Size = new Size(249, 44);
|
||||
buttonKeyboard.TabIndex = 37;
|
||||
buttonKeyboard.Text = "Extra";
|
||||
buttonKeyboard.UseVisualStyleBackColor = false;
|
||||
//
|
||||
// pictureKeyboard
|
||||
//
|
||||
pictureKeyboard.BackgroundImage = Properties.Resources.icons8_keyboard_48;
|
||||
@@ -998,7 +907,7 @@ namespace GHelper
|
||||
AutoScaleMode = AutoScaleMode.Dpi;
|
||||
AutoSize = true;
|
||||
AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
ClientSize = new Size(830, 1173);
|
||||
ClientSize = new Size(800, 1173);
|
||||
Controls.Add(panelFooter);
|
||||
Controls.Add(panelBattery);
|
||||
Controls.Add(panelMatrix);
|
||||
@@ -1010,7 +919,7 @@ namespace GHelper
|
||||
MaximizeBox = false;
|
||||
MdiChildrenMinimizedAnchorBottom = false;
|
||||
MinimizeBox = false;
|
||||
MinimumSize = new Size(830, 71);
|
||||
MinimumSize = new Size(800, 71);
|
||||
Name = "SettingsForm";
|
||||
Padding = new Padding(10);
|
||||
ShowIcon = false;
|
||||
@@ -1024,6 +933,7 @@ namespace GHelper
|
||||
panelBattery.ResumeLayout(false);
|
||||
panelBattery.PerformLayout();
|
||||
((System.ComponentModel.ISupportInitialize)pictureBattery).EndInit();
|
||||
((System.ComponentModel.ISupportInitialize)trackBattery).EndInit();
|
||||
panelFooter.ResumeLayout(false);
|
||||
panelFooter.PerformLayout();
|
||||
panelPerformance.ResumeLayout(false);
|
||||
@@ -1059,54 +969,51 @@ namespace GHelper
|
||||
private Label labelBattery;
|
||||
private PictureBox pictureBattery;
|
||||
private Label labelBatteryTitle;
|
||||
private TrackBar trackBattery;
|
||||
private Panel panelFooter;
|
||||
private RButton buttonQuit;
|
||||
private Button buttonQuit;
|
||||
private CheckBox checkStartup;
|
||||
private Panel panelPerformance;
|
||||
private PictureBox picturePerf;
|
||||
private Label labelPerf;
|
||||
private Label labelCPUFan;
|
||||
private TableLayoutPanel tablePerf;
|
||||
private RButton buttonTurbo;
|
||||
private RButton buttonBalanced;
|
||||
private RButton buttonSilent;
|
||||
private RoundedButton buttonTurbo;
|
||||
private RoundedButton buttonBalanced;
|
||||
private RoundedButton buttonSilent;
|
||||
private Panel panelGPU;
|
||||
private PictureBox pictureGPU;
|
||||
private Label labelGPU;
|
||||
private Label labelGPUFan;
|
||||
private TableLayoutPanel tableGPU;
|
||||
private RButton buttonUltimate;
|
||||
private RButton buttonStandard;
|
||||
private RButton buttonEco;
|
||||
private RoundedButton buttonUltimate;
|
||||
private RoundedButton buttonStandard;
|
||||
private RoundedButton buttonEco;
|
||||
private Panel panelScreen;
|
||||
private TableLayoutPanel tableScreen;
|
||||
private RButton buttonScreenAuto;
|
||||
private RButton button60Hz;
|
||||
private RoundedButton buttonScreenAuto;
|
||||
private RoundedButton button60Hz;
|
||||
private PictureBox pictureScreen;
|
||||
private Label labelSreen;
|
||||
private Panel panelKeyboard;
|
||||
private PictureBox pictureKeyboard;
|
||||
private Label labelKeyboard;
|
||||
private TableLayoutPanel tableLayoutMatrix;
|
||||
private RComboBox comboMatrixRunning;
|
||||
private RComboBox comboMatrix;
|
||||
private Button buttonMatrix;
|
||||
private ComboBox comboMatrixRunning;
|
||||
private ComboBox comboMatrix;
|
||||
private TableLayoutPanel tableLayoutKeyboard;
|
||||
private RComboBox comboKeyboard;
|
||||
private Button buttonKeyboard;
|
||||
private ComboBox comboKeyboard;
|
||||
private Panel panelColor;
|
||||
private PictureBox pictureColor2;
|
||||
private PictureBox pictureColor;
|
||||
private Button buttonKeyboardColor;
|
||||
private CheckBox checkMatrix;
|
||||
private RButton button120Hz;
|
||||
private RButton buttonOptimized;
|
||||
private RoundedButton button120Hz;
|
||||
private Button buttonFans;
|
||||
private RoundedButton buttonOptimized;
|
||||
private Label labelTipGPU;
|
||||
private Label labelTipScreen;
|
||||
private RButton buttonMiniled;
|
||||
private RButton buttonMatrix;
|
||||
private RButton buttonKeyboard;
|
||||
private RButton buttonKeyboardColor;
|
||||
private RButton buttonFans;
|
||||
private Label labelMidFan;
|
||||
private Label labelModel;
|
||||
private WinFormsSliderBar.Slider sliderBattery;
|
||||
}
|
||||
}
|
||||
551
app/Settings.cs
551
app/Settings.cs
@@ -1,37 +1,35 @@
|
||||
using CustomControls;
|
||||
using Starlight.AnimeMatrix;
|
||||
using Starlight.AnimeMatrix;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
using System.Timers;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
|
||||
public partial class SettingsForm : RForm
|
||||
public partial class SettingsForm : Form
|
||||
{
|
||||
|
||||
public static System.Timers.Timer aTimer = default!;
|
||||
public static Point trayPoint;
|
||||
static Color colorEco = Color.FromArgb(255, 6, 180, 138);
|
||||
static Color colorStandard = Color.FromArgb(255, 58, 174, 239);
|
||||
static Color colorTurbo = Color.FromArgb(255, 255, 32, 32);
|
||||
|
||||
static System.Timers.Timer aTimer = default!;
|
||||
static System.Timers.Timer matrixTimer = default!;
|
||||
|
||||
public string versionUrl = "http://github.com/seerge/g-helper/releases";
|
||||
|
||||
public string perfName = "Balanced";
|
||||
|
||||
public Fans fans;
|
||||
public Keyboard keyb;
|
||||
Fans fans;
|
||||
Keyboard keyb;
|
||||
|
||||
static AnimeMatrixDevice mat;
|
||||
static int matrixTick = 0;
|
||||
static long lastRefresh;
|
||||
|
||||
public SettingsForm()
|
||||
{
|
||||
InitializeComponent();
|
||||
InitTheme(true);
|
||||
|
||||
HighDpiHelper.AdjustControlImagesDpiScale(this, 2);
|
||||
|
||||
FormClosing += SettingsForm_FormClosing;
|
||||
|
||||
@@ -47,7 +45,6 @@ namespace GHelper
|
||||
button60Hz.BorderColor = SystemColors.ActiveBorder;
|
||||
button120Hz.BorderColor = SystemColors.ActiveBorder;
|
||||
buttonScreenAuto.BorderColor = SystemColors.ActiveBorder;
|
||||
buttonMiniled.BorderColor = colorTurbo;
|
||||
|
||||
buttonOptimized.Click += ButtonOptimized_Click;
|
||||
buttonSilent.Click += ButtonSilent_Click;
|
||||
@@ -60,13 +57,18 @@ namespace GHelper
|
||||
|
||||
VisibleChanged += SettingsForm_VisibleChanged;
|
||||
|
||||
trackBattery.Scroll += trackBatteryChange;
|
||||
|
||||
button60Hz.Click += Button60Hz_Click;
|
||||
button120Hz.Click += Button120Hz_Click;
|
||||
buttonScreenAuto.Click += ButtonScreenAuto_Click;
|
||||
buttonMiniled.Click += ButtonMiniled_Click;
|
||||
|
||||
buttonQuit.Click += ButtonQuit_Click;
|
||||
|
||||
comboKeyboard.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboKeyboard.SelectedIndex = 0;
|
||||
comboKeyboard.SelectedValueChanged += ComboKeyboard_SelectedValueChanged;
|
||||
|
||||
buttonKeyboardColor.Click += ButtonKeyboardColor_Click;
|
||||
|
||||
buttonFans.Click += ButtonFans_Click;
|
||||
@@ -91,7 +93,6 @@ namespace GHelper
|
||||
checkStartup.CheckedChanged += CheckStartup_CheckedChanged;
|
||||
|
||||
labelVersion.Click += LabelVersion_Click;
|
||||
labelVersion.ForeColor = Color.FromArgb(128, Color.Gray);
|
||||
|
||||
buttonOptimized.MouseMove += ButtonOptimized_MouseHover;
|
||||
buttonOptimized.MouseLeave += ButtonGPU_MouseLeave;
|
||||
@@ -114,94 +115,15 @@ namespace GHelper
|
||||
button120Hz.MouseMove += Button120Hz_MouseHover;
|
||||
button120Hz.MouseLeave += ButtonScreen_MouseLeave;
|
||||
|
||||
sliderBattery.ValueChanged += SliderBattery_ValueChanged;
|
||||
Program.trayIcon.MouseMove += TrayIcon_MouseMove;
|
||||
//buttonStandard.Image = (Image)(new Bitmap(buttonStandard.Image, new Size(16, 16)));
|
||||
|
||||
aTimer = new System.Timers.Timer(1000);
|
||||
aTimer.Elapsed += OnTimedEvent;
|
||||
SetTimer();
|
||||
|
||||
// Subscribing for monitor power on events
|
||||
var settingGuid = new NativeMethods.PowerSettingGuid();
|
||||
Program.unRegPowerNotify = NativeMethods.RegisterPowerSettingNotification(Handle, settingGuid.ConsoleDisplayState, NativeMethods.DEVICE_NOTIFY_WINDOW_HANDLE);
|
||||
|
||||
SetVersionLabel("Version: " + Assembly.GetExecutingAssembly().GetName().Version);
|
||||
|
||||
string model = Program.config.GetModel();
|
||||
int trim = model.LastIndexOf("_");
|
||||
if (trim > 0) model = model.Substring(0, trim);
|
||||
|
||||
labelModel.Text = model;
|
||||
|
||||
this.TopMost = Program.config.getConfig("topmost") == 1;
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
await Task.Delay(TimeSpan.FromSeconds(1));
|
||||
CheckForUpdatesAsync();
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void SliderBattery_ValueChanged(object? sender, EventArgs e)
|
||||
{
|
||||
SetBatteryChargeLimit(sliderBattery.Value);
|
||||
}
|
||||
|
||||
|
||||
public async void CheckForUpdatesAsync()
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
using (var httpClient = new HttpClient())
|
||||
{
|
||||
httpClient.DefaultRequestHeaders.Add("User-Agent", "C# App");
|
||||
var json = await httpClient.GetStringAsync("https://api.github.com/repos/seerge/g-helper/releases/latest");
|
||||
var config = JsonSerializer.Deserialize<JsonElement>(json);
|
||||
var tag = config.GetProperty("tag_name").ToString().Replace("v", "");
|
||||
var url = config.GetProperty("assets")[0].GetProperty("browser_download_url").ToString();
|
||||
|
||||
var gitVersion = new Version(tag);
|
||||
var appVersion = new Version(Assembly.GetExecutingAssembly().GetName().Version.ToString());
|
||||
|
||||
if (gitVersion.CompareTo(appVersion) > 0)
|
||||
{
|
||||
BeginInvoke(delegate
|
||||
{
|
||||
SetVersionLabel("Download Update: " + tag, url);
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.WriteLine("Latest version");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//Logger.WriteLine("Failed to check for updates:" + ex.Message);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static void TrayIcon_MouseMove(object? sender, MouseEventArgs e)
|
||||
{
|
||||
RefreshSensors();
|
||||
}
|
||||
|
||||
|
||||
private static void OnTimedEvent(Object? source, ElapsedEventArgs? e)
|
||||
{
|
||||
RefreshSensors();
|
||||
}
|
||||
|
||||
private void Button120Hz_MouseHover(object? sender, EventArgs e)
|
||||
{
|
||||
labelTipScreen.Text = "Max refresh rate for lower latency";
|
||||
labelTipScreen.Text = "Max refresh rate + screen overdrive for lower latency";
|
||||
}
|
||||
|
||||
private void Button60Hz_MouseHover(object? sender, EventArgs e)
|
||||
@@ -249,19 +171,18 @@ namespace GHelper
|
||||
{
|
||||
Program.config.setConfig("gpu_auto", (Program.config.getConfig("gpu_auto") == 1) ? 0 : 1);
|
||||
VisualiseGPUMode();
|
||||
AutoGPUMode();
|
||||
AutoGPUMode(SystemInformation.PowerStatus.PowerLineStatus);
|
||||
}
|
||||
|
||||
private void ButtonScreenAuto_Click(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("screen_auto", 1);
|
||||
InitScreen();
|
||||
AutoScreen();
|
||||
AutoScreen(SystemInformation.PowerStatus.PowerLineStatus);
|
||||
}
|
||||
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
|
||||
switch (m.Msg)
|
||||
{
|
||||
case NativeMethods.WM_POWERBROADCAST:
|
||||
@@ -272,7 +193,6 @@ namespace GHelper
|
||||
{
|
||||
case 0:
|
||||
Logger.WriteLine("Monitor Power Off");
|
||||
SetBatteryChargeLimit(Program.config.getConfig("charge_limit"));
|
||||
break;
|
||||
case 1:
|
||||
Logger.WriteLine("Monitor Power On");
|
||||
@@ -293,12 +213,12 @@ namespace GHelper
|
||||
}
|
||||
|
||||
|
||||
void SetVersionLabel(string label, string url = null)
|
||||
public void SetVersionLabel(string label, string url = null)
|
||||
{
|
||||
labelVersion.Text = label;
|
||||
if (url is not null)
|
||||
{
|
||||
this.versionUrl = url;
|
||||
versionUrl = url;
|
||||
labelVersion.ForeColor = Color.Red;
|
||||
}
|
||||
}
|
||||
@@ -332,9 +252,8 @@ namespace GHelper
|
||||
Program.config.setConfig("matrix_auto", check.Checked ? 1 : 0);
|
||||
}
|
||||
|
||||
private static void StartMatrixTimer(int interval = 100)
|
||||
private static void StartMatrixTimer()
|
||||
{
|
||||
matrixTimer.Interval = interval;
|
||||
matrixTimer.Enabled = true;
|
||||
}
|
||||
|
||||
@@ -346,23 +265,14 @@ namespace GHelper
|
||||
private static void MatrixTimer_Elapsed(object? sender, ElapsedEventArgs e)
|
||||
{
|
||||
if (mat is null) return;
|
||||
|
||||
switch (Program.config.getConfig("matrix_running"))
|
||||
{
|
||||
case 2:
|
||||
mat.PresentNextFrame();
|
||||
break;
|
||||
case 3:
|
||||
mat.PresentClock();
|
||||
break;
|
||||
}
|
||||
|
||||
mat.PresentNextFrame();
|
||||
}
|
||||
|
||||
void SetMatrixPicture(string fileName)
|
||||
{
|
||||
|
||||
if (mat is null) return;
|
||||
|
||||
StopMatrixTimer();
|
||||
|
||||
Image image;
|
||||
@@ -405,6 +315,8 @@ namespace GHelper
|
||||
mat.GenerateFrame(image);
|
||||
mat.Present();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -430,8 +342,6 @@ namespace GHelper
|
||||
if (fileName is not null)
|
||||
{
|
||||
Program.config.setConfig("matrix_picture", fileName);
|
||||
Program.config.setConfig("matrix_running", 2);
|
||||
|
||||
SetMatrixPicture(fileName);
|
||||
BeginInvoke(delegate
|
||||
{
|
||||
@@ -455,7 +365,7 @@ namespace GHelper
|
||||
SetMatrix();
|
||||
}
|
||||
|
||||
public void SetMatrix()
|
||||
public void SetMatrix(PowerLineStatus Plugged = PowerLineStatus.Online)
|
||||
{
|
||||
|
||||
if (mat is null) return;
|
||||
@@ -478,7 +388,7 @@ namespace GHelper
|
||||
|
||||
mat.SetProvider();
|
||||
|
||||
if (brightness == 0 || (auto && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online))
|
||||
if (brightness == 0 || (auto && Plugged != PowerLineStatus.Online))
|
||||
{
|
||||
mat.SetDisplayState(false);
|
||||
}
|
||||
@@ -487,22 +397,16 @@ namespace GHelper
|
||||
mat.SetDisplayState(true);
|
||||
mat.SetBrightness((BrightnessMode)brightness);
|
||||
|
||||
switch (running)
|
||||
if (running == 2)
|
||||
{
|
||||
case 2:
|
||||
SetMatrixPicture(Program.config.getConfigString("matrix_picture"));
|
||||
break;
|
||||
case 3:
|
||||
mat.SetBuiltInAnimation(false);
|
||||
StartMatrixTimer(1000);
|
||||
break;
|
||||
default:
|
||||
mat.SetBuiltInAnimation(true, animation);
|
||||
break;
|
||||
|
||||
string fileName = Program.config.getConfigString("matrix_picture");
|
||||
SetMatrixPicture(fileName);
|
||||
}
|
||||
else
|
||||
{
|
||||
mat.SetBuiltInAnimation(true, animation);
|
||||
}
|
||||
|
||||
//mat.SetBrightness((BrightnessMode)brightness);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -512,20 +416,19 @@ namespace GHelper
|
||||
private void LabelCPUFan_Click(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("fan_rpm", (Program.config.getConfig("fan_rpm") == 1) ? 0 : 1);
|
||||
RefreshSensors(true);
|
||||
RefreshSensors();
|
||||
}
|
||||
|
||||
private void PictureColor2_Click(object? sender, EventArgs e)
|
||||
{
|
||||
|
||||
ColorDialog colorDlg = new ColorDialog();
|
||||
colorDlg.AllowFullOpen = true;
|
||||
colorDlg.AllowFullOpen = false;
|
||||
colorDlg.Color = pictureColor2.BackColor;
|
||||
|
||||
if (colorDlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
Program.config.setConfig("aura_color2", colorDlg.Color.ToArgb());
|
||||
SetAura();
|
||||
SetAuraColor(color2: colorDlg.Color);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -570,34 +473,45 @@ namespace GHelper
|
||||
private void ButtonKeyboardColor_Click(object? sender, EventArgs e)
|
||||
{
|
||||
|
||||
if (sender is null)
|
||||
return;
|
||||
|
||||
Button but = (Button)sender;
|
||||
|
||||
ColorDialog colorDlg = new ColorDialog();
|
||||
colorDlg.AllowFullOpen = true;
|
||||
colorDlg.AllowFullOpen = false;
|
||||
colorDlg.Color = pictureColor.BackColor;
|
||||
|
||||
if (colorDlg.ShowDialog() == DialogResult.OK)
|
||||
{
|
||||
Program.config.setConfig("aura_color", colorDlg.Color.ToArgb());
|
||||
SetAura();
|
||||
SetAuraColor(color1: colorDlg.Color);
|
||||
}
|
||||
}
|
||||
|
||||
public void InitAura()
|
||||
{
|
||||
Aura.Mode = Program.config.getConfig("aura_mode");
|
||||
Aura.Speed = Program.config.getConfig("aura_speed");
|
||||
Aura.SetColor(Program.config.getConfig("aura_color"));
|
||||
Aura.SetColor2(Program.config.getConfig("aura_color2"));
|
||||
int mode = Program.config.getConfig("aura_mode");
|
||||
int colorCode = Program.config.getConfig("aura_color");
|
||||
int colorCode2 = Program.config.getConfig("aura_color2");
|
||||
|
||||
comboKeyboard.DropDownStyle = ComboBoxStyle.DropDownList;
|
||||
comboKeyboard.DataSource = new BindingSource(Aura.GetModes(), null);
|
||||
comboKeyboard.DisplayMember = "Value";
|
||||
comboKeyboard.ValueMember = "Key";
|
||||
comboKeyboard.SelectedValue = Aura.Mode;
|
||||
comboKeyboard.SelectedValueChanged += ComboKeyboard_SelectedValueChanged;
|
||||
int speed = Program.config.getConfig("aura_speed");
|
||||
|
||||
pictureColor.BackColor = Aura.Color1;
|
||||
pictureColor2.BackColor = Aura.Color2;
|
||||
pictureColor2.Visible = Aura.HasSecondColor();
|
||||
Color color = Color.FromArgb(255, 255, 255);
|
||||
Color color2 = Color.FromArgb(0, 0, 0);
|
||||
|
||||
if (mode == -1)
|
||||
mode = 0;
|
||||
|
||||
if (colorCode != -1)
|
||||
color = Color.FromArgb(colorCode);
|
||||
|
||||
if (colorCode2 != -1)
|
||||
color2 = Color.FromArgb(colorCode2);
|
||||
|
||||
SetAuraColor(color, color2, false);
|
||||
SetAuraMode(mode, false);
|
||||
|
||||
Aura.Mode = mode;
|
||||
}
|
||||
|
||||
public void InitMatrix()
|
||||
@@ -618,8 +532,8 @@ namespace GHelper
|
||||
int brightness = Program.config.getConfig("matrix_brightness");
|
||||
int running = Program.config.getConfig("matrix_running");
|
||||
|
||||
comboMatrix.SelectedIndex = (brightness != -1) ? Math.Min(brightness, comboMatrix.Items.Count - 1) : 0;
|
||||
comboMatrixRunning.SelectedIndex = (running != -1) ? Math.Min(running, comboMatrixRunning.Items.Count - 1) : 0;
|
||||
comboMatrix.SelectedIndex = (brightness != -1) ? brightness : 0;
|
||||
comboMatrixRunning.SelectedIndex = (running != -1) ? running : 0;
|
||||
|
||||
checkMatrix.Checked = (Program.config.getConfig("matrix_auto") == 1);
|
||||
|
||||
@@ -627,35 +541,66 @@ namespace GHelper
|
||||
}
|
||||
|
||||
|
||||
public void SetAura()
|
||||
public void SetAuraColor(Color? color1 = null, Color? color2 = null, bool apply = true)
|
||||
{
|
||||
Aura.Mode = Program.config.getConfig("aura_mode");
|
||||
Aura.Speed = Program.config.getConfig("aura_speed");
|
||||
Aura.SetColor(Program.config.getConfig("aura_color"));
|
||||
Aura.SetColor2(Program.config.getConfig("aura_color2"));
|
||||
|
||||
if (color1 is not null)
|
||||
{
|
||||
Aura.Color1 = (Color)color1;
|
||||
Program.config.setConfig("aura_color", Aura.Color1.ToArgb());
|
||||
|
||||
}
|
||||
|
||||
if (color2 is not null)
|
||||
{
|
||||
Aura.Color2 = (Color)color2;
|
||||
Program.config.setConfig("aura_color2", Aura.Color2.ToArgb());
|
||||
}
|
||||
|
||||
if (apply)
|
||||
Aura.ApplyAura();
|
||||
|
||||
pictureColor.BackColor = Aura.Color1;
|
||||
pictureColor2.BackColor = Aura.Color2;
|
||||
pictureColor2.Visible = Aura.HasSecondColor();
|
||||
}
|
||||
|
||||
Aura.ApplyAura();
|
||||
public void SetAuraMode(int mode = 0, bool apply = true)
|
||||
{
|
||||
|
||||
//Debug.WriteLine(mode);
|
||||
|
||||
if (mode > 4) mode = 0;
|
||||
|
||||
pictureColor2.Visible = (mode == Aura.Breathe);
|
||||
|
||||
if (Aura.Mode == mode) return; // same mode
|
||||
|
||||
Aura.Mode = mode;
|
||||
|
||||
Program.config.setConfig("aura_mode", mode);
|
||||
|
||||
comboKeyboard.SelectedValueChanged -= ComboKeyboard_SelectedValueChanged;
|
||||
comboKeyboard.SelectedIndex = mode;
|
||||
comboKeyboard.SelectedValueChanged += ComboKeyboard_SelectedValueChanged;
|
||||
|
||||
if (apply)
|
||||
Aura.ApplyAura();
|
||||
|
||||
}
|
||||
|
||||
public void CycleAuraMode()
|
||||
{
|
||||
if (comboKeyboard.SelectedIndex < comboKeyboard.Items.Count - 1)
|
||||
comboKeyboard.SelectedIndex += 1;
|
||||
else
|
||||
comboKeyboard.SelectedIndex = 0;
|
||||
SetAuraMode(Program.config.getConfig("aura_mode") + 1);
|
||||
}
|
||||
|
||||
private void ComboKeyboard_SelectedValueChanged(object? sender, EventArgs e)
|
||||
{
|
||||
Program.config.setConfig("aura_mode", (int)comboKeyboard.SelectedValue);
|
||||
SetAura();
|
||||
}
|
||||
if (sender is null)
|
||||
return;
|
||||
|
||||
ComboBox cmb = (ComboBox)sender;
|
||||
SetAuraMode(cmb.SelectedIndex);
|
||||
}
|
||||
|
||||
private void Button120Hz_Click(object? sender, EventArgs e)
|
||||
{
|
||||
@@ -669,17 +614,13 @@ namespace GHelper
|
||||
SetScreen(60, 0);
|
||||
}
|
||||
|
||||
private void ButtonMiniled_Click(object? sender, EventArgs e)
|
||||
{
|
||||
int miniled = (Program.config.getConfig("miniled") == 1) ? 0 : 1;
|
||||
Program.config.setConfig("miniled", miniled);
|
||||
SetScreen(-1, -1, miniled);
|
||||
}
|
||||
|
||||
public void SetScreen(int frequency = -1, int overdrive = -1, int miniled = -1)
|
||||
public void SetScreen(int frequency = -1, int overdrive = -1)
|
||||
{
|
||||
|
||||
if (NativeMethods.GetRefreshRate() < 0) // Laptop screen not detected or has unknown refresh rate
|
||||
int currentFrequency = NativeMethods.GetRefreshRate();
|
||||
|
||||
if (currentFrequency < 0) // Laptop screen not detected or has unknown refresh rate
|
||||
{
|
||||
InitScreen();
|
||||
return;
|
||||
@@ -687,53 +628,62 @@ namespace GHelper
|
||||
|
||||
if (frequency >= 1000)
|
||||
{
|
||||
frequency = NativeMethods.GetRefreshRate(true);
|
||||
frequency = Program.config.getConfig("max_frequency");
|
||||
if (frequency <= 60)
|
||||
frequency = 120;
|
||||
}
|
||||
|
||||
if (frequency > 0)
|
||||
{
|
||||
NativeMethods.SetRefreshRate(frequency);
|
||||
}
|
||||
if (frequency <= 0) return;
|
||||
|
||||
NativeMethods.SetRefreshRate(frequency);
|
||||
if (overdrive >= 0)
|
||||
{
|
||||
if (Program.config.getConfig("no_overdrive") == 1) overdrive = 0;
|
||||
Program.wmi.DeviceSet(ASUSWmi.ScreenOverdrive, overdrive, "ScreenOverdrive");
|
||||
|
||||
}
|
||||
|
||||
if (miniled >= 0)
|
||||
{
|
||||
Program.wmi.DeviceSet(ASUSWmi.ScreenMiniled, miniled, "Miniled");
|
||||
Debug.WriteLine("Miniled " + miniled);
|
||||
}
|
||||
Program.wmi.DeviceSet(ASUSWmi.ScreenOverdrive, overdrive);
|
||||
|
||||
InitScreen();
|
||||
|
||||
Logger.WriteLine("Screen " + frequency.ToString() + "Hz");
|
||||
|
||||
}
|
||||
|
||||
public void InitScreen()
|
||||
{
|
||||
|
||||
int frequency = NativeMethods.GetRefreshRate();
|
||||
int maxFrequency = NativeMethods.GetRefreshRate(true);
|
||||
int maxFrequency = Program.config.getConfig("max_frequency");
|
||||
|
||||
bool screenAuto = (Program.config.getConfig("screen_auto") == 1);
|
||||
bool overdriveSetting = (Program.config.getConfig("no_overdrive") != 1);
|
||||
|
||||
int overdrive = Program.wmi.DeviceGet(ASUSWmi.ScreenOverdrive);
|
||||
int miniled = Program.wmi.DeviceGet(ASUSWmi.ScreenMiniled);
|
||||
int overdrive = 0;
|
||||
try
|
||||
{
|
||||
overdrive = Program.wmi.DeviceGet(ASUSWmi.ScreenOverdrive);
|
||||
}
|
||||
catch
|
||||
{
|
||||
Logger.WriteLine("Screen Overdrive not supported");
|
||||
}
|
||||
|
||||
bool screenEnabled = (frequency >= 0);
|
||||
if (frequency < 0)
|
||||
{
|
||||
button60Hz.Enabled = false;
|
||||
button120Hz.Enabled = false;
|
||||
buttonScreenAuto.Enabled = false;
|
||||
labelSreen.Text = "Laptop Screen: Turned off";
|
||||
button60Hz.BackColor = SystemColors.ControlLight;
|
||||
button120Hz.BackColor = SystemColors.ControlLight;
|
||||
buttonScreenAuto.BackColor = SystemColors.ControlLight;
|
||||
}
|
||||
else
|
||||
{
|
||||
button60Hz.Enabled = true;
|
||||
button120Hz.Enabled = true;
|
||||
buttonScreenAuto.Enabled = true;
|
||||
button60Hz.BackColor = SystemColors.ControlLightLight;
|
||||
button120Hz.BackColor = SystemColors.ControlLightLight;
|
||||
buttonScreenAuto.BackColor = SystemColors.ControlLightLight;
|
||||
labelSreen.Text = "Laptop Screen: " + frequency + "Hz" + ((overdrive == 1) ? " + Overdrive" : "");
|
||||
}
|
||||
|
||||
ButtonEnabled(button60Hz, screenEnabled);
|
||||
ButtonEnabled(button120Hz, screenEnabled);
|
||||
ButtonEnabled(buttonScreenAuto, screenEnabled);
|
||||
ButtonEnabled(buttonMiniled, screenEnabled);
|
||||
|
||||
labelSreen.Text = screenEnabled
|
||||
? "Laptop Screen: " + frequency + "Hz" + ((overdrive == 1) ? " + Overdrive" : "")
|
||||
: "Laptop Screen: Turned off";
|
||||
|
||||
button60Hz.Activated = false;
|
||||
button120Hz.Activated = false;
|
||||
@@ -747,24 +697,18 @@ namespace GHelper
|
||||
{
|
||||
button60Hz.Activated = true;
|
||||
}
|
||||
else if (frequency > 60)
|
||||
else
|
||||
{
|
||||
if (frequency > 60)
|
||||
maxFrequency = frequency;
|
||||
|
||||
Program.config.setConfig("max_frequency", maxFrequency);
|
||||
button120Hz.Activated = true;
|
||||
}
|
||||
|
||||
if (maxFrequency > 60)
|
||||
{
|
||||
button120Hz.Text = maxFrequency.ToString() + "Hz" + (overdriveSetting ? " + OD" : "");
|
||||
}
|
||||
|
||||
if (miniled >= 0)
|
||||
{
|
||||
buttonMiniled.Activated = (miniled == 1);
|
||||
Program.config.setConfig("miniled", miniled);
|
||||
}
|
||||
else
|
||||
{
|
||||
buttonMiniled.Visible = false;
|
||||
button120Hz.Text = maxFrequency.ToString() + "Hz + OD";
|
||||
}
|
||||
|
||||
Program.config.setConfig("frequency", frequency);
|
||||
@@ -802,12 +746,28 @@ namespace GHelper
|
||||
SetGPUMode(ASUSWmi.GPUModeEco);
|
||||
}
|
||||
|
||||
private static void SetTimer()
|
||||
{
|
||||
aTimer = new System.Timers.Timer(500);
|
||||
aTimer.Elapsed += OnTimedEvent;
|
||||
aTimer.AutoReset = true;
|
||||
aTimer.Enabled = false;
|
||||
}
|
||||
|
||||
private static void RefreshSensors(bool force = false)
|
||||
|
||||
private static string FormatFan(int fan)
|
||||
{
|
||||
if (Program.config.getConfig("fan_rpm") == 1)
|
||||
return " Fan: " + (fan * 100).ToString() + "RPM";
|
||||
else
|
||||
return " Fan: " + Math.Min(Math.Round(fan / 0.6), 100).ToString() + "%"; // relatively to 6000 rpm
|
||||
}
|
||||
|
||||
private static void RefreshSensors()
|
||||
{
|
||||
|
||||
if (!force && Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastRefresh) < 2000) return;
|
||||
lastRefresh = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
||||
string cpuFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.CPU_Fan));
|
||||
string gpuFan = FormatFan(Program.wmi.DeviceGet(ASUSWmi.GPU_Fan));
|
||||
|
||||
string cpuTemp = "";
|
||||
string gpuTemp = "";
|
||||
@@ -828,20 +788,17 @@ namespace GHelper
|
||||
|
||||
Program.settingsForm.BeginInvoke(delegate
|
||||
{
|
||||
Program.settingsForm.labelCPUFan.Text = "CPU" + cpuTemp + HardwareMonitor.cpuFan;
|
||||
Program.settingsForm.labelGPUFan.Text = "GPU" + gpuTemp + HardwareMonitor.gpuFan;
|
||||
if (HardwareMonitor.midFan is not null)
|
||||
Program.settingsForm.labelMidFan.Text = "Mid" + HardwareMonitor.midFan;
|
||||
|
||||
Program.settingsForm.labelCPUFan.Text = "CPU" + cpuTemp + cpuFan;
|
||||
Program.settingsForm.labelGPUFan.Text = "GPU" + gpuTemp + gpuFan;
|
||||
Program.settingsForm.labelBattery.Text = battery;
|
||||
|
||||
Program.trayIcon.Text = "CPU" + cpuTemp + HardwareMonitor.cpuFan + "\n"
|
||||
+ "GPU" + gpuTemp + HardwareMonitor.gpuFan +
|
||||
((battery.Length > 0) ? ("\n" + battery) : "");
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private static void OnTimedEvent(Object? source, ElapsedEventArgs? e)
|
||||
{
|
||||
RefreshSensors();
|
||||
aTimer.Interval = 2000;
|
||||
}
|
||||
|
||||
private void SettingsForm_VisibleChanged(object? sender, EventArgs e)
|
||||
{
|
||||
@@ -853,7 +810,7 @@ namespace GHelper
|
||||
this.Top = Screen.FromControl(this).WorkingArea.Height - 10 - this.Height;
|
||||
this.Activate();
|
||||
|
||||
//aTimer.Interval = 300;
|
||||
aTimer.Interval = 300;
|
||||
aTimer.Enabled = true;
|
||||
|
||||
//RefreshSensors();
|
||||
@@ -876,45 +833,27 @@ namespace GHelper
|
||||
if (limit_cpu < ASUSWmi.MinCPU) return;
|
||||
|
||||
if (Program.wmi.DeviceGet(ASUSWmi.PPT_TotalA0) >= 0)
|
||||
Program.wmi.DeviceSet(ASUSWmi.PPT_TotalA0, limit_total, "PowerLimit A");
|
||||
Program.wmi.DeviceSet(ASUSWmi.PPT_TotalA0, limit_total);
|
||||
|
||||
if (Program.wmi.DeviceGet(ASUSWmi.PPT_CPUB0) >= 0)
|
||||
Program.wmi.DeviceSet(ASUSWmi.PPT_CPUB0, limit_cpu, "PowerLimit B");
|
||||
|
||||
Program.wmi.DeviceSet(ASUSWmi.PPT_CPUB0, limit_cpu);
|
||||
|
||||
Logger.WriteLine("PowerLimits " + limit_total.ToString() + ", " + limit_cpu.ToString());
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void AutoFans(bool force = false)
|
||||
public void AutoFansAndPower()
|
||||
{
|
||||
|
||||
if (force || Program.config.getConfigPerf("auto_apply") == 1)
|
||||
if (Program.config.getConfigPerf("auto_apply") == 1)
|
||||
{
|
||||
int cpuResult = Program.wmi.SetFanCurve(0, Program.config.getFanConfig(0));
|
||||
int gpuResult = Program.wmi.SetFanCurve(1, Program.config.getFanConfig(1));
|
||||
|
||||
if (Program.config.getConfig("mid_fan") == 1)
|
||||
Program.wmi.SetFanCurve(2, Program.config.getFanConfig(2));
|
||||
|
||||
if (cpuResult != 1 || gpuResult != 1) // something went wrong, resetting to default profile
|
||||
{
|
||||
int mode = Program.config.getConfig("performance_mode");
|
||||
Logger.WriteLine("Bios rejected fan curve, resetting mode to " + mode);
|
||||
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, mode, "PerformanceMode");
|
||||
}
|
||||
else
|
||||
labelPerf.Text = "Performance Mode+";
|
||||
Program.wmi.SetFanCurve(0, Program.config.getFanConfig(0));
|
||||
Program.wmi.SetFanCurve(1, Program.config.getFanConfig(1));
|
||||
}
|
||||
else
|
||||
labelPerf.Text = "Performance Mode";
|
||||
|
||||
}
|
||||
|
||||
public void AutoPower(bool force = false)
|
||||
{
|
||||
if (force || Program.config.getConfigPerf("auto_apply_power") == 1)
|
||||
if (Program.config.getConfigPerf("auto_apply_power") == 1)
|
||||
{
|
||||
var timer = new System.Timers.Timer(1000);
|
||||
timer.Elapsed += delegate
|
||||
@@ -928,7 +867,6 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void SetPerformanceMode(int PerformanceMode = ASUSWmi.PerformanceBalanced, bool notify = false)
|
||||
{
|
||||
|
||||
@@ -958,7 +896,8 @@ namespace GHelper
|
||||
Program.config.setConfig("performance_" + (int)SystemInformation.PowerStatus.PowerLineStatus, PerformanceMode);
|
||||
Program.config.setConfig("performance_mode", PerformanceMode);
|
||||
|
||||
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, PerformanceMode, "PerformanceMode");
|
||||
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, PerformanceMode);
|
||||
Logger.WriteLine("PerfMode " + perfName + " " + PerformanceMode);
|
||||
|
||||
if (notify && (oldMode != PerformanceMode))
|
||||
{
|
||||
@@ -972,13 +911,7 @@ namespace GHelper
|
||||
}
|
||||
}
|
||||
|
||||
AutoFans();
|
||||
AutoPower();
|
||||
|
||||
if (Program.config.getConfigPerf("auto_boost") != -1)
|
||||
{
|
||||
NativeMethods.SetCPUBoost(Program.config.getConfigPerf("auto_boost"));
|
||||
}
|
||||
AutoFansAndPower();
|
||||
|
||||
NativeMethods.SetPowerScheme(PerformanceMode);
|
||||
|
||||
@@ -991,7 +924,6 @@ namespace GHelper
|
||||
{
|
||||
fans.InitFans();
|
||||
fans.InitPower();
|
||||
fans.InitBoost();
|
||||
}
|
||||
|
||||
|
||||
@@ -1004,25 +936,8 @@ namespace GHelper
|
||||
SetPerformanceMode(Program.config.getConfig("performance_mode") + 1, true);
|
||||
}
|
||||
|
||||
|
||||
public void AutoKeyboard()
|
||||
public void AutoPerformance(PowerLineStatus Plugged = PowerLineStatus.Online)
|
||||
{
|
||||
if (Program.config.getConfig("keyboard_auto") != 1) return;
|
||||
|
||||
if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online)
|
||||
Aura.ApplyBrightness(3);
|
||||
//Program.wmi.DeviceSet(ASUSWmi.UniversalControl, ASUSWmi.KB_Light_Up);
|
||||
else
|
||||
Aura.ApplyBrightness(0);
|
||||
//Program.wmi.DeviceSet(ASUSWmi.UniversalControl, ASUSWmi.KB_Light_Down);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void AutoPerformance()
|
||||
{
|
||||
var Plugged = SystemInformation.PowerStatus.PowerLineStatus;
|
||||
|
||||
int mode = Program.config.getConfig("performance_" + (int)Plugged);
|
||||
if (mode != -1)
|
||||
SetPerformanceMode(mode, true);
|
||||
@@ -1031,11 +946,11 @@ namespace GHelper
|
||||
}
|
||||
|
||||
|
||||
public void AutoScreen(bool force = false)
|
||||
public void AutoScreen(PowerLineStatus Plugged = PowerLineStatus.Online)
|
||||
{
|
||||
if (!force && Program.config.getConfig("screen_auto") != 1) return;
|
||||
if (Program.config.getConfig("screen_auto") != 1) return;
|
||||
|
||||
if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online)
|
||||
if (Plugged == PowerLineStatus.Online)
|
||||
SetScreen(1000, 1);
|
||||
else
|
||||
SetScreen(60, 0);
|
||||
@@ -1043,11 +958,9 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
public bool AutoGPUMode()
|
||||
public bool AutoGPUMode(PowerLineStatus Plugged = PowerLineStatus.Online)
|
||||
{
|
||||
|
||||
var Plugged = SystemInformation.PowerStatus.PowerLineStatus;
|
||||
|
||||
bool GpuAuto = Program.config.getConfig("gpu_auto") == 1;
|
||||
if (!GpuAuto) return false;
|
||||
|
||||
@@ -1079,13 +992,20 @@ namespace GHelper
|
||||
if (!ultimate)
|
||||
{
|
||||
tableGPU.Controls.Remove(buttonUltimate);
|
||||
|
||||
/*
|
||||
* buttonFans.Image = null;
|
||||
buttonFans.Height = 44;
|
||||
*/
|
||||
|
||||
tablePerf.ColumnCount = 0;
|
||||
tableGPU.ColumnCount = 0;
|
||||
tableScreen.ColumnCount = 0;
|
||||
|
||||
}
|
||||
|
||||
//tableLayoutMatrix.ColumnCount = 0;
|
||||
tableLayoutKeyboard.ColumnCount = 0;
|
||||
tableLayoutMatrix.ColumnCount = 0;
|
||||
|
||||
|
||||
}
|
||||
@@ -1096,9 +1016,6 @@ namespace GHelper
|
||||
int eco = Program.wmi.DeviceGet(ASUSWmi.GPUEco);
|
||||
int mux = Program.wmi.DeviceGet(ASUSWmi.GPUMux);
|
||||
|
||||
//Logger.WriteLine("Eco flag : " + eco);
|
||||
//Logger.WriteLine("Mux flag : " + mux);
|
||||
|
||||
int GpuMode;
|
||||
|
||||
if (mux == 0)
|
||||
@@ -1114,13 +1031,12 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
Program.config.setConfig("gpu_mode", GpuMode);
|
||||
|
||||
ButtonEnabled(buttonOptimized, true);
|
||||
ButtonEnabled(buttonEco, true);
|
||||
ButtonEnabled(buttonStandard, true);
|
||||
ButtonEnabled(buttonUltimate, true);
|
||||
|
||||
Program.config.setConfig("gpu_mode", GpuMode);
|
||||
VisualiseGPUMode(GpuMode);
|
||||
|
||||
return GpuMode;
|
||||
@@ -1138,28 +1054,29 @@ namespace GHelper
|
||||
|
||||
labelGPU.Text = "GPU Mode: Changing ...";
|
||||
|
||||
Thread t = new Thread(() =>
|
||||
new Thread(() =>
|
||||
{
|
||||
Thread.CurrentThread.IsBackground = true;
|
||||
|
||||
if (eco == 1)
|
||||
{
|
||||
string[] tokill = { "EADesktop", "RadeonSoftware" };
|
||||
string[] tokill = { "EADesktop" };
|
||||
foreach (string kill in tokill)
|
||||
foreach (var process in Process.GetProcessesByName(kill)) process.Kill();
|
||||
}
|
||||
|
||||
Program.wmi.DeviceSet(ASUSWmi.GPUEco, eco, "GPUEco");
|
||||
|
||||
Program.wmi.DeviceSet(ASUSWmi.GPUEco, eco);
|
||||
Program.settingsForm.BeginInvoke(delegate
|
||||
{
|
||||
Thread.Sleep(500);
|
||||
InitGPUMode();
|
||||
AutoScreen();
|
||||
HardwareMonitor.RecreateGpuTemperatureProviderWithRetry();
|
||||
Thread.Sleep(500);
|
||||
AutoScreen(SystemInformation.PowerStatus.PowerLineStatus);
|
||||
});
|
||||
});
|
||||
})
|
||||
{
|
||||
|
||||
t.Start();
|
||||
}.Start();
|
||||
|
||||
}
|
||||
|
||||
@@ -1183,7 +1100,7 @@ namespace GHelper
|
||||
DialogResult dialogResult = MessageBox.Show("Switching off Ultimate Mode requires restart", "Reboot now?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
Program.wmi.DeviceSet(ASUSWmi.GPUMux, 1, "GPUMux");
|
||||
Program.wmi.DeviceSet(ASUSWmi.GPUMux, 1);
|
||||
restart = true;
|
||||
changed = true;
|
||||
}
|
||||
@@ -1193,7 +1110,7 @@ namespace GHelper
|
||||
DialogResult dialogResult = MessageBox.Show("Ultimate Mode requires restart", "Reboot now?", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
Program.wmi.DeviceSet(ASUSWmi.GPUMux, 0, "GPUMux");
|
||||
Program.wmi.DeviceSet(ASUSWmi.GPUMux, 0);
|
||||
restart = true;
|
||||
changed = true;
|
||||
}
|
||||
@@ -1215,6 +1132,7 @@ namespace GHelper
|
||||
if (changed)
|
||||
{
|
||||
Program.config.setConfig("gpu_mode", GPUMode);
|
||||
HardwareMonitor.RecreateGpuTemperatureProviderWithRetry();
|
||||
}
|
||||
|
||||
if (restart)
|
||||
@@ -1286,10 +1204,10 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
public void ButtonEnabled(RButton but, bool enabled)
|
||||
public void ButtonEnabled(Button but, bool enabled)
|
||||
{
|
||||
but.Enabled = enabled;
|
||||
but.BackColor = but.Enabled ? Color.FromArgb(255, but.BackColor) : Color.FromArgb(100, but.BackColor);
|
||||
but.BackColor = enabled ? SystemColors.ControlLightLight : SystemColors.ControlLight;
|
||||
}
|
||||
|
||||
public void SetStartupCheck(bool status)
|
||||
@@ -1304,16 +1222,21 @@ namespace GHelper
|
||||
|
||||
if (limit < 40 || limit > 100) return;
|
||||
|
||||
//Debug.WriteLine(limit);
|
||||
|
||||
labelBatteryTitle.Text = "Battery Charge Limit: " + limit.ToString() + "%";
|
||||
sliderBattery.Value = limit;
|
||||
trackBattery.Value = limit;
|
||||
Program.wmi.DeviceSet(ASUSWmi.BatteryLimit, limit);
|
||||
|
||||
Program.wmi.DeviceSet(ASUSWmi.BatteryLimit, limit, "BatteryLimit");
|
||||
Program.config.setConfig("charge_limit", limit);
|
||||
|
||||
}
|
||||
|
||||
private void trackBatteryChange(object? sender, EventArgs e)
|
||||
{
|
||||
if (sender is null) return;
|
||||
TrackBar bar = (TrackBar)sender;
|
||||
SetBatteryChargeLimit(bar.Value);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
168
app/Slider.cs
168
app/Slider.cs
@@ -1,168 +0,0 @@
|
||||
using System.Drawing.Drawing2D;
|
||||
|
||||
namespace WinFormsSliderBar
|
||||
{
|
||||
public static class GraphicsExtensions
|
||||
{
|
||||
public static void DrawCircle(this Graphics g, Pen pen,
|
||||
float centerX, float centerY, float radius)
|
||||
{
|
||||
g.DrawEllipse(pen, centerX - radius, centerY - radius,
|
||||
radius + radius, radius + radius);
|
||||
}
|
||||
|
||||
public static void FillCircle(this Graphics g, Brush brush,
|
||||
float centerX, float centerY, float radius)
|
||||
{
|
||||
g.FillEllipse(brush, centerX - radius, centerY - radius,
|
||||
radius + radius, radius + radius);
|
||||
}
|
||||
}
|
||||
|
||||
public class Slider : Control
|
||||
{
|
||||
private float _radius;
|
||||
private PointF _thumbPos;
|
||||
private SizeF _barSize;
|
||||
private PointF _barPos;
|
||||
|
||||
private int _step = 5;
|
||||
|
||||
public Color accentColor = Color.FromArgb(255, 58, 174, 239);
|
||||
public Color borderColor = Color.White;
|
||||
|
||||
public event EventHandler ValueChanged;
|
||||
|
||||
public Slider()
|
||||
{
|
||||
// This reduces flicker
|
||||
DoubleBuffered = true;
|
||||
}
|
||||
|
||||
private int _min = 0;
|
||||
public int Min
|
||||
{
|
||||
get => _min;
|
||||
set
|
||||
{
|
||||
_min = value;
|
||||
RecalculateParameters();
|
||||
}
|
||||
}
|
||||
|
||||
private int _max = 100;
|
||||
public int Max
|
||||
{
|
||||
get => _max;
|
||||
set
|
||||
{
|
||||
_max = value;
|
||||
RecalculateParameters();
|
||||
}
|
||||
}
|
||||
|
||||
private int _value = 50;
|
||||
public int Value
|
||||
{
|
||||
get => _value;
|
||||
set
|
||||
{
|
||||
|
||||
value = (int)Math.Round(value / (float)_step) * _step;
|
||||
|
||||
if (_value != value)
|
||||
{
|
||||
_value = value;
|
||||
ValueChanged?.Invoke(this, EventArgs.Empty);
|
||||
RecalculateParameters();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnPaint(PaintEventArgs e)
|
||||
{
|
||||
base.OnPaint(e);
|
||||
|
||||
Brush brushAccent = new SolidBrush(accentColor);
|
||||
Brush brushEmpty = new SolidBrush(Color.Gray);
|
||||
Brush brushBorder = new SolidBrush(borderColor);
|
||||
|
||||
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
e.Graphics.FillRectangle(brushEmpty,
|
||||
_barPos.X, _barPos.Y, _barSize.Width, _barSize.Height);
|
||||
e.Graphics.FillRectangle(brushAccent,
|
||||
_barPos.X, _barPos.Y, _thumbPos.X - _barPos.X, _barSize.Height);
|
||||
|
||||
e.Graphics.FillCircle(brushBorder, _thumbPos.X, _thumbPos.Y, _radius);
|
||||
e.Graphics.FillCircle(brushAccent, _thumbPos.X, _thumbPos.Y, 0.7f * _radius);
|
||||
}
|
||||
|
||||
protected override void OnResize(EventArgs e)
|
||||
{
|
||||
base.OnResize(e);
|
||||
RecalculateParameters();
|
||||
}
|
||||
|
||||
private void RecalculateParameters()
|
||||
{
|
||||
_radius = 0.4F * ClientSize.Height;
|
||||
_barSize = new SizeF(ClientSize.Width - 4 * _radius, ClientSize.Height * 0.15F);
|
||||
_barPos = new PointF(_radius, (ClientSize.Height - _barSize.Height) / 2);
|
||||
_thumbPos = new PointF(
|
||||
_barSize.Width / (Max - Min) * (Value - Min) + _barPos.X,
|
||||
_barPos.Y + 0.5f * _barSize.Height);
|
||||
Invalidate();
|
||||
}
|
||||
|
||||
bool _moving = false;
|
||||
SizeF _delta;
|
||||
|
||||
protected override void OnMouseDown(MouseEventArgs e)
|
||||
{
|
||||
base.OnMouseDown(e);
|
||||
|
||||
// Difference between tumb and mouse position.
|
||||
_delta = new SizeF(e.Location.X - _thumbPos.X, e.Location.Y - _thumbPos.Y);
|
||||
if (_delta.Width * _delta.Width + _delta.Height * _delta.Height <= _radius * _radius)
|
||||
{
|
||||
// Clicking inside thumb.
|
||||
_moving = true;
|
||||
}
|
||||
|
||||
_calculateValue(e);
|
||||
|
||||
}
|
||||
|
||||
private void _calculateValue(MouseEventArgs e)
|
||||
{
|
||||
float thumbX = e.Location.X; // - _delta.Width;
|
||||
if (thumbX < _barPos.X)
|
||||
{
|
||||
thumbX = _barPos.X;
|
||||
}
|
||||
else if (thumbX > _barPos.X + _barSize.Width)
|
||||
{
|
||||
thumbX = _barPos.X + _barSize.Width;
|
||||
}
|
||||
Value = (int)Math.Round(Min + (thumbX - _barPos.X) * (Max - Min) / _barSize.Width);
|
||||
|
||||
}
|
||||
|
||||
protected override void OnMouseMove(MouseEventArgs e)
|
||||
{
|
||||
base.OnMouseMove(e);
|
||||
if (_moving)
|
||||
{
|
||||
_calculateValue(e);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnMouseUp(MouseEventArgs e)
|
||||
{
|
||||
base.OnMouseUp(e);
|
||||
_moving = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
3
app/post-build.bat
Normal file
3
app/post-build.bat
Normal file
@@ -0,0 +1,3 @@
|
||||
cd bin\Release\net7.0-windows8.0\publish\
|
||||
del GHelper.zip
|
||||
rem "C:\Program Files\7-Zip\7z.exe" a GHelper.zip GHelper.exe
|
||||
19
bloat.bat
19
bloat.bat
@@ -1,19 +0,0 @@
|
||||
sc config AsusAppService start= auto
|
||||
sc config ASUSLinkNear start= auto
|
||||
sc config ASUSLinkRemote start= auto
|
||||
sc config ASUSSoftwareManager start= auto
|
||||
sc config ASUSSwitch start= auto
|
||||
sc config ASUSSystemAnalysis start= auto
|
||||
sc config ASUSSystemDiagnosis start= auto
|
||||
sc config ArmouryCrateControlInterface start= auto
|
||||
|
||||
sc START AsusAppService
|
||||
sc START ASUSLinkNear
|
||||
sc START ASUSLinkRemote
|
||||
sc START ASUSSoftwareManager
|
||||
sc START ASUSSwitch
|
||||
sc START ASUSSystemAnalysis
|
||||
sc START ASUSSystemDiagnosis
|
||||
sc START ArmouryCrateControlInterface
|
||||
|
||||
set /p asd="Hit enter to finish"
|
||||
18
debloat.bat
18
debloat.bat
@@ -7,13 +7,11 @@ sc STOP ASUSSystemAnalysis
|
||||
sc STOP ASUSSystemDiagnosis
|
||||
sc STOP ArmouryCrateControlInterface
|
||||
|
||||
sc config AsusAppService start= disabled
|
||||
sc config ASUSLinkNear start= disabled
|
||||
sc config ASUSLinkRemote start= disabled
|
||||
sc config ASUSSoftwareManager start= disabled
|
||||
sc config ASUSSwitch start= disabled
|
||||
sc config ASUSSystemAnalysis start= disabled
|
||||
sc config ASUSSystemDiagnosis start= disabled
|
||||
sc config ArmouryCrateControlInterface start= disabled
|
||||
|
||||
set /p asd="Hit enter to finish"
|
||||
sc DELETE AsusAppService
|
||||
sc DELETE ASUSLinkNear
|
||||
sc DELETE ASUSLinkRemote
|
||||
sc DELETE ASUSSoftwareManager
|
||||
sc DELETE ASUSSwitch
|
||||
sc DELETE ASUSSystemAnalysis
|
||||
sc DELETE ASUSSystemDiagnosis
|
||||
sc DELETE ArmouryCrateControlInterface
|
||||
|
||||
@@ -1,32 +1,28 @@
|
||||
|
||||
# [G-Helper](https://github.com/seerge/g-helper)
|
||||
# [G-Helper (GHelper)](https://github.com/seerge/g-helper)
|
||||
|
||||
[](https://GitHub.com/seerge/g-helper/releases/) [](https://GitHub.com/seerge/g-helper/releases/) [](https://GitHub.com/seerge/g-helper/stargazers/)
|
||||
[](https://GitHub.com/seerge/g-helper/releases/) [](https://GitHub.com/seerge/g-helper/releases/) [](https://github.com/seerge/g-helper/blob/master/LICENSE)
|
||||
[](https://GitHub.com/seerge/g-helper/stargazers/)
|
||||
|
||||
## Lightweight Armoury Crate alternative for Asus laptops
|
||||
### Control tool for ROG Zephyrus G14, G15, Flow X13, Flow X16, TUF, Strix, Scar and other models
|
||||
## Open source Armory Crate alternative for Asus ROG Zephyrus G14, G15, Flow X13, Flow X16, 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.
|
||||
A small utility that allows you to do almost everything you could do with Armory Crate but without extra bloat and unnecessary services.
|
||||
|
||||
### :gift: Main advantages
|
||||
|
||||
1. Seamless and automatic GPU switching (without asking you to close all apps, etc)
|
||||
2. All performance modes can be fully customised (with fan curves and PPTs)
|
||||
2. All performance modes can be fully customized (with fan curves and PPTs)
|
||||
3. Very lightweight and consumes almost no resources, doesn't install any services. Just a single exe to run
|
||||
4. Simple and clean native UI with easy access to all settings
|
||||
|
||||
### [:floppy_disk: Download latest release](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!
|
||||
If you like this app, please star :star: it on Github and spread a word about it!
|
||||
|
||||
If you post about app - please include a link. Thanks.
|
||||
|
||||

|
||||

|
||||
|
||||
### :zap: Main features
|
||||
|
||||
1. Built-in **Performance modes**: Silent - Balanced - Turbo (with default fan curves)
|
||||
2. **GPU modes**: Eco - Standard - Ultimate - Optimized
|
||||
2. **GPU modes**: Eco -Standard - Ultimate
|
||||
3. Laptop screen refresh rate 60hz or 120hz (144hz, etc depending on the model) with display overdrive (OD)
|
||||
4. Default and custom fan profiles for every performance mode
|
||||
5. Power limits (PPT) for every performance mode
|
||||
@@ -38,18 +34,16 @@ If you post about app - please include a link. Thanks.
|
||||
11. Battery charge limit to preserve battery health
|
||||
12. Monitor CPU / GPU temperature, fan speeds and battery discharge rate
|
||||
|
||||
### :gear: Automatic switching of modes when on battery or plugged in
|
||||
### :apple: Automatic switching of modes when on battery or plugged in
|
||||
- Performance modes (app remembers last mode used on battery or when plugged)
|
||||
- Optimized GPU mode - disables dGPU on battery and enables when plugged
|
||||
- Auto Screen refresh rate (60hz on battery, 120+ hz when plugged)
|
||||
- GPU modes (eco on battery, stanard when plugged)
|
||||
- Screen refresh rate (60hz on battery, 120+ hz when plugged)
|
||||
|
||||
To keep auto switching and hotkeys working the app needs to stay in 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
|
||||
|
||||

|
||||
Modes are **same** as in Armory Crate (as they are stored in bios), including default fan curves
|
||||
|
||||
1. Silent (minimal or no fans, 70W PPT total, up to 45W PPT to CPU) + Best power efficiency setting in windows
|
||||
2. Balanced (balanced fans, 100W PPT total, up to 45W PPT to CPU) + Balanced setting in windows
|
||||
@@ -60,46 +54,20 @@ PPTs are shown for G14 2022, for other models PPTs will be different as they are
|
||||
### :video_game: GPU Modes
|
||||
|
||||
1. Eco mode : only low power integrated GPU enabled, iGPU drives built in display
|
||||
2. Standard mode (MS Hybrid) : iGPU and dGPU enabled, iGPU drives built in display
|
||||
2. Standard mode (Windows Hybrid) : iGPU and dGPU enabled, iGPU drives built in display
|
||||
3. Ultimate mode: iGPU and dGPU enabled, but dGPU drives built in display (supported only on G14 2022 model)
|
||||
4. Optimized (formerly existed as a checkbox): disables dGPU on battery (Eco) and enables when plugged (Standard)
|
||||
|
||||
## :question: FAQ
|
||||
### :question: FAQ
|
||||
|
||||
### How do I stop the Armory Crate install popup appearing every time I press the M4 / Rog key?
|
||||
Go to BIOS (F2 on boot), open Advanced Settings and disable "Armory Control Interface".
|
||||
If it still appears - delete or move somewhere following file ``C:\Windows\System32\ASUSACCI\ArmouryCrateKeyControl.exe``
|
||||
#### How do I stop Armory Crate install popup appearing every time I press M4 / Rog key?
|
||||
Go to BIOS (F2 on boot), open Advanced Settings (F8) and disable "Armory Control Intrerface"
|
||||
|
||||
### Why is Ultimate GPU mode not available on my laptop?
|
||||
#### Why Ultimate GPU mode is not available on my laptop?
|
||||
Ultimate mode is supported (by hardware) only on G14 2022 (and possibly other models from 2022+)
|
||||
|
||||
### I can't set Eco mode (disable dGPU) on my G14 2020
|
||||
Unfortunately 2020 model doesn't support that on hardware level
|
||||
|
||||
### Should I apply custom PPTs and fan profiles?
|
||||
You don't have to, it's purely optional. From my experience built in (in bios) performance modes work well. Limit your power or apply custom fan curves only if you have issues. As sooon as you click Apply in fan + power section bios will be considering fan profile as "custom"! (no matter if you modified it or not)
|
||||
|
||||
### How does G-helper control my fan speeds?
|
||||
It doesn't. Your bios does (same as in case with armoury). What G-helper can do - is (optionally) set a custom fan profile to current performance mode consisting of 8 pairs of temperature + fan speed % via same endpoint armoury seem to use.
|
||||
|
||||
### How do I change fan % to fan RPM?
|
||||
Click on them
|
||||
|
||||
### 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). In this situations G-helper won't be able to reach your GPU and get readings
|
||||
|
||||
### It says, that app is already running
|
||||
Please check system tray for a (G) icon. By default windows is keen to hide all icons, so you may need to click ^ to see them all. I would advise to right click on Task Bar select Task Bar Settings -> Other System Tray icons -> Mark G-Helper to be always ON.
|
||||
|
||||
### App doesn't start / or crashes, what should I do ?
|
||||
#### App doesn't start / or crashes, what should I do ?
|
||||
Open "Event Viewer" from 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?
|
||||
Sure, you can! The only problem is that MyASUS may override battery charge limit that you set before. My advice in such case would be to set same limit (i.e. 80%) in both MyASUS and G-Helper.
|
||||
|
||||
### How do I uninstall G-helper?
|
||||
G-helper is a single exe, and it doesn't install anything in the system. To remove it - you can simply delete exe :) If you have applied any custom fan profiles or PPTs - before removing I would recommend selecting your favorite performance mode (for example balanced) and clicking "Factory defaults" under Fans + Power.
|
||||
|
||||
----------------------------
|
||||
|
||||
### How to install
|
||||
@@ -108,15 +76,13 @@ G-helper is a single exe, and it doesn't install anything in the system. To remo
|
||||
2. Unzip to a folder of your choice
|
||||
3. Run **GHelper.exe**
|
||||
|
||||
### Dependencies & Requirements
|
||||
### Dependencies
|
||||
|
||||
- Microsoft [.NET7](https://dotnet.microsoft.com/en-us/download). Most probably you already have it. Otherwise you can [download it](https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/sdk-7.0.202-windows-x64-installer) from the official website.
|
||||
- App requires [.NET7](https://dotnet.microsoft.com/en-us/download) to be installed. Most probably you already have it. Otherwise you can [download it](https://dotnet.microsoft.com/en-us/download).
|
||||
|
||||
- [Asus System Control Interface](https://dlcdnets.asus.com/pub/ASUS/nb/Image/CustomComponent/ASUSSystemControlInterfaceV3/ASUSSystemControlInterfaceV3.exe). If you have or had MyASUS app installed this "driver" probably still in place (even after MyASUS uninstalls). Alternatively - you can download and install it, and later disable / remove unnecessary services by running [this bat file](https://raw.githubusercontent.com/seerge/g-helper/main/debloat.bat) as admin.
|
||||
- I recommend keeping "Asus Optimization Service" running, as it keeps basic laptop hotkeys such as screen or keyboard brightness adjustment working. If you have (or had) MyASUS app installed, that service is most probably still up and running even after MyASUS uninstalls. It's part of [Asus System Control Interface](https://www.asus.com/support/FAQ/1047338/). You can install it, and later disable / remove unnecessary services by running [this bat file](https://raw.githubusercontent.com/seerge/g-helper/main/debloat.bat) as admin.
|
||||
|
||||
- I recommend keeping "Asus Optimization Service" running, as it keeps basic laptop hotkeys such as screen or keyboard brightness adjustment working.
|
||||
|
||||
- It's not recommended to use an app in combination with Armoury Crate services, cause they adjust the same settings. You can [uninstall it using it's own uninstall tool](https://dlcdnets.asus.com/pub/ASUS/mb/14Utilities/Armoury_Crate_Uninstall_Tool.zip?model=armoury%20crate). Just in case, you can always install it back later.
|
||||
- It's not recommended to use an app in combination with Armory Crate, cause they adjust the same settings. You can [uninstall it using it's own uninstall tool](https://dlcdnets.asus.com/pub/ASUS/mb/14Utilities/Armoury_Crate_Uninstall_Tool.zip?model=armoury%20crate). Just in case, you can always install it back later.
|
||||
|
||||
Note: Doesn't need administrator privileges to run!
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.3 MiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.2 MiB After Width: | Height: | Size: 3.6 MiB |
Reference in New Issue
Block a user