mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
43c6def162 | ||
|
|
306697f026 | ||
|
|
c5a32cc9d5 | ||
|
|
51acd9a612 | ||
|
|
457a37049c | ||
|
|
6d2cece4f2 | ||
|
|
265611009c | ||
|
|
2714b6dca7 | ||
|
|
f6de5eba64 | ||
|
|
13f7c81689 | ||
|
|
8c0d84b65b | ||
|
|
4e6fa6d9b0 | ||
|
|
be133cd238 |
10
ASUSWmi.cs
10
ASUSWmi.cs
@@ -42,6 +42,15 @@ public class ASUSWmi
|
|||||||
public const int GPUModeUltimate = 2;
|
public const int GPUModeUltimate = 2;
|
||||||
|
|
||||||
|
|
||||||
|
public const int MaxTotal = 150;
|
||||||
|
public const int MinTotal = 15;
|
||||||
|
public const int DefaultTotal = 125;
|
||||||
|
|
||||||
|
public const int MaxCPU = 90;
|
||||||
|
public const int MinCPU = 15;
|
||||||
|
public const int DefaultCPU = 80;
|
||||||
|
|
||||||
|
|
||||||
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
|
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
|
||||||
private static extern IntPtr CreateFile(
|
private static extern IntPtr CreateFile(
|
||||||
string lpFileName,
|
string lpFileName,
|
||||||
@@ -200,7 +209,6 @@ public class ASUSWmi
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void SubscribeToEvents(Action<object, EventArrivedEventArgs> EventHandler)
|
public void SubscribeToEvents(Action<object, EventArrivedEventArgs> EventHandler)
|
||||||
{
|
{
|
||||||
ManagementEventWatcher watcher = new ManagementEventWatcher();
|
ManagementEventWatcher watcher = new ManagementEventWatcher();
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
using Starlight.Communication;
|
using Starlight.Communication;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Management;
|
||||||
|
|
||||||
namespace Starlight.AnimeMatrix
|
namespace Starlight.AnimeMatrix
|
||||||
{
|
{
|
||||||
@@ -70,16 +71,45 @@ namespace Starlight.AnimeMatrix
|
|||||||
private const int UpdatePageLength = 0x0278;
|
private const int UpdatePageLength = 0x0278;
|
||||||
|
|
||||||
public int LedCount => 1450;
|
public int LedCount => 1450;
|
||||||
public int Rows => 61;
|
|
||||||
|
|
||||||
private byte[] _displayBuffer = new byte[UpdatePageLength * 3];
|
private byte[] _displayBuffer = new byte[UpdatePageLength * 3];
|
||||||
private List<byte[]> frames = new List<byte[]>();
|
private List<byte[]> frames = new List<byte[]>();
|
||||||
|
|
||||||
|
private int pages = 3;
|
||||||
|
|
||||||
|
public int MaxColumns = 34;
|
||||||
|
public int MaxRows = 61;
|
||||||
|
|
||||||
|
public int FullRows = 11;
|
||||||
|
|
||||||
private int frameIndex = 0;
|
private int frameIndex = 0;
|
||||||
|
|
||||||
public AnimeMatrixDevice()
|
public AnimeMatrixDevice()
|
||||||
: base(0x0B05, 0x193B, 640)
|
: base(0x0B05, 0x193B, 640)
|
||||||
{
|
{
|
||||||
|
string model = GetModel();
|
||||||
|
Debug.WriteLine(model);
|
||||||
|
if (model is not null && model.Contains("401"))
|
||||||
|
{
|
||||||
|
pages = 2;
|
||||||
|
|
||||||
|
FullRows = 6;
|
||||||
|
MaxColumns = 33;
|
||||||
|
MaxRows = 55;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public string GetModel()
|
||||||
|
{
|
||||||
|
using (var searcher = new ManagementObjectSearcher(@"Select * from Win32_ComputerSystem"))
|
||||||
|
{
|
||||||
|
foreach (var process in searcher.Get())
|
||||||
|
return process["Model"].ToString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] GetBuffer()
|
public byte[] GetBuffer()
|
||||||
@@ -115,12 +145,12 @@ namespace Starlight.AnimeMatrix
|
|||||||
|
|
||||||
public int EmptyColumns(int row)
|
public int EmptyColumns(int row)
|
||||||
{
|
{
|
||||||
return (int)Math.Ceiling(Math.Max(0, row - 11) / 2.0);
|
return (int)Math.Ceiling(Math.Max(0, row - FullRows) / 2.0);
|
||||||
}
|
}
|
||||||
public int Columns(int row)
|
public int Columns(int row)
|
||||||
{
|
{
|
||||||
EnsureRowInRange(row);
|
EnsureRowInRange(row);
|
||||||
return 34 - EmptyColumns(row);
|
return MaxColumns - EmptyColumns(row);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int RowToLinearAddress(int row)
|
public int RowToLinearAddress(int row)
|
||||||
@@ -183,6 +213,7 @@ namespace Starlight.AnimeMatrix
|
|||||||
|
|
||||||
public void Present()
|
public void Present()
|
||||||
{
|
{
|
||||||
|
|
||||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
||||||
.AppendData(BitConverter.GetBytes((ushort)(UpdatePageLength * 0 + 1)))
|
.AppendData(BitConverter.GetBytes((ushort)(UpdatePageLength * 0 + 1)))
|
||||||
.AppendData(BitConverter.GetBytes((ushort)UpdatePageLength))
|
.AppendData(BitConverter.GetBytes((ushort)UpdatePageLength))
|
||||||
@@ -195,12 +226,13 @@ namespace Starlight.AnimeMatrix
|
|||||||
.AppendData(_displayBuffer[(UpdatePageLength * 1)..(UpdatePageLength * 2)])
|
.AppendData(_displayBuffer[(UpdatePageLength * 1)..(UpdatePageLength * 2)])
|
||||||
);
|
);
|
||||||
|
|
||||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
if (pages > 2)
|
||||||
.AppendData(BitConverter.GetBytes((ushort)(UpdatePageLength * 2 + 1)))
|
Set(Packet<AnimeMatrixPacket>(0xC0, 0x02)
|
||||||
.AppendData(BitConverter.GetBytes((ushort)(LedCount - UpdatePageLength * 2)))
|
.AppendData(BitConverter.GetBytes((ushort)(UpdatePageLength * 2 + 1)))
|
||||||
.AppendData(
|
.AppendData(BitConverter.GetBytes((ushort)(LedCount - UpdatePageLength * 2)))
|
||||||
_displayBuffer[(UpdatePageLength * 2)..(UpdatePageLength * 2 + (LedCount - UpdatePageLength * 2))])
|
.AppendData(
|
||||||
);
|
_displayBuffer[(UpdatePageLength * 2)..(UpdatePageLength * 2 + (LedCount - UpdatePageLength * 2))])
|
||||||
|
);
|
||||||
|
|
||||||
Set(Packet<AnimeMatrixPacket>(0xC0, 0x03));
|
Set(Packet<AnimeMatrixPacket>(0xC0, 0x03));
|
||||||
}
|
}
|
||||||
@@ -241,8 +273,8 @@ namespace Starlight.AnimeMatrix
|
|||||||
public void GenerateFrame(Image image)
|
public void GenerateFrame(Image image)
|
||||||
{
|
{
|
||||||
|
|
||||||
int width = 34 * 3;
|
int width = MaxColumns * 3;
|
||||||
int height = 61;
|
int height = MaxRows;
|
||||||
float scale;
|
float scale;
|
||||||
|
|
||||||
Bitmap canvas = new Bitmap(width, height);
|
Bitmap canvas = new Bitmap(width, height);
|
||||||
@@ -259,7 +291,7 @@ namespace Starlight.AnimeMatrix
|
|||||||
|
|
||||||
graph.DrawImage(image, ((int)width - scaleWidth), ((int)height - scaleHeight) / 2, scaleWidth, scaleHeight);
|
graph.DrawImage(image, ((int)width - scaleWidth), ((int)height - scaleHeight) / 2, scaleWidth, scaleHeight);
|
||||||
|
|
||||||
Bitmap bmp = new Bitmap(canvas, 34, 61);
|
Bitmap bmp = new Bitmap(canvas, MaxColumns, MaxRows);
|
||||||
|
|
||||||
for (int y = 0; y < bmp.Height; y++)
|
for (int y = 0; y < bmp.Height; y++)
|
||||||
{
|
{
|
||||||
@@ -275,9 +307,9 @@ namespace Starlight.AnimeMatrix
|
|||||||
|
|
||||||
private void EnsureRowInRange(int row)
|
private void EnsureRowInRange(int row)
|
||||||
{
|
{
|
||||||
if (row < 0 || row >= Rows)
|
if (row < 0 || row >= MaxRows)
|
||||||
{
|
{
|
||||||
throw new IndexOutOfRangeException($"Y-coordinate should fall in range of [0, {Rows - 1}].");
|
throw new IndexOutOfRangeException($"Y-coordinate should fall in range of [0, {MaxRows - 1}].");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
16
AppConfig.cs
16
AppConfig.cs
@@ -44,8 +44,9 @@ public class AppConfig
|
|||||||
File.WriteAllText(configFile, jsonString);
|
File.WriteAllText(configFile, jsonString);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getConfig(string name)
|
public int getConfig(string name, bool performance = false)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (config.ContainsKey(name))
|
if (config.ContainsKey(name))
|
||||||
return int.Parse(config[name].ToString());
|
return int.Parse(config[name].ToString());
|
||||||
else return -1;
|
else return -1;
|
||||||
@@ -141,4 +142,17 @@ public class AppConfig
|
|||||||
return curve;
|
return curve;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getConfigPerf(string name)
|
||||||
|
{
|
||||||
|
int mode = getConfig("performance_mode");
|
||||||
|
return getConfig(name + "_" + mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setConfigPerf(string name, int value)
|
||||||
|
{
|
||||||
|
int mode = getConfig("performance_mode");
|
||||||
|
setConfig(name + "_" + mode, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
// Source thanks to https://github.com/vddCore/Starlight :)
|
// Source thanks to https://github.com/vddCore/Starlight :)
|
||||||
|
|
||||||
using Starlight.Communication.Platform;
|
using Starlight.Communication.Platform;
|
||||||
|
using System.Configuration;
|
||||||
|
|
||||||
namespace Starlight.Communication
|
namespace Starlight.Communication
|
||||||
{
|
{
|
||||||
@@ -8,9 +9,21 @@ namespace Starlight.Communication
|
|||||||
{
|
{
|
||||||
private static UsbProvider _usbProvider;
|
private static UsbProvider _usbProvider;
|
||||||
|
|
||||||
|
private static ushort _vendorId;
|
||||||
|
private static ushort _productId;
|
||||||
|
private static int _maxFeatureReportLength;
|
||||||
|
|
||||||
protected Device(ushort vendorId, ushort productId, int maxFeatureReportLength)
|
protected Device(ushort vendorId, ushort productId, int maxFeatureReportLength)
|
||||||
{
|
{
|
||||||
_usbProvider = new WindowsUsbProvider(vendorId, productId, maxFeatureReportLength);
|
_vendorId = vendorId;
|
||||||
|
_productId = productId;
|
||||||
|
_maxFeatureReportLength = maxFeatureReportLength;
|
||||||
|
SetProvider();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetProvider()
|
||||||
|
{
|
||||||
|
_usbProvider = new WindowsUsbProvider(_vendorId, _productId, _maxFeatureReportLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected T Packet<T>(params byte[] command) where T : Packet
|
protected T Packet<T>(params byte[] command) where T : Packet
|
||||||
|
|||||||
304
Fans.Designer.cs
generated
304
Fans.Designer.cs
generated
@@ -28,13 +28,20 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
private void InitializeComponent()
|
private void InitializeComponent()
|
||||||
{
|
{
|
||||||
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea3 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
|
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
|
||||||
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea4 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
|
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
|
||||||
chartCPU = new System.Windows.Forms.DataVisualization.Charting.Chart();
|
panelFans = new Panel();
|
||||||
buttonApply = new Button();
|
checkBoost = new CheckBox();
|
||||||
buttonReset = new Button();
|
labelFans = new Label();
|
||||||
|
checkAuto = new CheckBox();
|
||||||
chartGPU = new System.Windows.Forms.DataVisualization.Charting.Chart();
|
chartGPU = new System.Windows.Forms.DataVisualization.Charting.Chart();
|
||||||
groupBox1 = new GroupBox();
|
buttonReset = new Button();
|
||||||
|
buttonApply = new Button();
|
||||||
|
chartCPU = new System.Windows.Forms.DataVisualization.Charting.Chart();
|
||||||
|
panelPower = new Panel();
|
||||||
|
labelPowerLimits = new Label();
|
||||||
|
checkApplyPower = new CheckBox();
|
||||||
|
buttonApplyPower = new Button();
|
||||||
panelCPU = new Panel();
|
panelCPU = new Panel();
|
||||||
labelCPU = new Label();
|
labelCPU = new Label();
|
||||||
label2 = new Label();
|
label2 = new Label();
|
||||||
@@ -46,11 +53,10 @@
|
|||||||
labelApplied = new Label();
|
labelApplied = new Label();
|
||||||
pictureFine = new PictureBox();
|
pictureFine = new PictureBox();
|
||||||
labelInfo = new Label();
|
labelInfo = new Label();
|
||||||
buttonApplyPower = new Button();
|
panelFans.SuspendLayout();
|
||||||
checkAuto = new CheckBox();
|
|
||||||
((System.ComponentModel.ISupportInitialize)chartCPU).BeginInit();
|
|
||||||
((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit();
|
((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit();
|
||||||
groupBox1.SuspendLayout();
|
((System.ComponentModel.ISupportInitialize)chartCPU).BeginInit();
|
||||||
|
panelPower.SuspendLayout();
|
||||||
panelCPU.SuspendLayout();
|
panelCPU.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)trackCPU).BeginInit();
|
((System.ComponentModel.ISupportInitialize)trackCPU).BeginInit();
|
||||||
panelTotal.SuspendLayout();
|
panelTotal.SuspendLayout();
|
||||||
@@ -58,73 +64,163 @@
|
|||||||
((System.ComponentModel.ISupportInitialize)pictureFine).BeginInit();
|
((System.ComponentModel.ISupportInitialize)pictureFine).BeginInit();
|
||||||
SuspendLayout();
|
SuspendLayout();
|
||||||
//
|
//
|
||||||
// chartCPU
|
// panelFans
|
||||||
//
|
//
|
||||||
chartArea3.Name = "ChartArea1";
|
panelFans.AutoSize = true;
|
||||||
chartCPU.ChartAreas.Add(chartArea3);
|
panelFans.Controls.Add(checkBoost);
|
||||||
chartCPU.Location = new Point(390, 28);
|
panelFans.Controls.Add(labelFans);
|
||||||
chartCPU.Margin = new Padding(4, 2, 4, 2);
|
panelFans.Controls.Add(checkAuto);
|
||||||
chartCPU.Name = "chartCPU";
|
panelFans.Controls.Add(chartGPU);
|
||||||
chartCPU.Size = new Size(832, 436);
|
panelFans.Controls.Add(buttonReset);
|
||||||
chartCPU.TabIndex = 0;
|
panelFans.Controls.Add(buttonApply);
|
||||||
chartCPU.Text = "chartCPU";
|
panelFans.Controls.Add(chartCPU);
|
||||||
|
panelFans.Dock = DockStyle.Left;
|
||||||
|
panelFans.Location = new Point(363, 0);
|
||||||
|
panelFans.Margin = new Padding(10);
|
||||||
|
panelFans.MinimumSize = new Size(872, 1089);
|
||||||
|
panelFans.Name = "panelFans";
|
||||||
|
panelFans.Padding = new Padding(10);
|
||||||
|
panelFans.Size = new Size(872, 1089);
|
||||||
|
panelFans.TabIndex = 12;
|
||||||
//
|
//
|
||||||
// buttonApply
|
// checkBoost
|
||||||
//
|
//
|
||||||
buttonApply.Location = new Point(946, 952);
|
checkBoost.AutoSize = true;
|
||||||
buttonApply.Margin = new Padding(4, 2, 4, 2);
|
checkBoost.ForeColor = SystemColors.ControlText;
|
||||||
buttonApply.Name = "buttonApply";
|
checkBoost.Location = new Point(512, 15);
|
||||||
buttonApply.Size = new Size(274, 44);
|
checkBoost.Margin = new Padding(4, 2, 4, 2);
|
||||||
buttonApply.TabIndex = 1;
|
checkBoost.Name = "checkBoost";
|
||||||
buttonApply.Text = "Apply Fan Curve";
|
checkBoost.Size = new Size(320, 36);
|
||||||
buttonApply.UseVisualStyleBackColor = true;
|
checkBoost.TabIndex = 35;
|
||||||
|
checkBoost.Text = "CPU Turbo Boost enabled";
|
||||||
|
checkBoost.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// buttonReset
|
// labelFans
|
||||||
//
|
//
|
||||||
buttonReset.Location = new Point(390, 952);
|
labelFans.AutoSize = true;
|
||||||
buttonReset.Margin = new Padding(4, 2, 4, 2);
|
labelFans.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||||
buttonReset.Name = "buttonReset";
|
labelFans.Location = new Point(24, 15);
|
||||||
buttonReset.Size = new Size(274, 44);
|
labelFans.Name = "labelFans";
|
||||||
buttonReset.TabIndex = 2;
|
labelFans.Size = new Size(138, 32);
|
||||||
buttonReset.Text = "Factory Defaults";
|
labelFans.TabIndex = 28;
|
||||||
buttonReset.UseVisualStyleBackColor = true;
|
labelFans.Text = "Fan Curves";
|
||||||
|
//
|
||||||
|
// checkAuto
|
||||||
|
//
|
||||||
|
checkAuto.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
|
checkAuto.AutoSize = true;
|
||||||
|
checkAuto.Location = new Point(411, 1030);
|
||||||
|
checkAuto.Margin = new Padding(4, 2, 4, 2);
|
||||||
|
checkAuto.Name = "checkAuto";
|
||||||
|
checkAuto.Size = new Size(165, 36);
|
||||||
|
checkAuto.TabIndex = 17;
|
||||||
|
checkAuto.Text = "Auto Apply";
|
||||||
|
checkAuto.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// chartGPU
|
// chartGPU
|
||||||
//
|
//
|
||||||
chartArea4.Name = "ChartArea1";
|
chartGPU.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
chartGPU.ChartAreas.Add(chartArea4);
|
chartArea1.Name = "ChartArea1";
|
||||||
chartGPU.Location = new Point(390, 480);
|
chartGPU.ChartAreas.Add(chartArea1);
|
||||||
|
chartGPU.Location = new Point(22, 547);
|
||||||
chartGPU.Margin = new Padding(4, 2, 4, 2);
|
chartGPU.Margin = new Padding(4, 2, 4, 2);
|
||||||
chartGPU.Name = "chartGPU";
|
chartGPU.Name = "chartGPU";
|
||||||
chartGPU.Size = new Size(832, 450);
|
chartGPU.Size = new Size(810, 460);
|
||||||
chartGPU.TabIndex = 3;
|
chartGPU.TabIndex = 16;
|
||||||
chartGPU.Text = "chart1";
|
chartGPU.Text = "chart1";
|
||||||
//
|
//
|
||||||
// groupBox1
|
// buttonReset
|
||||||
//
|
//
|
||||||
groupBox1.Controls.Add(panelCPU);
|
buttonReset.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
|
||||||
groupBox1.Controls.Add(panelTotal);
|
buttonReset.Location = new Point(22, 1025);
|
||||||
groupBox1.Controls.Add(labelApplied);
|
buttonReset.Margin = new Padding(4, 2, 4, 2);
|
||||||
groupBox1.Controls.Add(pictureFine);
|
buttonReset.Name = "buttonReset";
|
||||||
groupBox1.Controls.Add(labelInfo);
|
buttonReset.Size = new Size(231, 44);
|
||||||
groupBox1.Location = new Point(12, 12);
|
buttonReset.TabIndex = 15;
|
||||||
groupBox1.Margin = new Padding(4, 2, 4, 2);
|
buttonReset.Text = "Factory Defaults";
|
||||||
groupBox1.Name = "groupBox1";
|
buttonReset.UseVisualStyleBackColor = true;
|
||||||
groupBox1.Padding = new Padding(6, 4, 6, 4);
|
//
|
||||||
groupBox1.Size = new Size(356, 918);
|
// buttonApply
|
||||||
groupBox1.TabIndex = 4;
|
//
|
||||||
groupBox1.TabStop = false;
|
buttonApply.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
groupBox1.Text = "Power Limits (PPT)";
|
buttonApply.Location = new Point(584, 1025);
|
||||||
|
buttonApply.Margin = new Padding(4, 2, 4, 2);
|
||||||
|
buttonApply.Name = "buttonApply";
|
||||||
|
buttonApply.Size = new Size(248, 44);
|
||||||
|
buttonApply.TabIndex = 14;
|
||||||
|
buttonApply.Text = "Apply Fan Curve";
|
||||||
|
buttonApply.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// chartCPU
|
||||||
|
//
|
||||||
|
chartCPU.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
chartArea2.Name = "ChartArea1";
|
||||||
|
chartCPU.ChartAreas.Add(chartArea2);
|
||||||
|
chartCPU.Location = new Point(22, 66);
|
||||||
|
chartCPU.Margin = new Padding(10);
|
||||||
|
chartCPU.Name = "chartCPU";
|
||||||
|
chartCPU.Size = new Size(810, 460);
|
||||||
|
chartCPU.TabIndex = 13;
|
||||||
|
chartCPU.Text = "chartCPU";
|
||||||
|
//
|
||||||
|
// panelPower
|
||||||
|
//
|
||||||
|
panelPower.Controls.Add(labelPowerLimits);
|
||||||
|
panelPower.Controls.Add(checkApplyPower);
|
||||||
|
panelPower.Controls.Add(buttonApplyPower);
|
||||||
|
panelPower.Controls.Add(panelCPU);
|
||||||
|
panelPower.Controls.Add(panelTotal);
|
||||||
|
panelPower.Controls.Add(labelApplied);
|
||||||
|
panelPower.Controls.Add(pictureFine);
|
||||||
|
panelPower.Controls.Add(labelInfo);
|
||||||
|
panelPower.Dock = DockStyle.Left;
|
||||||
|
panelPower.Location = new Point(0, 0);
|
||||||
|
panelPower.Name = "panelPower";
|
||||||
|
panelPower.Size = new Size(363, 1089);
|
||||||
|
panelPower.TabIndex = 13;
|
||||||
|
//
|
||||||
|
// labelPowerLimits
|
||||||
|
//
|
||||||
|
labelPowerLimits.AutoSize = true;
|
||||||
|
labelPowerLimits.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
|
||||||
|
labelPowerLimits.Location = new Point(23, 15);
|
||||||
|
labelPowerLimits.Name = "labelPowerLimits";
|
||||||
|
labelPowerLimits.Size = new Size(229, 32);
|
||||||
|
labelPowerLimits.TabIndex = 26;
|
||||||
|
labelPowerLimits.Text = "Power Limits (PPT)";
|
||||||
|
//
|
||||||
|
// checkApplyPower
|
||||||
|
//
|
||||||
|
checkApplyPower.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
|
||||||
|
checkApplyPower.AutoSize = true;
|
||||||
|
checkApplyPower.Location = new Point(21, 982);
|
||||||
|
checkApplyPower.Margin = new Padding(4, 2, 4, 2);
|
||||||
|
checkApplyPower.Name = "checkApplyPower";
|
||||||
|
checkApplyPower.Size = new Size(165, 36);
|
||||||
|
checkApplyPower.TabIndex = 25;
|
||||||
|
checkApplyPower.Text = "Auto Apply";
|
||||||
|
checkApplyPower.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// buttonApplyPower
|
||||||
|
//
|
||||||
|
buttonApplyPower.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
|
buttonApplyPower.Location = new Point(17, 1025);
|
||||||
|
buttonApplyPower.Margin = new Padding(4, 2, 4, 2);
|
||||||
|
buttonApplyPower.Name = "buttonApplyPower";
|
||||||
|
buttonApplyPower.Size = new Size(321, 44);
|
||||||
|
buttonApplyPower.TabIndex = 24;
|
||||||
|
buttonApplyPower.Text = "Apply Power Limits";
|
||||||
|
buttonApplyPower.UseVisualStyleBackColor = true;
|
||||||
//
|
//
|
||||||
// panelCPU
|
// panelCPU
|
||||||
//
|
//
|
||||||
panelCPU.Controls.Add(labelCPU);
|
panelCPU.Controls.Add(labelCPU);
|
||||||
panelCPU.Controls.Add(label2);
|
panelCPU.Controls.Add(label2);
|
||||||
panelCPU.Controls.Add(trackCPU);
|
panelCPU.Controls.Add(trackCPU);
|
||||||
panelCPU.Location = new Point(186, 72);
|
panelCPU.Location = new Point(184, 89);
|
||||||
panelCPU.Name = "panelCPU";
|
panelCPU.Name = "panelCPU";
|
||||||
panelCPU.Size = new Size(160, 510);
|
panelCPU.Size = new Size(160, 510);
|
||||||
panelCPU.TabIndex = 15;
|
panelCPU.TabIndex = 23;
|
||||||
//
|
//
|
||||||
// labelCPU
|
// labelCPU
|
||||||
//
|
//
|
||||||
@@ -167,10 +263,10 @@
|
|||||||
panelTotal.Controls.Add(labelTotal);
|
panelTotal.Controls.Add(labelTotal);
|
||||||
panelTotal.Controls.Add(label1);
|
panelTotal.Controls.Add(label1);
|
||||||
panelTotal.Controls.Add(trackTotal);
|
panelTotal.Controls.Add(trackTotal);
|
||||||
panelTotal.Location = new Point(8, 72);
|
panelTotal.Location = new Point(17, 89);
|
||||||
panelTotal.Name = "panelTotal";
|
panelTotal.Name = "panelTotal";
|
||||||
panelTotal.Size = new Size(160, 511);
|
panelTotal.Size = new Size(160, 511);
|
||||||
panelTotal.TabIndex = 14;
|
panelTotal.TabIndex = 22;
|
||||||
//
|
//
|
||||||
// labelTotal
|
// labelTotal
|
||||||
//
|
//
|
||||||
@@ -213,11 +309,11 @@
|
|||||||
//
|
//
|
||||||
labelApplied.AutoSize = true;
|
labelApplied.AutoSize = true;
|
||||||
labelApplied.ForeColor = Color.Tomato;
|
labelApplied.ForeColor = Color.Tomato;
|
||||||
labelApplied.Location = new Point(13, 36);
|
labelApplied.Location = new Point(23, 51);
|
||||||
labelApplied.Margin = new Padding(4, 0, 4, 0);
|
labelApplied.Margin = new Padding(4, 0, 4, 0);
|
||||||
labelApplied.Name = "labelApplied";
|
labelApplied.Name = "labelApplied";
|
||||||
labelApplied.Size = new Size(143, 32);
|
labelApplied.Size = new Size(143, 32);
|
||||||
labelApplied.TabIndex = 13;
|
labelApplied.TabIndex = 21;
|
||||||
labelApplied.Text = "Not Applied";
|
labelApplied.Text = "Not Applied";
|
||||||
//
|
//
|
||||||
// pictureFine
|
// pictureFine
|
||||||
@@ -225,73 +321,49 @@
|
|||||||
pictureFine.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
pictureFine.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
|
||||||
pictureFine.BackgroundImageLayout = ImageLayout.Zoom;
|
pictureFine.BackgroundImageLayout = ImageLayout.Zoom;
|
||||||
pictureFine.Image = Properties.Resources.everything_is_fine_itsfine;
|
pictureFine.Image = Properties.Resources.everything_is_fine_itsfine;
|
||||||
pictureFine.Location = new Point(10, 682);
|
pictureFine.Location = new Point(17, 671);
|
||||||
pictureFine.Margin = new Padding(4, 2, 4, 2);
|
pictureFine.Margin = new Padding(4, 2, 4, 2);
|
||||||
pictureFine.Name = "pictureFine";
|
pictureFine.Name = "pictureFine";
|
||||||
pictureFine.Size = new Size(336, 226);
|
pictureFine.Size = new Size(327, 254);
|
||||||
pictureFine.SizeMode = PictureBoxSizeMode.Zoom;
|
pictureFine.SizeMode = PictureBoxSizeMode.Zoom;
|
||||||
pictureFine.TabIndex = 12;
|
pictureFine.TabIndex = 20;
|
||||||
pictureFine.TabStop = false;
|
pictureFine.TabStop = false;
|
||||||
pictureFine.Visible = false;
|
pictureFine.Visible = false;
|
||||||
//
|
//
|
||||||
// labelInfo
|
// labelInfo
|
||||||
//
|
//
|
||||||
labelInfo.AutoSize = true;
|
labelInfo.Location = new Point(17, 603);
|
||||||
labelInfo.Dock = DockStyle.Bottom;
|
|
||||||
labelInfo.Location = new Point(6, 882);
|
|
||||||
labelInfo.Margin = new Padding(4, 0, 4, 0);
|
labelInfo.Margin = new Padding(4, 0, 4, 0);
|
||||||
labelInfo.Name = "labelInfo";
|
labelInfo.Name = "labelInfo";
|
||||||
labelInfo.Size = new Size(65, 32);
|
labelInfo.Size = new Size(327, 330);
|
||||||
labelInfo.TabIndex = 11;
|
labelInfo.TabIndex = 19;
|
||||||
labelInfo.Text = "label";
|
labelInfo.Text = "label";
|
||||||
//
|
//
|
||||||
// buttonApplyPower
|
|
||||||
//
|
|
||||||
buttonApplyPower.Location = new Point(16, 952);
|
|
||||||
buttonApplyPower.Margin = new Padding(4, 2, 4, 2);
|
|
||||||
buttonApplyPower.Name = "buttonApplyPower";
|
|
||||||
buttonApplyPower.Size = new Size(352, 44);
|
|
||||||
buttonApplyPower.TabIndex = 11;
|
|
||||||
buttonApplyPower.Text = "Apply Power Limits";
|
|
||||||
buttonApplyPower.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// checkAuto
|
|
||||||
//
|
|
||||||
checkAuto.AutoSize = true;
|
|
||||||
checkAuto.Location = new Point(772, 958);
|
|
||||||
checkAuto.Margin = new Padding(4, 2, 4, 2);
|
|
||||||
checkAuto.Name = "checkAuto";
|
|
||||||
checkAuto.Size = new Size(165, 36);
|
|
||||||
checkAuto.TabIndex = 12;
|
|
||||||
checkAuto.Text = "Auto Apply";
|
|
||||||
checkAuto.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// Fans
|
// Fans
|
||||||
//
|
//
|
||||||
AutoScaleDimensions = new SizeF(192F, 192F);
|
AutoScaleDimensions = new SizeF(192F, 192F);
|
||||||
AutoScaleMode = AutoScaleMode.Dpi;
|
AutoScaleMode = AutoScaleMode.Dpi;
|
||||||
AutoSize = true;
|
AutoSize = true;
|
||||||
ClientSize = new Size(1242, 1020);
|
AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||||
Controls.Add(checkAuto);
|
ClientSize = new Size(1220, 1089);
|
||||||
Controls.Add(buttonApplyPower);
|
Controls.Add(panelFans);
|
||||||
Controls.Add(groupBox1);
|
Controls.Add(panelPower);
|
||||||
Controls.Add(chartGPU);
|
|
||||||
Controls.Add(buttonReset);
|
|
||||||
Controls.Add(buttonApply);
|
|
||||||
Controls.Add(chartCPU);
|
|
||||||
Margin = new Padding(4, 2, 4, 2);
|
Margin = new Padding(4, 2, 4, 2);
|
||||||
MaximizeBox = false;
|
MaximizeBox = false;
|
||||||
MdiChildrenMinimizedAnchorBottom = false;
|
MdiChildrenMinimizedAnchorBottom = false;
|
||||||
MinimizeBox = false;
|
MinimizeBox = false;
|
||||||
|
MinimumSize = new Size(0, 1160);
|
||||||
Name = "Fans";
|
Name = "Fans";
|
||||||
ShowIcon = false;
|
ShowIcon = false;
|
||||||
ShowInTaskbar = false;
|
ShowInTaskbar = false;
|
||||||
StartPosition = FormStartPosition.CenterScreen;
|
StartPosition = FormStartPosition.CenterScreen;
|
||||||
Text = "Fans and Power";
|
Text = "Fans and Power";
|
||||||
((System.ComponentModel.ISupportInitialize)chartCPU).EndInit();
|
panelFans.ResumeLayout(false);
|
||||||
|
panelFans.PerformLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)chartGPU).EndInit();
|
((System.ComponentModel.ISupportInitialize)chartGPU).EndInit();
|
||||||
groupBox1.ResumeLayout(false);
|
((System.ComponentModel.ISupportInitialize)chartCPU).EndInit();
|
||||||
groupBox1.PerformLayout();
|
panelPower.ResumeLayout(false);
|
||||||
|
panelPower.PerformLayout();
|
||||||
panelCPU.ResumeLayout(false);
|
panelCPU.ResumeLayout(false);
|
||||||
panelCPU.PerformLayout();
|
panelCPU.PerformLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)trackCPU).EndInit();
|
((System.ComponentModel.ISupportInitialize)trackCPU).EndInit();
|
||||||
@@ -304,24 +376,28 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
private Panel panelFans;
|
||||||
private System.Windows.Forms.DataVisualization.Charting.Chart chartCPU;
|
|
||||||
private Button buttonApply;
|
|
||||||
private Button buttonReset;
|
|
||||||
private System.Windows.Forms.DataVisualization.Charting.Chart chartGPU;
|
|
||||||
private GroupBox groupBox1;
|
|
||||||
private Button buttonApplyPower;
|
|
||||||
private Label labelInfo;
|
|
||||||
private PictureBox pictureFine;
|
|
||||||
private Label labelApplied;
|
|
||||||
private CheckBox checkAuto;
|
private CheckBox checkAuto;
|
||||||
private Panel panelTotal;
|
private System.Windows.Forms.DataVisualization.Charting.Chart chartGPU;
|
||||||
private Label labelTotal;
|
private Button buttonReset;
|
||||||
private Label label1;
|
private Button buttonApply;
|
||||||
private TrackBar trackTotal;
|
private System.Windows.Forms.DataVisualization.Charting.Chart chartCPU;
|
||||||
|
private Panel panelPower;
|
||||||
|
private CheckBox checkApplyPower;
|
||||||
|
private Button buttonApplyPower;
|
||||||
private Panel panelCPU;
|
private Panel panelCPU;
|
||||||
private Label labelCPU;
|
private Label labelCPU;
|
||||||
private Label label2;
|
private Label label2;
|
||||||
private TrackBar trackCPU;
|
private TrackBar trackCPU;
|
||||||
|
private Panel panelTotal;
|
||||||
|
private Label labelTotal;
|
||||||
|
private Label label1;
|
||||||
|
private TrackBar trackTotal;
|
||||||
|
private Label labelApplied;
|
||||||
|
private PictureBox pictureFine;
|
||||||
|
private Label labelInfo;
|
||||||
|
private Label labelPowerLimits;
|
||||||
|
private Label labelFans;
|
||||||
|
private CheckBox checkBoost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
141
Fans.cs
141
Fans.cs
@@ -11,14 +11,6 @@ namespace GHelper
|
|||||||
Series seriesCPU;
|
Series seriesCPU;
|
||||||
Series seriesGPU;
|
Series seriesGPU;
|
||||||
|
|
||||||
const int MaxTotal = 150;
|
|
||||||
const int MinTotal = 15;
|
|
||||||
const int DefaultTotal = 125;
|
|
||||||
|
|
||||||
const int MaxCPU = 90;
|
|
||||||
const int MinCPU = 15;
|
|
||||||
const int DefaultCPU = 80;
|
|
||||||
|
|
||||||
void SetChart(Chart chart, int device)
|
void SetChart(Chart chart, int device)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -30,7 +22,7 @@ namespace GHelper
|
|||||||
title = "CPU Fan Profile";
|
title = "CPU Fan Profile";
|
||||||
|
|
||||||
if (Program.settingsForm.perfName.Length > 0)
|
if (Program.settingsForm.perfName.Length > 0)
|
||||||
title += ": " + Program.settingsForm.perfName;
|
labelFans.Text = "Fan Profiles: " + Program.settingsForm.perfName;
|
||||||
|
|
||||||
if (chart.Titles.Count > 0)
|
if (chart.Titles.Count > 0)
|
||||||
chart.Titles[0].Text = title;
|
chart.Titles[0].Text = title;
|
||||||
@@ -91,11 +83,11 @@ namespace GHelper
|
|||||||
buttonReset.Click += ButtonReset_Click;
|
buttonReset.Click += ButtonReset_Click;
|
||||||
buttonApply.Click += ButtonApply_Click;
|
buttonApply.Click += ButtonApply_Click;
|
||||||
|
|
||||||
trackTotal.Maximum = MaxTotal;
|
trackTotal.Maximum = ASUSWmi.MaxTotal;
|
||||||
trackTotal.Minimum = MinTotal;
|
trackTotal.Minimum = ASUSWmi.MinTotal;
|
||||||
|
|
||||||
trackCPU.Maximum = MaxCPU;
|
trackCPU.Maximum = ASUSWmi.MaxCPU;
|
||||||
trackCPU.Minimum = MinCPU;
|
trackCPU.Minimum = ASUSWmi.MinCPU;
|
||||||
|
|
||||||
trackCPU.Scroll += TrackCPU_Scroll;
|
trackCPU.Scroll += TrackCPU_Scroll;
|
||||||
trackTotal.Scroll += TrackTotal_Scroll;
|
trackTotal.Scroll += TrackTotal_Scroll;
|
||||||
@@ -103,25 +95,52 @@ namespace GHelper
|
|||||||
buttonApplyPower.Click += ButtonApplyPower_Click;
|
buttonApplyPower.Click += ButtonApplyPower_Click;
|
||||||
|
|
||||||
checkAuto.Click += CheckAuto_Click;
|
checkAuto.Click += CheckAuto_Click;
|
||||||
|
checkApplyPower.Click += CheckApplyPower_Click;
|
||||||
|
|
||||||
//labelInfo.MaximumSize = new Size(280, 0);
|
//labelInfo.MaximumSize = new Size(280, 0);
|
||||||
labelInfo.Text = "Power Limits (PPT) is\nexperimental feature.\n\nValues will be applied\nonly after you click 'Apply'\nand reset after performance\nmode changes.\n\nUse carefully and\non your own risk!";
|
labelInfo.Text = "Power Limits (PPT) is\nexperimental feature.\n\nUse carefully and\non your own risk!";
|
||||||
|
|
||||||
LoadFans();
|
InitFans();
|
||||||
VisualisePower(true);
|
InitPower();
|
||||||
|
InitBoost();
|
||||||
|
|
||||||
|
checkBoost.Click += CheckBoost_Click;
|
||||||
|
|
||||||
Shown += Fans_Shown;
|
Shown += Fans_Shown;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CheckAuto_Click(object? sender, EventArgs e)
|
|
||||||
|
public void InitBoost()
|
||||||
|
{
|
||||||
|
int boost = NativeMethods.GetCPUBoost();
|
||||||
|
checkBoost.Checked = (boost > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CheckBoost_Click(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is null)
|
if (sender is null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CheckBox chk = (CheckBox)sender;
|
CheckBox chk = (CheckBox)sender;
|
||||||
|
if (chk.Checked)
|
||||||
|
NativeMethods.SetCPUBoost(2);
|
||||||
|
else
|
||||||
|
NativeMethods.SetCPUBoost(0);
|
||||||
|
}
|
||||||
|
|
||||||
Program.config.setConfig("auto_apply_" + Program.config.getConfig("performance_mode"), chk.Checked ? 1 : 0);
|
private void CheckApplyPower_Click(object? sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (sender is null) return;
|
||||||
|
CheckBox chk = (CheckBox)sender;
|
||||||
|
Program.config.setConfigPerf("auto_apply_power", chk.Checked ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CheckAuto_Click(object? sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (sender is null) return;
|
||||||
|
CheckBox chk = (CheckBox)sender;
|
||||||
|
Program.config.setConfigPerf("auto_apply", chk.Checked ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Fans_FormClosing(object? sender, FormClosingEventArgs e)
|
private void Fans_FormClosing(object? sender, FormClosingEventArgs e)
|
||||||
@@ -135,78 +154,82 @@ namespace GHelper
|
|||||||
|
|
||||||
private void ButtonApplyPower_Click(object? sender, EventArgs e)
|
private void ButtonApplyPower_Click(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
int limit_total = trackTotal.Value;
|
Program.settingsForm.SetPower();
|
||||||
int limit_cpu = trackCPU.Value;
|
ApplyLabel(true);
|
||||||
|
|
||||||
Program.config.setConfig("limit_total", limit_total);
|
|
||||||
Program.config.setConfig("limit_cpu", limit_cpu);
|
|
||||||
|
|
||||||
Program.wmi.DeviceSet(ASUSWmi.PPT_TotalA0, limit_total);
|
|
||||||
Program.wmi.DeviceSet(ASUSWmi.PPT_TotalA1, limit_total);
|
|
||||||
|
|
||||||
Program.wmi.DeviceSet(ASUSWmi.PPT_CPUB0, limit_cpu);
|
|
||||||
|
|
||||||
labelApplied.ForeColor = Color.Blue;
|
|
||||||
labelApplied.Text = "Applied";
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void VisualisePower(bool init = false)
|
public void InitPower(bool changed = false)
|
||||||
{
|
{
|
||||||
|
|
||||||
panelTotal.Visible = (Program.wmi.DeviceGet(ASUSWmi.PPT_TotalA0) >= 0);
|
panelPower.Visible = (Program.wmi.DeviceGet(ASUSWmi.PPT_TotalA0) >= 0);
|
||||||
panelCPU.Visible = (Program.wmi.DeviceGet(ASUSWmi.PPT_CPUB0) >= 0);
|
panelCPU.Visible = (Program.wmi.DeviceGet(ASUSWmi.PPT_CPUB0) >= 0);
|
||||||
|
|
||||||
int limit_total;
|
int limit_total;
|
||||||
int limit_cpu;
|
int limit_cpu;
|
||||||
|
bool apply = Program.config.getConfigPerf("auto_apply_power") == 1;
|
||||||
|
|
||||||
if (init)
|
if (changed)
|
||||||
{
|
|
||||||
limit_total = Program.config.getConfig("limit_total");
|
|
||||||
limit_cpu = Program.config.getConfig("limit_cpu");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
limit_total = trackTotal.Value;
|
limit_total = trackTotal.Value;
|
||||||
limit_cpu = trackCPU.Value;
|
limit_cpu = trackCPU.Value;
|
||||||
|
ApplyLabel(false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
limit_total = Program.config.getConfigPerf("limit_total");
|
||||||
|
limit_cpu = Program.config.getConfigPerf("limit_cpu");
|
||||||
|
ApplyLabel(apply);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (limit_total < 0) limit_total = DefaultTotal;
|
if (limit_total < 0) limit_total = ASUSWmi.DefaultTotal;
|
||||||
if (limit_total > MaxTotal) limit_total = MaxTotal;
|
if (limit_total > ASUSWmi.MaxTotal) limit_total = ASUSWmi.MaxTotal;
|
||||||
if (limit_total < MinTotal) limit_total = MinTotal;
|
if (limit_total < ASUSWmi.MinTotal) limit_total = ASUSWmi.MinTotal;
|
||||||
|
|
||||||
if (limit_cpu < 0) limit_cpu = DefaultCPU;
|
|
||||||
if (limit_cpu > MaxCPU) limit_cpu = MaxCPU;
|
|
||||||
if (limit_cpu < MinCPU) limit_cpu = MinCPU;
|
|
||||||
|
|
||||||
|
if (limit_cpu < 0) limit_cpu = ASUSWmi.DefaultCPU;
|
||||||
|
if (limit_cpu > ASUSWmi.MaxCPU) limit_cpu = ASUSWmi.MaxCPU;
|
||||||
|
if (limit_cpu < ASUSWmi.MinCPU) limit_cpu = ASUSWmi.MinCPU;
|
||||||
if (limit_cpu > limit_total) limit_cpu = limit_total;
|
if (limit_cpu > limit_total) limit_cpu = limit_total;
|
||||||
|
|
||||||
trackTotal.Value = limit_total;
|
trackTotal.Value = limit_total;
|
||||||
trackCPU.Value = limit_cpu;
|
trackCPU.Value = limit_cpu;
|
||||||
|
checkApplyPower.Checked = apply;
|
||||||
|
|
||||||
labelTotal.Text = trackTotal.Value.ToString() + "W";
|
labelTotal.Text = trackTotal.Value.ToString() + "W";
|
||||||
labelCPU.Text = trackCPU.Value.ToString() + "W";
|
labelCPU.Text = trackCPU.Value.ToString() + "W";
|
||||||
|
|
||||||
pictureFine.Visible = (limit_cpu > 85 || limit_total > 145);
|
pictureFine.Visible = (limit_cpu > 85 || limit_total > 145);
|
||||||
|
|
||||||
|
Program.config.setConfigPerf("limit_total", limit_total);
|
||||||
|
Program.config.setConfigPerf("limit_cpu", limit_cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void TrackTotal_Scroll(object? sender, EventArgs e)
|
private void TrackTotal_Scroll(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
VisualisePower();
|
InitPower(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TrackCPU_Scroll(object? sender, EventArgs e)
|
private void TrackCPU_Scroll(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
VisualisePower();
|
InitPower(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetApplyLabel()
|
|
||||||
|
public void ApplyLabel(bool applied = false)
|
||||||
{
|
{
|
||||||
labelApplied.ForeColor = Color.Red;
|
if (applied)
|
||||||
labelApplied.Text = "Not Applied";
|
{
|
||||||
|
labelApplied.ForeColor = Color.Blue;
|
||||||
|
labelApplied.Text = "Applied";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
labelApplied.ForeColor = Color.Red;
|
||||||
|
labelApplied.Text = "Not Applied";
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadFans()
|
public void InitFans()
|
||||||
{
|
{
|
||||||
|
|
||||||
SetChart(chartCPU, 0);
|
SetChart(chartCPU, 0);
|
||||||
@@ -215,7 +238,7 @@ namespace GHelper
|
|||||||
LoadProfile(seriesCPU, 0);
|
LoadProfile(seriesCPU, 0);
|
||||||
LoadProfile(seriesGPU, 1);
|
LoadProfile(seriesGPU, 1);
|
||||||
|
|
||||||
int auto_apply = Program.config.getConfig("auto_apply_" + Program.config.getConfig("performance_mode"));
|
int auto_apply = Program.config.getConfigPerf("auto_apply");
|
||||||
|
|
||||||
checkAuto.Checked = (auto_apply == 1);
|
checkAuto.Checked = (auto_apply == 1);
|
||||||
|
|
||||||
@@ -277,15 +300,19 @@ namespace GHelper
|
|||||||
|
|
||||||
private void ButtonReset_Click(object? sender, EventArgs e)
|
private void ButtonReset_Click(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
|
||||||
LoadProfile(seriesCPU, 0, 1);
|
LoadProfile(seriesCPU, 0, 1);
|
||||||
LoadProfile(seriesGPU, 1, 1);
|
LoadProfile(seriesGPU, 1, 1);
|
||||||
|
|
||||||
checkAuto.Checked = false;
|
checkAuto.Checked = false;
|
||||||
Program.config.setConfig("auto_apply_" + Program.config.getConfig("performance_mode"), 0);
|
checkApplyPower.Checked = false;
|
||||||
|
|
||||||
|
Program.config.setConfigPerf("auto_apply", 0);
|
||||||
|
Program.config.setConfigPerf("auto_apply_power", 0);
|
||||||
|
|
||||||
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, Program.config.getConfig("performance_mode"));
|
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, Program.config.getConfig("performance_mode"));
|
||||||
|
|
||||||
ResetApplyLabel();
|
ApplyLabel(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ChartCPU_MouseUp(object? sender, MouseEventArgs e)
|
private void ChartCPU_MouseUp(object? sender, MouseEventArgs e)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
<AssemblyName>GHelper</AssemblyName>
|
<AssemblyName>GHelper</AssemblyName>
|
||||||
<PlatformTarget>x64</PlatformTarget>
|
<PlatformTarget>x64</PlatformTarget>
|
||||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||||
<AssemblyVersion>0.17</AssemblyVersion>
|
<AssemblyVersion>0.21</AssemblyVersion>
|
||||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
414
NativeMethods.cs
414
NativeMethods.cs
@@ -1,10 +1,316 @@
|
|||||||
using System.Diagnostics;
|
using System.ComponentModel;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Management;
|
using System.Management;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using Tools;
|
||||||
|
using static Tools.ScreenInterrogatory;
|
||||||
|
|
||||||
|
namespace Tools
|
||||||
|
{
|
||||||
|
public static class ScreenInterrogatory
|
||||||
|
{
|
||||||
|
public const int ERROR_SUCCESS = 0;
|
||||||
|
|
||||||
|
#region enums
|
||||||
|
|
||||||
|
public enum QUERY_DEVICE_CONFIG_FLAGS : uint
|
||||||
|
{
|
||||||
|
QDC_ALL_PATHS = 0x00000001,
|
||||||
|
QDC_ONLY_ACTIVE_PATHS = 0x00000002,
|
||||||
|
QDC_DATABASE_CURRENT = 0x00000004
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY : uint
|
||||||
|
{
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_OTHER = 0xFFFFFFFF,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HD15 = 0,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SVIDEO = 1,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPOSITE_VIDEO = 2,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPONENT_VIDEO = 3,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DVI = 4,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI = 5,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_LVDS = 6,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_D_JPN = 8,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDI = 9,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EXTERNAL = 10,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED = 11,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EXTERNAL = 12,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EMBEDDED = 13,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDTVDONGLE = 14,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_MIRACAST = 15,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL = 0x80000000,
|
||||||
|
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_FORCE_UINT32 = 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum DISPLAYCONFIG_SCANLINE_ORDERING : uint
|
||||||
|
{
|
||||||
|
DISPLAYCONFIG_SCANLINE_ORDERING_UNSPECIFIED = 0,
|
||||||
|
DISPLAYCONFIG_SCANLINE_ORDERING_PROGRESSIVE = 1,
|
||||||
|
DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED = 2,
|
||||||
|
DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_UPPERFIELDFIRST = DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED,
|
||||||
|
DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_LOWERFIELDFIRST = 3,
|
||||||
|
DISPLAYCONFIG_SCANLINE_ORDERING_FORCE_UINT32 = 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum DISPLAYCONFIG_ROTATION : uint
|
||||||
|
{
|
||||||
|
DISPLAYCONFIG_ROTATION_IDENTITY = 1,
|
||||||
|
DISPLAYCONFIG_ROTATION_ROTATE90 = 2,
|
||||||
|
DISPLAYCONFIG_ROTATION_ROTATE180 = 3,
|
||||||
|
DISPLAYCONFIG_ROTATION_ROTATE270 = 4,
|
||||||
|
DISPLAYCONFIG_ROTATION_FORCE_UINT32 = 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum DISPLAYCONFIG_SCALING : uint
|
||||||
|
{
|
||||||
|
DISPLAYCONFIG_SCALING_IDENTITY = 1,
|
||||||
|
DISPLAYCONFIG_SCALING_CENTERED = 2,
|
||||||
|
DISPLAYCONFIG_SCALING_STRETCHED = 3,
|
||||||
|
DISPLAYCONFIG_SCALING_ASPECTRATIOCENTEREDMAX = 4,
|
||||||
|
DISPLAYCONFIG_SCALING_CUSTOM = 5,
|
||||||
|
DISPLAYCONFIG_SCALING_PREFERRED = 128,
|
||||||
|
DISPLAYCONFIG_SCALING_FORCE_UINT32 = 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum DISPLAYCONFIG_PIXELFORMAT : uint
|
||||||
|
{
|
||||||
|
DISPLAYCONFIG_PIXELFORMAT_8BPP = 1,
|
||||||
|
DISPLAYCONFIG_PIXELFORMAT_16BPP = 2,
|
||||||
|
DISPLAYCONFIG_PIXELFORMAT_24BPP = 3,
|
||||||
|
DISPLAYCONFIG_PIXELFORMAT_32BPP = 4,
|
||||||
|
DISPLAYCONFIG_PIXELFORMAT_NONGDI = 5,
|
||||||
|
DISPLAYCONFIG_PIXELFORMAT_FORCE_UINT32 = 0xffffffff
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum DISPLAYCONFIG_MODE_INFO_TYPE : uint
|
||||||
|
{
|
||||||
|
DISPLAYCONFIG_MODE_INFO_TYPE_SOURCE = 1,
|
||||||
|
DISPLAYCONFIG_MODE_INFO_TYPE_TARGET = 2,
|
||||||
|
DISPLAYCONFIG_MODE_INFO_TYPE_FORCE_UINT32 = 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum DISPLAYCONFIG_DEVICE_INFO_TYPE : uint
|
||||||
|
{
|
||||||
|
DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME = 1,
|
||||||
|
DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME = 2,
|
||||||
|
DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_PREFERRED_MODE = 3,
|
||||||
|
DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME = 4,
|
||||||
|
DISPLAYCONFIG_DEVICE_INFO_SET_TARGET_PERSISTENCE = 5,
|
||||||
|
DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_BASE_TYPE = 6,
|
||||||
|
DISPLAYCONFIG_DEVICE_INFO_FORCE_UINT32 = 0xFFFFFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region structs
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct LUID
|
||||||
|
{
|
||||||
|
public uint LowPart;
|
||||||
|
public int HighPart;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct DISPLAYCONFIG_PATH_SOURCE_INFO
|
||||||
|
{
|
||||||
|
public LUID adapterId;
|
||||||
|
public uint id;
|
||||||
|
public uint modeInfoIdx;
|
||||||
|
public uint statusFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct DISPLAYCONFIG_PATH_TARGET_INFO
|
||||||
|
{
|
||||||
|
public LUID adapterId;
|
||||||
|
public uint id;
|
||||||
|
public uint modeInfoIdx;
|
||||||
|
private DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY outputTechnology;
|
||||||
|
private DISPLAYCONFIG_ROTATION rotation;
|
||||||
|
private DISPLAYCONFIG_SCALING scaling;
|
||||||
|
private DISPLAYCONFIG_RATIONAL refreshRate;
|
||||||
|
private DISPLAYCONFIG_SCANLINE_ORDERING scanLineOrdering;
|
||||||
|
public bool targetAvailable;
|
||||||
|
public uint statusFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct DISPLAYCONFIG_RATIONAL
|
||||||
|
{
|
||||||
|
public uint Numerator;
|
||||||
|
public uint Denominator;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct DISPLAYCONFIG_PATH_INFO
|
||||||
|
{
|
||||||
|
public DISPLAYCONFIG_PATH_SOURCE_INFO sourceInfo;
|
||||||
|
public DISPLAYCONFIG_PATH_TARGET_INFO targetInfo;
|
||||||
|
public uint flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct DISPLAYCONFIG_2DREGION
|
||||||
|
{
|
||||||
|
public uint cx;
|
||||||
|
public uint cy;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct DISPLAYCONFIG_VIDEO_SIGNAL_INFO
|
||||||
|
{
|
||||||
|
public ulong pixelRate;
|
||||||
|
public DISPLAYCONFIG_RATIONAL hSyncFreq;
|
||||||
|
public DISPLAYCONFIG_RATIONAL vSyncFreq;
|
||||||
|
public DISPLAYCONFIG_2DREGION activeSize;
|
||||||
|
public DISPLAYCONFIG_2DREGION totalSize;
|
||||||
|
public uint videoStandard;
|
||||||
|
public DISPLAYCONFIG_SCANLINE_ORDERING scanLineOrdering;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct DISPLAYCONFIG_TARGET_MODE
|
||||||
|
{
|
||||||
|
public DISPLAYCONFIG_VIDEO_SIGNAL_INFO targetVideoSignalInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct POINTL
|
||||||
|
{
|
||||||
|
private int x;
|
||||||
|
private int y;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct DISPLAYCONFIG_SOURCE_MODE
|
||||||
|
{
|
||||||
|
public uint width;
|
||||||
|
public uint height;
|
||||||
|
public DISPLAYCONFIG_PIXELFORMAT pixelFormat;
|
||||||
|
public POINTL position;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Explicit)]
|
||||||
|
public struct DISPLAYCONFIG_MODE_INFO_UNION
|
||||||
|
{
|
||||||
|
[FieldOffset(0)]
|
||||||
|
public DISPLAYCONFIG_TARGET_MODE targetMode;
|
||||||
|
|
||||||
|
[FieldOffset(0)]
|
||||||
|
public DISPLAYCONFIG_SOURCE_MODE sourceMode;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct DISPLAYCONFIG_MODE_INFO
|
||||||
|
{
|
||||||
|
public DISPLAYCONFIG_MODE_INFO_TYPE infoType;
|
||||||
|
public uint id;
|
||||||
|
public LUID adapterId;
|
||||||
|
public DISPLAYCONFIG_MODE_INFO_UNION modeInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS
|
||||||
|
{
|
||||||
|
public uint value;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct DISPLAYCONFIG_DEVICE_INFO_HEADER
|
||||||
|
{
|
||||||
|
public DISPLAYCONFIG_DEVICE_INFO_TYPE type;
|
||||||
|
public uint size;
|
||||||
|
public LUID adapterId;
|
||||||
|
public uint id;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
||||||
|
public struct DISPLAYCONFIG_TARGET_DEVICE_NAME
|
||||||
|
{
|
||||||
|
public DISPLAYCONFIG_DEVICE_INFO_HEADER header;
|
||||||
|
public DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS flags;
|
||||||
|
public DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY outputTechnology;
|
||||||
|
public ushort edidManufactureId;
|
||||||
|
public ushort edidProductCodeId;
|
||||||
|
public uint connectorInstance;
|
||||||
|
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
|
||||||
|
public string monitorFriendlyDeviceName;
|
||||||
|
|
||||||
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
||||||
|
public string monitorDevicePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region DLL-Imports
|
||||||
|
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern int GetDisplayConfigBufferSizes(
|
||||||
|
QUERY_DEVICE_CONFIG_FLAGS flags, out uint numPathArrayElements, out uint numModeInfoArrayElements);
|
||||||
|
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern int QueryDisplayConfig(
|
||||||
|
QUERY_DEVICE_CONFIG_FLAGS flags,
|
||||||
|
ref uint numPathArrayElements, [Out] DISPLAYCONFIG_PATH_INFO[] PathInfoArray,
|
||||||
|
ref uint numModeInfoArrayElements, [Out] DISPLAYCONFIG_MODE_INFO[] ModeInfoArray,
|
||||||
|
IntPtr currentTopologyId
|
||||||
|
);
|
||||||
|
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern int DisplayConfigGetDeviceInfo(ref DISPLAYCONFIG_TARGET_DEVICE_NAME deviceName);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private static DISPLAYCONFIG_TARGET_DEVICE_NAME DeviceName(LUID adapterId, uint targetId)
|
||||||
|
{
|
||||||
|
var deviceName = new DISPLAYCONFIG_TARGET_DEVICE_NAME
|
||||||
|
{
|
||||||
|
header =
|
||||||
|
{
|
||||||
|
size = (uint)Marshal.SizeOf(typeof (DISPLAYCONFIG_TARGET_DEVICE_NAME)),
|
||||||
|
adapterId = adapterId,
|
||||||
|
id = targetId,
|
||||||
|
type = DISPLAYCONFIG_DEVICE_INFO_TYPE.DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME
|
||||||
|
}
|
||||||
|
};
|
||||||
|
var error = DisplayConfigGetDeviceInfo(ref deviceName);
|
||||||
|
if (error != ERROR_SUCCESS)
|
||||||
|
throw new Win32Exception(error);
|
||||||
|
|
||||||
|
return deviceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static IEnumerable<DISPLAYCONFIG_TARGET_DEVICE_NAME> GetAllDevices()
|
||||||
|
{
|
||||||
|
uint pathCount, modeCount;
|
||||||
|
var error = GetDisplayConfigBufferSizes(QUERY_DEVICE_CONFIG_FLAGS.QDC_ONLY_ACTIVE_PATHS, out pathCount, out modeCount);
|
||||||
|
if (error != ERROR_SUCCESS)
|
||||||
|
throw new Win32Exception(error);
|
||||||
|
|
||||||
|
var displayPaths = new DISPLAYCONFIG_PATH_INFO[pathCount];
|
||||||
|
var displayModes = new DISPLAYCONFIG_MODE_INFO[modeCount];
|
||||||
|
error = QueryDisplayConfig(QUERY_DEVICE_CONFIG_FLAGS.QDC_ONLY_ACTIVE_PATHS,
|
||||||
|
ref pathCount, displayPaths, ref modeCount, displayModes, IntPtr.Zero);
|
||||||
|
if (error != ERROR_SUCCESS)
|
||||||
|
throw new Win32Exception(error);
|
||||||
|
|
||||||
|
for (var i = 0; i < modeCount; i++)
|
||||||
|
if (displayModes[i].infoType == DISPLAYCONFIG_MODE_INFO_TYPE.DISPLAYCONFIG_MODE_INFO_TYPE_TARGET)
|
||||||
|
yield return DeviceName(displayModes[i].adapterId, displayModes[i].id);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public class NativeMethods
|
public class NativeMethods
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
public const int KEYEVENTF_EXTENDEDKEY = 1;
|
public const int KEYEVENTF_EXTENDEDKEY = 1;
|
||||||
public const int KEYEVENTF_KEYUP = 2;
|
public const int KEYEVENTF_KEYUP = 2;
|
||||||
|
|
||||||
@@ -161,43 +467,6 @@ public class NativeMethods
|
|||||||
string lpszDeviceName, ref DEVMODE lpDevMode, IntPtr hwnd,
|
string lpszDeviceName, ref DEVMODE lpDevMode, IntPtr hwnd,
|
||||||
DisplaySettingsFlags dwflags, IntPtr lParam);
|
DisplaySettingsFlags dwflags, IntPtr lParam);
|
||||||
|
|
||||||
// ENUM DISPLAYS
|
|
||||||
[DllImport("user32.dll")]
|
|
||||||
static extern bool EnumDisplayDevicesA(string lpDevice, uint iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, uint dwFlags);
|
|
||||||
|
|
||||||
[Flags()]
|
|
||||||
public enum DisplayDeviceStateFlags : int
|
|
||||||
{
|
|
||||||
AttachedToDesktop = 0x1,
|
|
||||||
MultiDriver = 0x2,
|
|
||||||
PrimaryDevice = 0x4,
|
|
||||||
MirroringDriver = 0x8,
|
|
||||||
VGACompatible = 0x10,
|
|
||||||
Removable = 0x20,
|
|
||||||
ModesPruned = 0x8000000,
|
|
||||||
Remote = 0x4000000,
|
|
||||||
Disconnect = 0x2000000
|
|
||||||
}
|
|
||||||
|
|
||||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
|
||||||
public struct DISPLAY_DEVICE
|
|
||||||
{
|
|
||||||
[MarshalAs(UnmanagedType.U4)]
|
|
||||||
public int cb;
|
|
||||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
|
|
||||||
public string DeviceName;
|
|
||||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
|
||||||
public string DeviceString;
|
|
||||||
[MarshalAs(UnmanagedType.U4)]
|
|
||||||
public DisplayDeviceStateFlags StateFlags;
|
|
||||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
|
||||||
public string DeviceID;
|
|
||||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
|
||||||
public string DeviceKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----
|
|
||||||
|
|
||||||
public static DEVMODE CreateDevmode()
|
public static DEVMODE CreateDevmode()
|
||||||
{
|
{
|
||||||
DEVMODE dm = new DEVMODE();
|
DEVMODE dm = new DEVMODE();
|
||||||
@@ -208,74 +477,39 @@ public class NativeMethods
|
|||||||
}
|
}
|
||||||
|
|
||||||
public const int ENUM_CURRENT_SETTINGS = -1;
|
public const int ENUM_CURRENT_SETTINGS = -1;
|
||||||
public const string laptopScreenName = "\\\\.\\DISPLAY1";
|
public const string defaultDevice = "\\\\.\\DISPLAY1";
|
||||||
|
|
||||||
public static string FindLaptopScreen()
|
public static string FindLaptopScreen()
|
||||||
{
|
{
|
||||||
string laptopScreen = null;
|
string laptopScreen = null;
|
||||||
|
|
||||||
DISPLAY_DEVICE d = new DISPLAY_DEVICE();
|
|
||||||
d.cb = Marshal.SizeOf(d);
|
|
||||||
|
|
||||||
List<string> activeScreens = new List<string>();
|
|
||||||
int counter = 0;
|
|
||||||
int deviceNum = -1;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var searcherActive = new ManagementObjectSearcher(@"\\.\root\wmi", "SELECT * FROM WmiMonitorBasicDisplayParams");
|
var devices = GetAllDevices();
|
||||||
var resultsActive = searcherActive.Get();
|
int count = 0, displayNum = -1;
|
||||||
foreach (var result in resultsActive)
|
|
||||||
|
foreach (var device in devices)
|
||||||
{
|
{
|
||||||
activeScreens.Add(result["InstanceName"].ToString());
|
if (device.outputTechnology == DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL)
|
||||||
|
displayNum = count;
|
||||||
|
count++;
|
||||||
|
//Debug.WriteLine(device.outputTechnology);
|
||||||
|
//Debug.WriteLine(device.monitorFriendlyDeviceName);
|
||||||
}
|
}
|
||||||
|
|
||||||
var searcher = new ManagementObjectSearcher(@"\\.\root\wmi", "SELECT * FROM WmiMonitorConnectionParams");
|
count = 0;
|
||||||
var results = searcher.Get();
|
foreach (var screen in Screen.AllScreens)
|
||||||
|
|
||||||
|
|
||||||
foreach (var result in results)
|
|
||||||
{
|
{
|
||||||
long technology;
|
if (count == displayNum)
|
||||||
long.TryParse(result["VideoOutputTechnology"].ToString(), out technology);
|
laptopScreen = screen.DeviceName;
|
||||||
string instanceName = result["InstanceName"].ToString();
|
//Debug.WriteLine(screen.DeviceName);
|
||||||
|
count++;
|
||||||
if (technology == 0x80000000 && activeScreens.Contains(instanceName))
|
|
||||||
{
|
|
||||||
deviceNum = counter;
|
|
||||||
//Debug.WriteLine(result["InstanceName"]);
|
|
||||||
}
|
|
||||||
counter++;
|
|
||||||
}
|
}
|
||||||
} catch
|
} catch
|
||||||
{
|
{
|
||||||
Debug.WriteLine("Failed to detect built in display");
|
Debug.WriteLine("Can't find internal screen");
|
||||||
deviceNum = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
counter = 0;
|
|
||||||
for (uint id = 0; EnumDisplayDevicesA(null, id, ref d, 0); id++)
|
|
||||||
{
|
|
||||||
if ((d.StateFlags & DisplayDeviceStateFlags.AttachedToDesktop) != 0)
|
|
||||||
{
|
|
||||||
if (counter == deviceNum)
|
|
||||||
{
|
|
||||||
laptopScreen = d.DeviceName;
|
|
||||||
//Debug.WriteLine(d.DeviceID);
|
|
||||||
//Debug.WriteLine(d.DeviceName);
|
|
||||||
}
|
|
||||||
counter++;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
if (laptopScreen is null)
|
|
||||||
{
|
|
||||||
foreach (var screen in screens)
|
|
||||||
Debug.WriteLine(screen.DeviceName);
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
return laptopScreen;
|
return laptopScreen;
|
||||||
}
|
}
|
||||||
|
|||||||
108
Program.cs
108
Program.cs
@@ -1,6 +1,10 @@
|
|||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Management;
|
using System.Management;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
public class HardwareMonitor
|
public class HardwareMonitor
|
||||||
{
|
{
|
||||||
@@ -36,6 +40,32 @@ namespace GHelper
|
|||||||
{
|
{
|
||||||
static class Program
|
static class Program
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Native methods for sleep detection
|
||||||
|
|
||||||
|
[DllImport("Powrprof.dll", SetLastError = true)]
|
||||||
|
static extern uint PowerRegisterSuspendResumeNotification(uint flags, ref DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS receipient, ref IntPtr registrationHandle);
|
||||||
|
|
||||||
|
|
||||||
|
private const int WM_POWERBROADCAST = 536; // (0x218)
|
||||||
|
private const int PBT_APMPOWERSTATUSCHANGE = 10; // (0xA) - Power status has changed.
|
||||||
|
private const int PBT_APMRESUMEAUTOMATIC = 18; // (0x12) - Operation is resuming automatically from a low-power state.This message is sent every time the system resumes.
|
||||||
|
private const int PBT_APMRESUMESUSPEND = 7; // (0x7) - Operation is resuming from a low-power state.This message is sent after PBT_APMRESUMEAUTOMATIC if the resume is triggered by user input, such as pressing a key.
|
||||||
|
private const int PBT_APMSUSPEND = 4; // (0x4) - System is suspending operation.
|
||||||
|
private const int PBT_POWERSETTINGCHANGE = 32787; // (0x8013) - A power setting change event has been received.
|
||||||
|
private const int DEVICE_NOTIFY_CALLBACK = 2;
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
struct DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS
|
||||||
|
{
|
||||||
|
public DeviceNotifyCallbackRoutine Callback;
|
||||||
|
public IntPtr Context;
|
||||||
|
}
|
||||||
|
|
||||||
|
public delegate int DeviceNotifyCallbackRoutine(IntPtr context, int type, IntPtr setting);
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
public static NotifyIcon trayIcon = new NotifyIcon
|
public static NotifyIcon trayIcon = new NotifyIcon
|
||||||
{
|
{
|
||||||
Text = "G-Helper",
|
Text = "G-Helper",
|
||||||
@@ -75,7 +105,6 @@ namespace GHelper
|
|||||||
wmi.SubscribeToEvents(WatcherEventArrived);
|
wmi.SubscribeToEvents(WatcherEventArrived);
|
||||||
|
|
||||||
settingsForm.InitGPUMode();
|
settingsForm.InitGPUMode();
|
||||||
settingsForm.InitBoost();
|
|
||||||
settingsForm.InitAura();
|
settingsForm.InitAura();
|
||||||
settingsForm.InitMatrix();
|
settingsForm.InitMatrix();
|
||||||
|
|
||||||
@@ -85,24 +114,95 @@ namespace GHelper
|
|||||||
|
|
||||||
SetAutoModes();
|
SetAutoModes();
|
||||||
|
|
||||||
|
IntPtr registrationHandle = new IntPtr();
|
||||||
|
DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS recipient = new DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS();
|
||||||
|
recipient.Callback = new DeviceNotifyCallbackRoutine(DeviceNotifyCallback);
|
||||||
|
recipient.Context = IntPtr.Zero;
|
||||||
|
|
||||||
|
IntPtr pRecipient = Marshal.AllocHGlobal(Marshal.SizeOf(recipient));
|
||||||
|
Marshal.StructureToPtr(recipient, pRecipient, false);
|
||||||
|
|
||||||
|
uint result = PowerRegisterSuspendResumeNotification(DEVICE_NOTIFY_CALLBACK, ref recipient, ref registrationHandle);
|
||||||
|
|
||||||
SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
|
SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
|
||||||
|
|
||||||
IntPtr ds = settingsForm.Handle;
|
IntPtr ds = settingsForm.Handle;
|
||||||
|
|
||||||
|
CheckForUpdates();
|
||||||
|
|
||||||
Application.Run();
|
Application.Run();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static int DeviceNotifyCallback(IntPtr context, int type, IntPtr setting)
|
||||||
|
{
|
||||||
|
//Debug.WriteLine($"Power callback type: {type}");
|
||||||
|
switch (type)
|
||||||
|
{
|
||||||
|
case PBT_APMRESUMEAUTOMATIC:
|
||||||
|
settingsForm.BeginInvoke(delegate
|
||||||
|
{
|
||||||
|
// Setting "other" mode to prevent bios bugging with PPTs after wake up from sleep
|
||||||
|
wmi.DeviceSet(ASUSWmi.PerformanceMode, config.getConfig("performance_mode"));
|
||||||
|
Thread.Sleep(1000);
|
||||||
|
|
||||||
|
SetAutoModes();
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static async void CheckForUpdates()
|
||||||
|
{
|
||||||
|
|
||||||
|
settingsForm.SetVersionLabel("Version: " + Assembly.GetExecutingAssembly().GetName().Version.ToString());
|
||||||
|
|
||||||
|
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 assembly = Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
||||||
|
|
||||||
|
var gitVersion = new Version(tag);
|
||||||
|
var appVersion = new Version();
|
||||||
|
|
||||||
|
var result = appVersion.CompareTo(gitVersion);
|
||||||
|
if (result > 0)
|
||||||
|
{
|
||||||
|
settingsForm.SetVersionLabel("Download Update: " + tag, url);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
Debug.WriteLine("Failed to get update");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static void SetAutoModes()
|
private static void SetAutoModes()
|
||||||
{
|
{
|
||||||
PowerLineStatus isPlugged = SystemInformation.PowerStatus.PowerLineStatus;
|
PowerLineStatus isPlugged = SystemInformation.PowerStatus.PowerLineStatus;
|
||||||
settingsForm.AutoGPUMode(isPlugged);
|
|
||||||
settingsForm.AutoScreen(isPlugged);
|
Debug.WriteLine(isPlugged.ToString());
|
||||||
|
|
||||||
|
settingsForm.SetBatteryChargeLimit(config.getConfig("charge_limit"));
|
||||||
settingsForm.AutoPerformance(isPlugged);
|
settingsForm.AutoPerformance(isPlugged);
|
||||||
|
settingsForm.AutoScreen(isPlugged);
|
||||||
|
|
||||||
|
settingsForm.AutoGPUMode(isPlugged);
|
||||||
|
|
||||||
settingsForm.SetMatrix(isPlugged);
|
settingsForm.SetMatrix(isPlugged);
|
||||||
|
|
||||||
settingsForm.SetBatteryChargeLimit(config.getConfig("charge_limit"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
|
private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# G-Helper (For Asus ROG Zephyrus G14, G15, Flow X13, Flow X16, and others)
|
# G-Helper / GHelper for Asus ROG Zephyrus G14, G15, Flow X13, Flow X16, and other models
|
||||||
|
|
||||||
A small utility that allows you do almost everyting you could do with Armory Crate but without extra bloat and unnecessary services.
|
A small utility that allows you do almost everyting you could do with Armory Crate but without extra bloat and unnecessary services.
|
||||||
|
|
||||||
|
|||||||
33
Settings.Designer.cs
generated
33
Settings.Designer.cs
generated
@@ -48,7 +48,6 @@
|
|||||||
checkStartup = new CheckBox();
|
checkStartup = new CheckBox();
|
||||||
panelPerformance = new Panel();
|
panelPerformance = new Panel();
|
||||||
buttonFans = new Button();
|
buttonFans = new Button();
|
||||||
checkBoost = new CheckBox();
|
|
||||||
picturePerf = new PictureBox();
|
picturePerf = new PictureBox();
|
||||||
labelPerf = new Label();
|
labelPerf = new Label();
|
||||||
labelCPUFan = new Label();
|
labelCPUFan = new Label();
|
||||||
@@ -113,17 +112,17 @@
|
|||||||
panelMatrix.Controls.Add(pictureMatrix);
|
panelMatrix.Controls.Add(pictureMatrix);
|
||||||
panelMatrix.Controls.Add(labelMatrix);
|
panelMatrix.Controls.Add(labelMatrix);
|
||||||
panelMatrix.Dock = DockStyle.Top;
|
panelMatrix.Dock = DockStyle.Top;
|
||||||
panelMatrix.Location = new Point(16, 806);
|
panelMatrix.Location = new Point(16, 814);
|
||||||
panelMatrix.Margin = new Padding(4);
|
panelMatrix.Margin = new Padding(4);
|
||||||
panelMatrix.Name = "panelMatrix";
|
panelMatrix.Name = "panelMatrix";
|
||||||
panelMatrix.Size = new Size(722, 156);
|
panelMatrix.Size = new Size(722, 180);
|
||||||
panelMatrix.TabIndex = 33;
|
panelMatrix.TabIndex = 33;
|
||||||
//
|
//
|
||||||
// checkMatrix
|
// checkMatrix
|
||||||
//
|
//
|
||||||
checkMatrix.AutoSize = true;
|
checkMatrix.AutoSize = true;
|
||||||
checkMatrix.ForeColor = SystemColors.GrayText;
|
checkMatrix.ForeColor = SystemColors.GrayText;
|
||||||
checkMatrix.Location = new Point(26, 112);
|
checkMatrix.Location = new Point(28, 109);
|
||||||
checkMatrix.Margin = new Padding(4, 2, 4, 2);
|
checkMatrix.Margin = new Padding(4, 2, 4, 2);
|
||||||
checkMatrix.Name = "checkMatrix";
|
checkMatrix.Name = "checkMatrix";
|
||||||
checkMatrix.Size = new Size(249, 36);
|
checkMatrix.Size = new Size(249, 36);
|
||||||
@@ -159,7 +158,7 @@
|
|||||||
buttonMatrix.Name = "buttonMatrix";
|
buttonMatrix.Name = "buttonMatrix";
|
||||||
buttonMatrix.Size = new Size(208, 42);
|
buttonMatrix.Size = new Size(208, 42);
|
||||||
buttonMatrix.TabIndex = 43;
|
buttonMatrix.TabIndex = 43;
|
||||||
buttonMatrix.Text = "Picture";
|
buttonMatrix.Text = "Picture / Gif";
|
||||||
buttonMatrix.UseVisualStyleBackColor = false;
|
buttonMatrix.UseVisualStyleBackColor = false;
|
||||||
//
|
//
|
||||||
// comboMatrixRunning
|
// comboMatrixRunning
|
||||||
@@ -220,7 +219,7 @@
|
|||||||
panelBattery.Controls.Add(labelBatteryTitle);
|
panelBattery.Controls.Add(labelBatteryTitle);
|
||||||
panelBattery.Controls.Add(trackBattery);
|
panelBattery.Controls.Add(trackBattery);
|
||||||
panelBattery.Dock = DockStyle.Top;
|
panelBattery.Dock = DockStyle.Top;
|
||||||
panelBattery.Location = new Point(16, 962);
|
panelBattery.Location = new Point(16, 994);
|
||||||
panelBattery.Margin = new Padding(4);
|
panelBattery.Margin = new Padding(4);
|
||||||
panelBattery.Name = "panelBattery";
|
panelBattery.Name = "panelBattery";
|
||||||
panelBattery.Size = new Size(722, 148);
|
panelBattery.Size = new Size(722, 148);
|
||||||
@@ -291,7 +290,7 @@
|
|||||||
panelFooter.Controls.Add(buttonQuit);
|
panelFooter.Controls.Add(buttonQuit);
|
||||||
panelFooter.Controls.Add(checkStartup);
|
panelFooter.Controls.Add(checkStartup);
|
||||||
panelFooter.Dock = DockStyle.Top;
|
panelFooter.Dock = DockStyle.Top;
|
||||||
panelFooter.Location = new Point(16, 1110);
|
panelFooter.Location = new Point(16, 1142);
|
||||||
panelFooter.Margin = new Padding(4);
|
panelFooter.Margin = new Padding(4);
|
||||||
panelFooter.Name = "panelFooter";
|
panelFooter.Name = "panelFooter";
|
||||||
panelFooter.Size = new Size(722, 64);
|
panelFooter.Size = new Size(722, 64);
|
||||||
@@ -323,7 +322,6 @@
|
|||||||
// panelPerformance
|
// panelPerformance
|
||||||
//
|
//
|
||||||
panelPerformance.Controls.Add(buttonFans);
|
panelPerformance.Controls.Add(buttonFans);
|
||||||
panelPerformance.Controls.Add(checkBoost);
|
|
||||||
panelPerformance.Controls.Add(picturePerf);
|
panelPerformance.Controls.Add(picturePerf);
|
||||||
panelPerformance.Controls.Add(labelPerf);
|
panelPerformance.Controls.Add(labelPerf);
|
||||||
panelPerformance.Controls.Add(labelCPUFan);
|
panelPerformance.Controls.Add(labelCPUFan);
|
||||||
@@ -348,18 +346,6 @@
|
|||||||
buttonFans.Text = "Fans and Power";
|
buttonFans.Text = "Fans and Power";
|
||||||
buttonFans.UseVisualStyleBackColor = false;
|
buttonFans.UseVisualStyleBackColor = false;
|
||||||
//
|
//
|
||||||
// checkBoost
|
|
||||||
//
|
|
||||||
checkBoost.AutoSize = true;
|
|
||||||
checkBoost.ForeColor = SystemColors.GrayText;
|
|
||||||
checkBoost.Location = new Point(27, 154);
|
|
||||||
checkBoost.Margin = new Padding(4, 2, 4, 2);
|
|
||||||
checkBoost.Name = "checkBoost";
|
|
||||||
checkBoost.Size = new Size(320, 36);
|
|
||||||
checkBoost.TabIndex = 33;
|
|
||||||
checkBoost.Text = "CPU Turbo Boost enabled";
|
|
||||||
checkBoost.UseVisualStyleBackColor = true;
|
|
||||||
//
|
|
||||||
// picturePerf
|
// picturePerf
|
||||||
//
|
//
|
||||||
picturePerf.BackgroundImage = (Image)resources.GetObject("picturePerf.BackgroundImage");
|
picturePerf.BackgroundImage = (Image)resources.GetObject("picturePerf.BackgroundImage");
|
||||||
@@ -595,7 +581,7 @@
|
|||||||
//
|
//
|
||||||
checkScreen.AutoSize = true;
|
checkScreen.AutoSize = true;
|
||||||
checkScreen.ForeColor = SystemColors.GrayText;
|
checkScreen.ForeColor = SystemColors.GrayText;
|
||||||
checkScreen.Location = new Point(27, 154);
|
checkScreen.Location = new Point(27, 153);
|
||||||
checkScreen.Margin = new Padding(4, 2, 4, 2);
|
checkScreen.Margin = new Padding(4, 2, 4, 2);
|
||||||
checkScreen.Name = "checkScreen";
|
checkScreen.Name = "checkScreen";
|
||||||
checkScreen.Size = new Size(527, 36);
|
checkScreen.Size = new Size(527, 36);
|
||||||
@@ -683,7 +669,7 @@
|
|||||||
panelKeyboard.Location = new Point(16, 660);
|
panelKeyboard.Location = new Point(16, 660);
|
||||||
panelKeyboard.Margin = new Padding(4);
|
panelKeyboard.Margin = new Padding(4);
|
||||||
panelKeyboard.Name = "panelKeyboard";
|
panelKeyboard.Name = "panelKeyboard";
|
||||||
panelKeyboard.Size = new Size(722, 146);
|
panelKeyboard.Size = new Size(722, 154);
|
||||||
panelKeyboard.TabIndex = 39;
|
panelKeyboard.TabIndex = 39;
|
||||||
//
|
//
|
||||||
// tableLayoutKeyboard
|
// tableLayoutKeyboard
|
||||||
@@ -775,7 +761,7 @@
|
|||||||
buttonKeyboardColor.Name = "buttonKeyboardColor";
|
buttonKeyboardColor.Name = "buttonKeyboardColor";
|
||||||
buttonKeyboardColor.Size = new Size(208, 42);
|
buttonKeyboardColor.Size = new Size(208, 42);
|
||||||
buttonKeyboardColor.TabIndex = 39;
|
buttonKeyboardColor.TabIndex = 39;
|
||||||
buttonKeyboardColor.Text = "Color ";
|
buttonKeyboardColor.Text = "Color ";
|
||||||
buttonKeyboardColor.UseVisualStyleBackColor = false;
|
buttonKeyboardColor.UseVisualStyleBackColor = false;
|
||||||
//
|
//
|
||||||
// pictureKeyboard
|
// pictureKeyboard
|
||||||
@@ -872,7 +858,6 @@
|
|||||||
private CheckBox checkStartup;
|
private CheckBox checkStartup;
|
||||||
private Panel panelPerformance;
|
private Panel panelPerformance;
|
||||||
private Button buttonFans;
|
private Button buttonFans;
|
||||||
private CheckBox checkBoost;
|
|
||||||
private PictureBox picturePerf;
|
private PictureBox picturePerf;
|
||||||
private Label labelPerf;
|
private Label labelPerf;
|
||||||
private Label labelCPUFan;
|
private Label labelCPUFan;
|
||||||
|
|||||||
196
Settings.cs
196
Settings.cs
@@ -1,7 +1,6 @@
|
|||||||
using Starlight.AnimeMatrix;
|
using Starlight.AnimeMatrix;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Drawing.Imaging;
|
using System.Drawing.Imaging;
|
||||||
using System.Reflection;
|
|
||||||
using System.Timers;
|
using System.Timers;
|
||||||
|
|
||||||
namespace GHelper
|
namespace GHelper
|
||||||
@@ -20,14 +19,14 @@ namespace GHelper
|
|||||||
static System.Timers.Timer aTimer = default!;
|
static System.Timers.Timer aTimer = default!;
|
||||||
static System.Timers.Timer matrixTimer = default!;
|
static System.Timers.Timer matrixTimer = default!;
|
||||||
|
|
||||||
|
public string versionUrl = "http://github.com/seerge/g-helper/releases";
|
||||||
|
|
||||||
public string perfName = "Balanced";
|
public string perfName = "Balanced";
|
||||||
|
|
||||||
Fans fans;
|
Fans fans;
|
||||||
Keyboard keyb;
|
Keyboard keyb;
|
||||||
|
|
||||||
static AnimeMatrixDevice mat;
|
static AnimeMatrixDevice mat;
|
||||||
static bool matEnabled = false;
|
|
||||||
|
|
||||||
|
|
||||||
public SettingsForm()
|
public SettingsForm()
|
||||||
{
|
{
|
||||||
@@ -61,7 +60,6 @@ namespace GHelper
|
|||||||
|
|
||||||
buttonQuit.Click += ButtonQuit_Click;
|
buttonQuit.Click += ButtonQuit_Click;
|
||||||
|
|
||||||
checkBoost.Click += CheckBoost_Click;
|
|
||||||
|
|
||||||
checkScreen.CheckedChanged += checkScreen_CheckedChanged;
|
checkScreen.CheckedChanged += checkScreen_CheckedChanged;
|
||||||
|
|
||||||
@@ -77,9 +75,6 @@ namespace GHelper
|
|||||||
pictureColor.Click += PictureColor_Click;
|
pictureColor.Click += PictureColor_Click;
|
||||||
pictureColor2.Click += PictureColor2_Click;
|
pictureColor2.Click += PictureColor2_Click;
|
||||||
|
|
||||||
labelVersion.Text = "Version " + Assembly.GetExecutingAssembly().GetName().Version.ToString();
|
|
||||||
labelVersion.Click += LabelVersion_Click;
|
|
||||||
|
|
||||||
labelCPUFan.Click += LabelCPUFan_Click;
|
labelCPUFan.Click += LabelCPUFan_Click;
|
||||||
labelGPUFan.Click += LabelCPUFan_Click;
|
labelGPUFan.Click += LabelCPUFan_Click;
|
||||||
|
|
||||||
@@ -93,10 +88,46 @@ namespace GHelper
|
|||||||
|
|
||||||
buttonMatrix.Click += ButtonMatrix_Click;
|
buttonMatrix.Click += ButtonMatrix_Click;
|
||||||
|
|
||||||
|
checkStartup.CheckedChanged += CheckStartup_CheckedChanged;
|
||||||
|
|
||||||
|
labelVersion.Click += LabelVersion_Click;
|
||||||
|
|
||||||
SetTimer();
|
SetTimer();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetVersionLabel(string label, string url = null)
|
||||||
|
{
|
||||||
|
labelVersion.Text = label;
|
||||||
|
if (url is not null)
|
||||||
|
{
|
||||||
|
versionUrl = url;
|
||||||
|
labelVersion.ForeColor = Color.Red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void LabelVersion_Click(object? sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Process.Start(new ProcessStartInfo(versionUrl) { UseShellExecute = true });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void CheckStartup_CheckedChanged(object? sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (sender is null) return;
|
||||||
|
CheckBox chk = (CheckBox)sender;
|
||||||
|
|
||||||
|
if (chk.Checked)
|
||||||
|
{
|
||||||
|
Startup.Schedule();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Startup.UnSchedule();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void CheckMatrix_CheckedChanged(object? sender, EventArgs e)
|
private void CheckMatrix_CheckedChanged(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (sender is null) return;
|
if (sender is null) return;
|
||||||
@@ -174,9 +205,9 @@ namespace GHelper
|
|||||||
|
|
||||||
private void ButtonMatrix_Click(object? sender, EventArgs e)
|
private void ButtonMatrix_Click(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
string fileName = "";
|
string fileName = null;
|
||||||
|
|
||||||
Thread t = new Thread((ThreadStart)(() =>
|
Thread t = new Thread(() =>
|
||||||
{
|
{
|
||||||
OpenFileDialog of = new OpenFileDialog();
|
OpenFileDialog of = new OpenFileDialog();
|
||||||
of.Filter = "Image Files (*.bmp;*.jpg;*.jpeg,*.png,*.gif)|*.BMP;*.JPG;*.JPEG;*.PNG;*.GIF";
|
of.Filter = "Image Files (*.bmp;*.jpg;*.jpeg,*.png,*.gif)|*.BMP;*.JPG;*.JPEG;*.PNG;*.GIF";
|
||||||
@@ -185,18 +216,22 @@ namespace GHelper
|
|||||||
fileName = of.FileName;
|
fileName = of.FileName;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}));
|
});
|
||||||
|
|
||||||
t.SetApartmentState(ApartmentState.STA);
|
t.SetApartmentState(ApartmentState.STA);
|
||||||
t.Start();
|
t.Start();
|
||||||
t.Join();
|
t.Join();
|
||||||
|
|
||||||
Program.config.setConfig("matrix_picture", fileName);
|
if (fileName is not null)
|
||||||
SetMatrixPicture(fileName);
|
|
||||||
BeginInvoke(delegate
|
|
||||||
{
|
{
|
||||||
comboMatrixRunning.SelectedIndex = 2;
|
Program.config.setConfig("matrix_picture", fileName);
|
||||||
});
|
SetMatrixPicture(fileName);
|
||||||
|
BeginInvoke(delegate
|
||||||
|
{
|
||||||
|
comboMatrixRunning.SelectedIndex = 2;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,6 +269,8 @@ namespace GHelper
|
|||||||
|
|
||||||
StopMatrixTimer();
|
StopMatrixTimer();
|
||||||
|
|
||||||
|
mat.SetProvider();
|
||||||
|
|
||||||
if (brightness == 0 || (auto && Plugged != PowerLineStatus.Online))
|
if (brightness == 0 || (auto && Plugged != PowerLineStatus.Online))
|
||||||
{
|
{
|
||||||
mat.SetDisplayState(false);
|
mat.SetDisplayState(false);
|
||||||
@@ -252,6 +289,7 @@ namespace GHelper
|
|||||||
{
|
{
|
||||||
mat.SetBuiltInAnimation(true, animation);
|
mat.SetBuiltInAnimation(true, animation);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -264,11 +302,6 @@ namespace GHelper
|
|||||||
RefreshSensors();
|
RefreshSensors();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LabelVersion_Click(object? sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Process.Start(new ProcessStartInfo("http://github.com/seerge/g-helper/releases") { UseShellExecute = true });
|
|
||||||
}
|
|
||||||
|
|
||||||
private void PictureColor2_Click(object? sender, EventArgs e)
|
private void PictureColor2_Click(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -305,7 +338,7 @@ namespace GHelper
|
|||||||
if (fans == null || fans.Text == "")
|
if (fans == null || fans.Text == "")
|
||||||
{
|
{
|
||||||
fans = new Fans();
|
fans = new Fans();
|
||||||
Debug.WriteLine("Starting fans");
|
//Debug.WriteLine("Starting fans");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fans.Visible)
|
if (fans.Visible)
|
||||||
@@ -367,36 +400,26 @@ namespace GHelper
|
|||||||
public void InitMatrix()
|
public void InitMatrix()
|
||||||
{
|
{
|
||||||
|
|
||||||
matrixTimer = new System.Timers.Timer();
|
|
||||||
matrixTimer.Enabled = false;
|
|
||||||
matrixTimer.Interval = 100;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
matEnabled = true;
|
|
||||||
mat = new AnimeMatrixDevice();
|
mat = new AnimeMatrixDevice();
|
||||||
|
matrixTimer = new System.Timers.Timer(100);
|
||||||
matrixTimer.Elapsed += MatrixTimer_Elapsed;
|
matrixTimer.Elapsed += MatrixTimer_Elapsed;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
|
||||||
matEnabled = false;
|
|
||||||
Debug.WriteLine("Anime Matrix not detected");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!matEnabled)
|
|
||||||
{
|
{
|
||||||
panelMatrix.Visible = false;
|
panelMatrix.Visible = false;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
int brightness = Program.config.getConfig("matrix_brightness");
|
|
||||||
int running = Program.config.getConfig("matrix_running");
|
|
||||||
|
|
||||||
comboMatrix.SelectedIndex = (brightness != -1) ? brightness : 0;
|
int brightness = Program.config.getConfig("matrix_brightness");
|
||||||
comboMatrixRunning.SelectedIndex = (running != -1) ? running : 0;
|
int running = Program.config.getConfig("matrix_running");
|
||||||
|
|
||||||
|
comboMatrix.SelectedIndex = (brightness != -1) ? brightness : 0;
|
||||||
|
comboMatrixRunning.SelectedIndex = (running != -1) ? running : 0;
|
||||||
|
|
||||||
|
checkMatrix.Checked = (Program.config.getConfig("matrix_auto") == 1);
|
||||||
|
|
||||||
checkMatrix.Checked = (Program.config.getConfig("matrix_auto") == 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -462,19 +485,6 @@ namespace GHelper
|
|||||||
SetAuraMode(cmb.SelectedIndex);
|
SetAuraMode(cmb.SelectedIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void CheckBoost_Click(object? sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (sender is null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
CheckBox chk = (CheckBox)sender;
|
|
||||||
if (chk.Checked)
|
|
||||||
NativeMethods.SetCPUBoost(2);
|
|
||||||
else
|
|
||||||
NativeMethods.SetCPUBoost(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Button120Hz_Click(object? sender, EventArgs e)
|
private void Button120Hz_Click(object? sender, EventArgs e)
|
||||||
{
|
{
|
||||||
SetScreen(1000, 1);
|
SetScreen(1000, 1);
|
||||||
@@ -517,13 +527,6 @@ namespace GHelper
|
|||||||
InitScreen();
|
InitScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void InitBoost()
|
|
||||||
{
|
|
||||||
int boost = NativeMethods.GetCPUBoost();
|
|
||||||
checkBoost.Checked = (boost > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void InitScreen()
|
public void InitScreen()
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -682,6 +685,42 @@ namespace GHelper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetPower()
|
||||||
|
{
|
||||||
|
int limit_total = Program.config.getConfigPerf("limit_total");
|
||||||
|
int limit_cpu = Program.config.getConfigPerf("limit_cpu");
|
||||||
|
|
||||||
|
if (limit_total > ASUSWmi.MaxTotal) return;
|
||||||
|
if (limit_total < ASUSWmi.MinTotal) return;
|
||||||
|
|
||||||
|
if (limit_cpu > ASUSWmi.MaxCPU) return;
|
||||||
|
if (limit_cpu < ASUSWmi.MinCPU) return;
|
||||||
|
|
||||||
|
Program.wmi.DeviceSet(ASUSWmi.PPT_TotalA0, limit_total);
|
||||||
|
Program.wmi.DeviceSet(ASUSWmi.PPT_TotalA1, limit_total);
|
||||||
|
Program.wmi.DeviceSet(ASUSWmi.PPT_CPUB0, limit_cpu);
|
||||||
|
|
||||||
|
Debug.WriteLine(limit_total.ToString() + ", " + limit_cpu.ToString());
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void AutoFansAndPower()
|
||||||
|
{
|
||||||
|
|
||||||
|
if (Program.config.getConfigPerf("auto_apply") == 1)
|
||||||
|
{
|
||||||
|
Program.wmi.SetFanCurve(0, Program.config.getFanConfig(0));
|
||||||
|
Program.wmi.SetFanCurve(1, Program.config.getFanConfig(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Program.config.getConfigPerf("auto_apply_power") == 1)
|
||||||
|
{
|
||||||
|
SetPower();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void SetPerformanceMode(int PerformanceMode = ASUSWmi.PerformanceBalanced, bool notify = false)
|
public void SetPerformanceMode(int PerformanceMode = ASUSWmi.PerformanceBalanced, bool notify = false)
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -711,18 +750,7 @@ namespace GHelper
|
|||||||
Program.config.setConfig("performance_mode", PerformanceMode);
|
Program.config.setConfig("performance_mode", PerformanceMode);
|
||||||
|
|
||||||
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, PerformanceMode);
|
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, PerformanceMode);
|
||||||
|
Debug.WriteLine("Perf:" + PerformanceMode);
|
||||||
if (Program.config.getConfig("auto_apply_" + PerformanceMode) == 1)
|
|
||||||
{
|
|
||||||
Program.wmi.SetFanCurve(0, Program.config.getFanConfig(0));
|
|
||||||
Program.wmi.SetFanCurve(1, Program.config.getFanConfig(1));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fans != null && fans.Text != "")
|
|
||||||
{
|
|
||||||
fans.LoadFans();
|
|
||||||
fans.ResetApplyLabel();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (notify && (oldMode != PerformanceMode))
|
if (notify && (oldMode != PerformanceMode))
|
||||||
{
|
{
|
||||||
@@ -736,6 +764,16 @@ namespace GHelper
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AutoFansAndPower();
|
||||||
|
|
||||||
|
if (fans != null && fans.Text != "")
|
||||||
|
{
|
||||||
|
fans.InitFans();
|
||||||
|
fans.InitPower();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -954,20 +992,8 @@ namespace GHelper
|
|||||||
{
|
{
|
||||||
checkStartup.Checked = status;
|
checkStartup.Checked = status;
|
||||||
}
|
}
|
||||||
private void checkStartup_CheckedChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
CheckBox chk = (CheckBox)sender;
|
|
||||||
if (chk.Checked)
|
|
||||||
{
|
|
||||||
Startup.Schedule();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Startup.UnSchedule();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetBatteryChargeLimit(int limit = 100)
|
public void SetBatteryChargeLimit(int limit)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (limit < 40 || limit > 100) return;
|
if (limit < 40 || limit > 100) return;
|
||||||
|
|||||||
BIN
screenshot.png
BIN
screenshot.png
Binary file not shown.
|
Before Width: | Height: | Size: 2.3 MiB After Width: | Height: | Size: 2.4 MiB |
Reference in New Issue
Block a user