Compare commits

...

10 Commits

Author SHA1 Message Date
seerge
e3e9022111 Timer fix 2023-03-06 00:14:37 +01:00
seerge
24014dd20f Fix 2023-03-05 23:26:39 +01:00
seerge
321bc2623d Added support for animated GIF in animatrix 2023-03-05 23:14:48 +01:00
seerge
52b07843a2 UI Fixes 2023-03-05 19:59:07 +01:00
seerge
5038ff2315 Merge branch 'main' of https://github.com/seerge/g14-helper 2023-03-05 18:23:40 +01:00
seerge
c8f4c4b0d4 Added more actions for m3/m4, fixed scaling 2023-03-05 18:23:38 +01:00
seerge
319401af5d Update README.md 2023-03-04 13:34:27 +01:00
seerge
aa30f472ad Update README.md 2023-03-04 12:57:41 +01:00
seerge
b40eb50e90 Readme 2023-03-04 00:23:04 +01:00
seerge
1f47b031f6 Screenshot 2023-03-04 00:22:48 +01:00
17 changed files with 491 additions and 363 deletions

View File

@@ -2,6 +2,7 @@
using System.Management;
using System.Runtime.InteropServices;
public class ASUSWmi
{

View File

@@ -1,11 +1,11 @@
// Source thanks to https://github.com/vddCore/Starlight :)
// Source thanks to https://github.com/vddCore/Starlight with some adjustments from me
using System.Text;
using Starlight.Communication;
using System.Diagnostics;
using System.Text;
namespace Starlight.AnimeMatrix
{
public class BuiltInAnimation
{
public enum Startup
@@ -72,13 +72,41 @@ namespace Starlight.AnimeMatrix
public int LedCount => 1450;
public int Rows => 61;
private readonly byte[] _displayBuffer = new byte[UpdatePageLength * 3];
private byte[] _displayBuffer = new byte[UpdatePageLength * 3];
private List<byte[]> frames = new List<byte[]>();
private int frameIndex = 0;
public AnimeMatrixDevice()
: base(0x0B05, 0x193B, 640)
{
}
public byte[] GetBuffer()
{
return _displayBuffer;
}
public void PresentNextFrame()
{
//Debug.WriteLine(frameIndex);
if (frameIndex >= frames.Count) frameIndex = 0;
_displayBuffer = frames[frameIndex];
Present();
frameIndex++;
}
public void ClearFrames()
{
frames.Clear();
frameIndex = 0;
}
public void AddFrame()
{
frames.Add(_displayBuffer.ToArray());
}
public void SendRaw(params byte[] data)
{
Set(Packet<AnimeMatrixPacket>(data));
@@ -91,7 +119,7 @@ namespace Starlight.AnimeMatrix
}
public int Columns(int row)
{
EnsureRowInRange(row);
EnsureRowInRange(row);
return 34 - EmptyColumns(row);
}
@@ -138,7 +166,6 @@ namespace Starlight.AnimeMatrix
public void SetLedPlanar(int x, int y, byte value)
{
EnsureRowInRange(y);
var ledsInRow = Columns(y);
var start = RowToLinearAddress(y) - EmptyColumns(y);
if (x > EmptyColumns(y))
@@ -204,13 +231,48 @@ namespace Starlight.AnimeMatrix
var enabled = enable ? (byte)0x00 : (byte)0x80;
Set(Packet<AnimeMatrixPacket>(0xC4, 0x01, enabled));
}
public void SetBuiltInAnimation(bool enable, BuiltInAnimation animation)
{
SetBuiltInAnimation(enable);
Set(Packet<AnimeMatrixPacket>(0xC5, animation.AsByte));
}
public void GenerateFrame(Image image)
{
int width = 34 * 3;
int height = 61;
float scale;
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, 34, 61);
for (int y = 0; y < bmp.Height; y++)
{
for (int x = 0; x < bmp.Width; x++)
{
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)
{
if (row < 0 || row >= Rows)

View File

@@ -1,4 +1,5 @@
using System.Text.Json;
public class AppConfig
{

View File

@@ -3,8 +3,8 @@
public class Aura
{
static byte[] MESSAGE_SET = { 0x5d, 0xb5 };
static byte[] MESSAGE_APPLY = { 0x5d, 0xb4 };
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;

View File

@@ -1,6 +1,5 @@
// Source thanks to https://github.com/vddCore/Starlight :)
using Starlight.Communication.Platform;
namespace Starlight.Communication

View File

@@ -1,8 +1,5 @@
// Source thanks to https://github.com/vddCore/Starlight :)
using System.ComponentModel;
using HidSharp;
namespace Starlight.Communication
{
public abstract class Packet
@@ -20,7 +17,7 @@ namespace Starlight.Communication
"Packet length must be at least 1."
);
}
Data = new byte[packetLength];
Data[0] = reportId;
@@ -33,7 +30,7 @@ namespace Starlight.Communication
"Your packet length does not allow for initial data to be appended."
);
}
AppendData(data);
}
}

91
Fans.Designer.cs generated
View File

@@ -58,26 +58,29 @@
//
chartArea1.Name = "ChartArea1";
chartCPU.ChartAreas.Add(chartArea1);
chartCPU.Location = new Point(362, 30);
chartCPU.Location = new Point(195, 14);
chartCPU.Margin = new Padding(2, 1, 2, 1);
chartCPU.Name = "chartCPU";
chartCPU.Size = new Size(772, 464);
chartCPU.Size = new Size(416, 218);
chartCPU.TabIndex = 0;
chartCPU.Text = "chartCPU";
//
// buttonApply
//
buttonApply.Location = new Point(879, 1016);
buttonApply.Location = new Point(473, 476);
buttonApply.Margin = new Padding(2, 1, 2, 1);
buttonApply.Name = "buttonApply";
buttonApply.Size = new Size(254, 46);
buttonApply.Size = new Size(137, 22);
buttonApply.TabIndex = 1;
buttonApply.Text = "Apply Fan Curve";
buttonApply.UseVisualStyleBackColor = true;
//
// buttonReset
//
buttonReset.Location = new Point(362, 1016);
buttonReset.Location = new Point(195, 476);
buttonReset.Margin = new Padding(2, 1, 2, 1);
buttonReset.Name = "buttonReset";
buttonReset.Size = new Size(254, 46);
buttonReset.Size = new Size(137, 22);
buttonReset.TabIndex = 2;
buttonReset.Text = "Factory Defaults";
buttonReset.UseVisualStyleBackColor = true;
@@ -86,9 +89,10 @@
//
chartArea2.Name = "ChartArea1";
chartGPU.ChartAreas.Add(chartArea2);
chartGPU.Location = new Point(362, 511);
chartGPU.Location = new Point(195, 240);
chartGPU.Margin = new Padding(2, 1, 2, 1);
chartGPU.Name = "chartGPU";
chartGPU.Size = new Size(772, 480);
chartGPU.Size = new Size(416, 225);
chartGPU.TabIndex = 3;
chartGPU.Text = "chart1";
//
@@ -103,10 +107,11 @@
groupBox1.Controls.Add(label1);
groupBox1.Controls.Add(trackCPU);
groupBox1.Controls.Add(trackTotal);
groupBox1.Location = new Point(12, 12);
groupBox1.Location = new Point(6, 6);
groupBox1.Margin = new Padding(2, 1, 2, 1);
groupBox1.Name = "groupBox1";
groupBox1.Padding = new Padding(5);
groupBox1.Size = new Size(330, 979);
groupBox1.Padding = new Padding(3, 2, 3, 2);
groupBox1.Size = new Size(178, 459);
groupBox1.TabIndex = 4;
groupBox1.TabStop = false;
groupBox1.Text = "Power Limits (PPT)";
@@ -115,9 +120,10 @@
//
labelApplied.AutoSize = true;
labelApplied.ForeColor = Color.Tomato;
labelApplied.Location = new Point(14, 39);
labelApplied.Location = new Point(8, 18);
labelApplied.Margin = new Padding(2, 0, 2, 0);
labelApplied.Name = "labelApplied";
labelApplied.Size = new Size(143, 32);
labelApplied.Size = new Size(71, 15);
labelApplied.TabIndex = 13;
labelApplied.Text = "Not Applied";
//
@@ -126,9 +132,10 @@
pictureFine.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
pictureFine.BackgroundImage = Properties.Resources.everything_is_fine_itsfine;
pictureFine.BackgroundImageLayout = ImageLayout.Zoom;
pictureFine.Location = new Point(9, 731);
pictureFine.Location = new Point(5, 343);
pictureFine.Margin = new Padding(2, 1, 2, 1);
pictureFine.Name = "pictureFine";
pictureFine.Size = new Size(311, 240);
pictureFine.Size = new Size(167, 112);
pictureFine.TabIndex = 12;
pictureFine.TabStop = false;
pictureFine.Visible = false;
@@ -137,9 +144,10 @@
//
labelInfo.AutoSize = true;
labelInfo.Dock = DockStyle.Bottom;
labelInfo.Location = new Point(5, 942);
labelInfo.Location = new Point(3, 442);
labelInfo.Margin = new Padding(2, 0, 2, 0);
labelInfo.Name = "labelInfo";
labelInfo.Size = new Size(65, 32);
labelInfo.Size = new Size(32, 15);
labelInfo.TabIndex = 11;
labelInfo.Text = "label";
//
@@ -147,9 +155,10 @@
//
labelCPU.AutoSize = true;
labelCPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelCPU.Location = new Point(197, 125);
labelCPU.Location = new Point(106, 59);
labelCPU.Margin = new Padding(2, 0, 2, 0);
labelCPU.Name = "labelCPU";
labelCPU.Size = new Size(61, 32);
labelCPU.Size = new Size(30, 15);
labelCPU.TabIndex = 10;
labelCPU.Text = "CPU";
labelCPU.TextAlign = ContentAlignment.MiddleCenter;
@@ -158,9 +167,10 @@
//
labelTotal.AutoSize = true;
labelTotal.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelTotal.Location = new Point(39, 125);
labelTotal.Location = new Point(21, 59);
labelTotal.Margin = new Padding(2, 0, 2, 0);
labelTotal.Name = "labelTotal";
labelTotal.Size = new Size(70, 32);
labelTotal.Size = new Size(34, 15);
labelTotal.TabIndex = 9;
labelTotal.Text = "Total";
labelTotal.TextAlign = ContentAlignment.MiddleCenter;
@@ -168,9 +178,10 @@
// label2
//
label2.AutoSize = true;
label2.Location = new Point(200, 91);
label2.Location = new Point(108, 43);
label2.Margin = new Padding(2, 0, 2, 0);
label2.Name = "label2";
label2.Size = new Size(58, 32);
label2.Size = new Size(30, 15);
label2.TabIndex = 8;
label2.Text = "CPU";
label2.TextAlign = ContentAlignment.MiddleCenter;
@@ -178,33 +189,36 @@
// label1
//
label1.AutoSize = true;
label1.Location = new Point(41, 91);
label1.Location = new Point(22, 43);
label1.Margin = new Padding(2, 0, 2, 0);
label1.Name = "label1";
label1.Size = new Size(65, 32);
label1.Size = new Size(32, 15);
label1.TabIndex = 7;
label1.Text = "Total";
label1.TextAlign = ContentAlignment.MiddleCenter;
//
// trackCPU
//
trackCPU.Location = new Point(203, 178);
trackCPU.Location = new Point(109, 83);
trackCPU.Margin = new Padding(2, 1, 2, 1);
trackCPU.Maximum = 85;
trackCPU.Minimum = 15;
trackCPU.Name = "trackCPU";
trackCPU.Orientation = Orientation.Vertical;
trackCPU.Size = new Size(90, 444);
trackCPU.Size = new Size(45, 208);
trackCPU.TabIndex = 6;
trackCPU.TickFrequency = 5;
trackCPU.Value = 80;
//
// trackTotal
//
trackTotal.Location = new Point(42, 178);
trackTotal.Location = new Point(23, 83);
trackTotal.Margin = new Padding(2, 1, 2, 1);
trackTotal.Maximum = 150;
trackTotal.Minimum = 15;
trackTotal.Name = "trackTotal";
trackTotal.Orientation = Orientation.Vertical;
trackTotal.Size = new Size(90, 444);
trackTotal.Size = new Size(45, 208);
trackTotal.TabIndex = 5;
trackTotal.TickFrequency = 5;
trackTotal.TickStyle = TickStyle.TopLeft;
@@ -212,9 +226,10 @@
//
// buttonApplyPower
//
buttonApplyPower.Location = new Point(15, 1016);
buttonApplyPower.Location = new Point(8, 476);
buttonApplyPower.Margin = new Padding(2, 1, 2, 1);
buttonApplyPower.Name = "buttonApplyPower";
buttonApplyPower.Size = new Size(327, 46);
buttonApplyPower.Size = new Size(176, 22);
buttonApplyPower.TabIndex = 11;
buttonApplyPower.Text = "Apply Power Limits";
buttonApplyPower.UseVisualStyleBackColor = true;
@@ -222,18 +237,20 @@
// checkAuto
//
checkAuto.AutoSize = true;
checkAuto.Location = new Point(708, 1022);
checkAuto.Location = new Point(381, 479);
checkAuto.Margin = new Padding(2, 1, 2, 1);
checkAuto.Name = "checkAuto";
checkAuto.Size = new Size(165, 36);
checkAuto.Size = new Size(86, 19);
checkAuto.TabIndex = 12;
checkAuto.Text = "Auto Apply";
checkAuto.UseVisualStyleBackColor = true;
//
// Fans
//
AutoScaleDimensions = new SizeF(13F, 32F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1154, 1089);
AutoScaleDimensions = new SizeF(96F, 96F);
AutoScaleMode = AutoScaleMode.Dpi;
AutoSize = true;
ClientSize = new Size(621, 510);
Controls.Add(checkAuto);
Controls.Add(buttonApplyPower);
Controls.Add(groupBox1);
@@ -241,7 +258,7 @@
Controls.Add(buttonReset);
Controls.Add(buttonApply);
Controls.Add(chartCPU);
FormBorderStyle = FormBorderStyle.FixedSingle;
Margin = new Padding(2, 1, 2, 1);
MaximizeBox = false;
MdiChildrenMinimizedAnchorBottom = false;
MinimizeBox = false;

View File

@@ -15,7 +15,7 @@
<AssemblyName>GHelper</AssemblyName>
<PlatformTarget>x64</PlatformTarget>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AssemblyVersion>0.15</AssemblyVersion>
<AssemblyVersion>0.16</AssemblyVersion>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
</PropertyGroup>

40
Keyboard.Designer.cs generated
View File

@@ -35,11 +35,17 @@
labelM4 = new Label();
comboM3 = new ComboBox();
labelM3 = new Label();
textFNF4 = new TextBox();
comboFNF4 = new ComboBox();
labelFNF4 = new Label();
groupBox1.SuspendLayout();
SuspendLayout();
//
// groupBox1
//
groupBox1.Controls.Add(textFNF4);
groupBox1.Controls.Add(comboFNF4);
groupBox1.Controls.Add(labelFNF4);
groupBox1.Controls.Add(textM4);
groupBox1.Controls.Add(textM3);
groupBox1.Controls.Add(comboM4);
@@ -49,7 +55,7 @@
groupBox1.Dock = DockStyle.Top;
groupBox1.Location = new Point(10, 10);
groupBox1.Name = "groupBox1";
groupBox1.Size = new Size(751, 196);
groupBox1.Size = new Size(751, 242);
groupBox1.TabIndex = 0;
groupBox1.TabStop = false;
groupBox1.Text = "Key Bindings";
@@ -58,7 +64,7 @@
//
textM4.Location = new Point(411, 113);
textM4.Name = "textM4";
textM4.PlaceholderText = "notepad /p \"file.txt\"";
textM4.PlaceholderText = "action";
textM4.Size = new Size(320, 39);
textM4.TabIndex = 5;
//
@@ -91,7 +97,7 @@
// comboM3
//
comboM3.FormattingEnabled = true;
comboM3.Items.AddRange(new object[] { "Volume Mute", "Play / Pause", "Toggle Aura", "Custom" });
comboM3.Items.AddRange(new object[] { "Default", "Volume Mute", "Play / Pause", "PrintScreen", "Toggle Aura", "Custom" });
comboM3.Location = new Point(93, 54);
comboM3.Name = "comboM3";
comboM3.Size = new Size(312, 40);
@@ -106,6 +112,31 @@
labelM3.TabIndex = 0;
labelM3.Text = "M3:";
//
// 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:";
//
// Keyboard
//
AutoScaleDimensions = new SizeF(13F, 32F);
@@ -135,5 +166,8 @@
private Label labelM4;
private TextBox textM4;
private TextBox textM3;
private TextBox textFNF4;
private ComboBox comboFNF4;
private Label labelFNF4;
}
}

View File

@@ -2,71 +2,68 @@
{
public partial class Keyboard : Form
{
Dictionary<string, string> customActions = new Dictionary<string, string>
{
{"","--------------" },
{"mute", "Volume Mute"},
{"screenshot", "Screenshot"},
{"play", "Play/Pause"},
{"aura", "Aura"},
{"ghelper", "Open GHelper"},
{"custom", "Custom"}
};
private void SetKeyCombo(ComboBox combo, TextBox txbox, string name)
{
if (name == "m4")
customActions[""] = "Performance";
if (name == "fnf4")
{
customActions[""] = "Aura";
customActions.Remove("aura");
}
combo.DropDownStyle = ComboBoxStyle.DropDownList;
combo.DataSource = new BindingSource(customActions, null);
combo.DisplayMember = "Value";
combo.ValueMember = "Key";
string action = Program.config.getConfigString(name);
combo.SelectedValue = (action is not null) ? action : "";
if (combo.SelectedValue is null) combo.SelectedValue = "";
combo.SelectedValueChanged += delegate
{
if (combo.SelectedValue is not null)
Program.config.setConfig(name, combo.SelectedValue.ToString());
};
txbox.Text = Program.config.getConfigString(name + "_custom");
txbox.TextChanged += delegate
{
Program.config.setConfig(name + "_custom", txbox.Text);
};
}
public Keyboard()
{
InitializeComponent();
comboM3.DropDownStyle = ComboBoxStyle.DropDownList;
comboM3.SelectedIndex = 0;
comboM4.DropDownStyle = ComboBoxStyle.DropDownList;
comboM4.SelectedIndex = 0;
comboM3.SelectedValueChanged += ComboM3_SelectedValueChanged;
comboM4.SelectedValueChanged += ComboM4_SelectedValueChanged;
textM3.TextChanged += TextM3_TextChanged;
textM4.TextChanged += TextM4_TextChanged;
SetKeyCombo(comboM3, textM3, "m3");
SetKeyCombo(comboM4, textM4, "m4");
SetKeyCombo(comboFNF4, textFNF4, "fnf4");
Shown += Keyboard_Shown;
}
private void TextM3_TextChanged(object? sender, EventArgs e)
{
if (sender is null) return;
TextBox tb = (TextBox)sender;
Program.config.setConfig("m3_custom", tb.Text);
}
private void TextM4_TextChanged(object? sender, EventArgs e)
{
if (sender is null) return;
TextBox tb = (TextBox)sender;
Program.config.setConfig("m4_custom", tb.Text);
}
private void ComboM4_SelectedValueChanged(object? sender, EventArgs e)
{
if (sender is null) return;
ComboBox cmb = (ComboBox)sender;
Program.config.setConfig("m4", cmb.SelectedIndex);
}
private void ComboM3_SelectedValueChanged(object? sender, EventArgs e)
{
if (sender is null) return;
ComboBox cmb = (ComboBox)sender;
Program.config.setConfig("m3", cmb.SelectedIndex);
}
private void Keyboard_Shown(object? sender, EventArgs e)
{
Top = Program.settingsForm.Top;
Left = Program.settingsForm.Left - Width - 5;
int m3 = Program.config.getConfig("m3");
int m4 = Program.config.getConfig("m4");
if (m3 != -1)
comboM3.SelectedIndex = m3;
if (m4 != -1)
comboM4.SelectedIndex = m4;
textM3.Text = Program.config.getConfigString("m3_custom");
textM4.Text = Program.config.getConfigString("m4_custom");
}
}
}

View File

@@ -11,6 +11,7 @@ public class NativeMethods
public const int VK_MEDIA_PLAY_PAUSE = 0xB3;
public const int VK_MEDIA_PREV_TRACK = 0xB1;
public const int VK_VOLUME_MUTE = 0xAD;
public const int VK_SNAPSHOT = 0x2C;
[DllImport("user32.dll", SetLastError = true)]
public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo);

View File

@@ -61,6 +61,7 @@ namespace GHelper
settingsForm.InitGPUMode();
settingsForm.InitBoost();
settingsForm.InitAura();
settingsForm.InitMatrix();
settingsForm.VisualiseGPUAuto(config.getConfig("gpu_auto"));
settingsForm.VisualiseScreenAuto(config.getConfig("screen_auto"));
@@ -82,6 +83,9 @@ namespace GHelper
settingsForm.AutoGPUMode(isPlugged);
settingsForm.AutoScreen(isPlugged);
settingsForm.AutoPerformance(isPlugged);
settingsForm.SetAnimeMatrix();
settingsForm.SetBatteryChargeLimit(config.getConfig("charge_limit"));
}
@@ -109,6 +113,68 @@ namespace GHelper
}
static void CustomKey(string configKey = "m3")
{
string command = config.getConfigString(configKey + "_custom");
int intKey;
try
{
intKey = Convert.ToInt32(command, 16);
} catch
{
intKey = -1;
}
if (intKey > 0)
NativeMethods.KeyPress(intKey);
else
LaunchProcess(command);
}
static void KeyProcess(string name = "m3")
{
string action = config.getConfigString(name);
if (action is null || action.Length <= 1)
{
if (name == "m4")
action = "performance";
if (name == "fnf4")
action = "aura";
}
switch (action)
{
case "mute":
NativeMethods.KeyPress(NativeMethods.VK_VOLUME_MUTE);
break;
case "play":
NativeMethods.KeyPress(NativeMethods.VK_MEDIA_PLAY_PAUSE);
break;
case "screenshot":
NativeMethods.KeyPress(NativeMethods.VK_SNAPSHOT);
break;
case "aura":
settingsForm.BeginInvoke(settingsForm.CycleAuraMode);
break;
case "performance":
settingsForm.BeginInvoke(settingsForm.CyclePerformanceMode);
break;
case "ghelper":
settingsForm.BeginInvoke(SettingsToggle);
break;
case "custom":
CustomKey(name);
break;
default:
break;
}
}
static void WatcherEventArrived(object sender, EventArrivedEventArgs e)
{
var collection = (ManagementEventWatcher)sender;
@@ -122,64 +188,17 @@ namespace GHelper
switch (EventID)
{
case 124: // M3
switch (config.getConfig("m3"))
{
case 1:
NativeMethods.KeyPress(NativeMethods.VK_MEDIA_PLAY_PAUSE);
break;
case 2:
settingsForm.BeginInvoke(settingsForm.CycleAuraMode);
break;
case 3:
LaunchProcess(config.getConfigString("m3_custom"));
break;
default:
NativeMethods.KeyPress(NativeMethods.VK_VOLUME_MUTE);
break;
}
KeyProcess("m3");
return;
case 56: // M4 / Rog button
switch (config.getConfig("m4"))
{
case 1:
settingsForm.BeginInvoke(SettingsToggle);
break;
case 2:
LaunchProcess(config.getConfigString("m4_custom"));
break;
default:
settingsForm.BeginInvoke(settingsForm.CyclePerformanceMode);
break;
}
KeyProcess("m4");
return;
case 174: // FN+F5
settingsForm.BeginInvoke(settingsForm.CyclePerformanceMode);
return;
case 179: // FN+F4
settingsForm.BeginInvoke(delegate
{
settingsForm.CycleAuraMode();
});
KeyProcess("fnf4");
return;
case 87: // Battery
/*
settingsForm.BeginInvoke(delegate
{
settingsForm.AutoGPUMode(0);
settingsForm.AutoScreen(0);
});
*/
return;
case 88: // Plugged
/*
settingsForm.BeginInvoke(delegate
{
settingsForm.AutoScreen(1);
settingsForm.AutoGPUMode(1);
});
*/
return;
}

View File

@@ -1,18 +1,23 @@
# G-Helper (For G14, G15, ROG FLOW, and others)
# G-Helper (For Asus ROG Zephyrus G14, G15, Flow X13, Flow X16, and others)
A small utility that allows you do almost everyting you could do with Armory Crate but without extra bloat and unnecessary services.
### NEW! Experimental feature: **Set Power limits (PPT) - Total and CPU**.
## NEW (and experimental) features
1. Switch between default **Performance modes** - Silent / Balanced / Turbo and apply default fan curves
1. Set Power limits (PPT) for Total (APU + dGPU) and CPU.
2. Anime matrix control thanks to https://github.com/vddCore/Starlight
## Main features
1. Switch between built-in system **Performance modes** Silent / Balanced / Turbo and apply default fan curves
2. Switch between Eco / Standard or Ultimate **GPU modes**
3. Change laptop screen refresh rate - 60hz or your maximum (120hz, 144hz, etc depending on the model) with display overdrive (OD)
4. View default fan profiles for every mode and **auto apply** custom ones
5. Control keyboard backlit animation and colors
6. Set battery charge limit to preserve battery
6. Set battery charge limit to preserve battery health
7. Monitor CPU temperature, fan speeds and battery discharge rate
8. **Automatically switch to Eco(iGPU)/60hz on battery** and back to Standard(GPU)/120hz modes when plugged
9. Support for M4 key / FN+F5 to cycle through performance modes (with OSD notification) and FN+F4 to cycle through keeyboard animation modes
9. Support for FN+F5 to cycle through performance modes (with OSD notification) and FN+F4 to cycle through keeyboard animation modes
10. Basic keybindings for M3 and M4 keys
11. Turn cpu turbo boost on/off with one checkbox to keep temps cooler
@@ -20,9 +25,7 @@ Designed and developed for Asus Zephyrus G14 2022 (with AMD Radeon iGPU and dGPU
To keep autoswitching and hotkeys work app needs to stay in running in tray. It doesn't consume any resources.
I also recommend to keep "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 an running even after MyASUS uninstall.
It's part of [Asus System Controll Interface](https://www.asus.com/support/FAQ/1047338/). You can install it, and later disable / remove unnecesarily services by running [this bat file](https://raw.githubusercontent.com/seerge/g-helper/main/stop-asus-sv.bat ) as admin.
I recommend to keep "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 an running even after MyASUS uninstall. It's part of [Asus System Controll Interface](https://www.asus.com/support/FAQ/1047338/). You can install it, and later disable / remove unnecesarily services by running [this bat file](https://raw.githubusercontent.com/seerge/g-helper/main/stop-asus-sv.bat ) as admin.
### [Download latest release](https://github.com/seerge/g-helper/releases)
@@ -30,7 +33,7 @@ It's part of [Asus System Controll Interface](https://www.asus.com/support/FAQ/1
## Performance Profile switching
Profiles are **same** as in Armory Crate, including default fan curves
Profiles 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)
2. Balanced (balanced fans, 100W PPT total, up to 45W PPT to CPU)
@@ -50,16 +53,13 @@ PPTs are shown for G14 2022, for other models PPTs will be different as they are
2. Unzip to a folder of your choice
3. Run **GHelper.exe**
Note: Uses low level ASUS ACPI commands to do switching and doens't require Armory Crate to be isntalled at all.
Doesn't require administrator privileges to run (anymore)!
Note: Uses low level ASUS ACPI commands and doens't require Armory Crate to be installed at all! Doesn't need administrator privileges to run!
I don`t have Microsoft certificate to sign app yet, so if you set a warning from Windows Defender on launch (Windows Protected your PC), click More Info -> Run anyway.
I don`t have Microsoft certificate to sign app yet, so if you get a warning from Windows Defender on launch (Windows Protected your PC), click More Info -> Run anyway. Alternatively you can compile and run project by yourself using Visual Studio :)
Alternatively you can comile and run project by yourself :)
Settings file is storer at %AppData%\GHelper
Settings file is stored at %AppData%\GHelper
P.S.: It's not recommended to use app in combination with Armory Crate, cause they adjust same settings.
Please keep in mind, that if you also run MyASUS app periodically it will also try to adjust same battery charge settings
------------------

263
Settings.Designer.cs generated
View File

@@ -88,10 +88,10 @@
// checkStartup
//
checkStartup.AutoSize = true;
checkStartup.Location = new Point(35, 1138);
checkStartup.Margin = new Padding(4, 2, 4, 2);
checkStartup.Location = new Point(18, 569);
checkStartup.Margin = new Padding(2, 1, 2, 1);
checkStartup.Name = "checkStartup";
checkStartup.Size = new Size(206, 36);
checkStartup.Size = new Size(105, 19);
checkStartup.TabIndex = 2;
checkStartup.Text = "Run on Startup";
checkStartup.UseVisualStyleBackColor = true;
@@ -101,12 +101,12 @@
//
trackBattery.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
trackBattery.LargeChange = 20;
trackBattery.Location = new Point(22, 1030);
trackBattery.Margin = new Padding(4, 2, 4, 2);
trackBattery.Location = new Point(11, 515);
trackBattery.Margin = new Padding(2, 1, 2, 1);
trackBattery.Maximum = 100;
trackBattery.Minimum = 50;
trackBattery.Name = "trackBattery";
trackBattery.Size = new Size(682, 90);
trackBattery.Size = new Size(337, 45);
trackBattery.SmallChange = 10;
trackBattery.TabIndex = 3;
trackBattery.TickFrequency = 10;
@@ -117,10 +117,10 @@
//
labelBatteryTitle.AutoSize = true;
labelBatteryTitle.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelBatteryTitle.Location = new Point(80, 992);
labelBatteryTitle.Margin = new Padding(4, 0, 4, 0);
labelBatteryTitle.Location = new Point(40, 496);
labelBatteryTitle.Margin = new Padding(2, 0, 2, 0);
labelBatteryTitle.Name = "labelBatteryTitle";
labelBatteryTitle.Size = new Size(248, 32);
labelBatteryTitle.Size = new Size(122, 15);
labelBatteryTitle.TabIndex = 4;
labelBatteryTitle.Text = "Battery Charge Limit";
//
@@ -128,20 +128,20 @@
//
pictureBattery.BackgroundImage = (Image)resources.GetObject("pictureBattery.BackgroundImage");
pictureBattery.BackgroundImageLayout = ImageLayout.Zoom;
pictureBattery.Location = new Point(38, 990);
pictureBattery.Margin = new Padding(4, 2, 4, 2);
pictureBattery.Location = new Point(19, 495);
pictureBattery.Margin = new Padding(2, 1, 2, 1);
pictureBattery.Name = "pictureBattery";
pictureBattery.Size = new Size(36, 38);
pictureBattery.Size = new Size(18, 19);
pictureBattery.TabIndex = 6;
pictureBattery.TabStop = false;
//
// labelGPUFan
//
labelGPUFan.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelGPUFan.Location = new Point(344, 262);
labelGPUFan.Margin = new Padding(4, 0, 4, 0);
labelGPUFan.Location = new Point(168, 131);
labelGPUFan.Margin = new Padding(2, 0, 2, 0);
labelGPUFan.Name = "labelGPUFan";
labelGPUFan.Size = new Size(348, 32);
labelGPUFan.Size = new Size(174, 16);
labelGPUFan.TabIndex = 8;
labelGPUFan.Text = " ";
labelGPUFan.TextAlign = ContentAlignment.TopRight;
@@ -156,12 +156,12 @@
tableGPU.Controls.Add(buttonUltimate, 2, 0);
tableGPU.Controls.Add(buttonStandard, 1, 0);
tableGPU.Controls.Add(buttonEco, 0, 0);
tableGPU.Location = new Point(22, 304);
tableGPU.Margin = new Padding(4, 2, 4, 2);
tableGPU.Location = new Point(11, 152);
tableGPU.Margin = new Padding(2, 1, 2, 1);
tableGPU.Name = "tableGPU";
tableGPU.RowCount = 1;
tableGPU.RowStyles.Add(new RowStyle(SizeType.Absolute, 108F));
tableGPU.Size = new Size(682, 108);
tableGPU.RowStyles.Add(new RowStyle(SizeType.Absolute, 54F));
tableGPU.Size = new Size(337, 54);
tableGPU.TabIndex = 7;
//
// buttonUltimate
@@ -170,10 +170,10 @@
buttonUltimate.Dock = DockStyle.Fill;
buttonUltimate.FlatAppearance.BorderSize = 0;
buttonUltimate.FlatStyle = FlatStyle.Flat;
buttonUltimate.Location = new Point(462, 12);
buttonUltimate.Margin = new Padding(8, 12, 8, 12);
buttonUltimate.Location = new Point(228, 6);
buttonUltimate.Margin = new Padding(4, 6, 4, 6);
buttonUltimate.Name = "buttonUltimate";
buttonUltimate.Size = new Size(212, 84);
buttonUltimate.Size = new Size(105, 42);
buttonUltimate.TabIndex = 2;
buttonUltimate.Text = "Ultimate";
buttonUltimate.UseVisualStyleBackColor = false;
@@ -184,10 +184,10 @@
buttonStandard.Dock = DockStyle.Fill;
buttonStandard.FlatAppearance.BorderSize = 0;
buttonStandard.FlatStyle = FlatStyle.Flat;
buttonStandard.Location = new Point(235, 12);
buttonStandard.Margin = new Padding(8, 12, 8, 12);
buttonStandard.Location = new Point(116, 6);
buttonStandard.Margin = new Padding(4, 6, 4, 6);
buttonStandard.Name = "buttonStandard";
buttonStandard.Size = new Size(211, 84);
buttonStandard.Size = new Size(104, 42);
buttonStandard.TabIndex = 1;
buttonStandard.Text = "Standard";
buttonStandard.UseVisualStyleBackColor = false;
@@ -199,10 +199,10 @@
buttonEco.Dock = DockStyle.Fill;
buttonEco.FlatAppearance.BorderSize = 0;
buttonEco.FlatStyle = FlatStyle.Flat;
buttonEco.Location = new Point(8, 12);
buttonEco.Margin = new Padding(8, 12, 8, 12);
buttonEco.Location = new Point(4, 6);
buttonEco.Margin = new Padding(4, 6, 4, 6);
buttonEco.Name = "buttonEco";
buttonEco.Size = new Size(211, 84);
buttonEco.Size = new Size(104, 42);
buttonEco.TabIndex = 0;
buttonEco.Text = "Eco";
buttonEco.UseVisualStyleBackColor = false;
@@ -211,10 +211,10 @@
//
labelGPU.AutoSize = true;
labelGPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelGPU.Location = new Point(78, 264);
labelGPU.Margin = new Padding(4, 0, 4, 0);
labelGPU.Location = new Point(39, 132);
labelGPU.Margin = new Padding(2, 0, 2, 0);
labelGPU.Name = "labelGPU";
labelGPU.Size = new Size(136, 32);
labelGPU.Size = new Size(67, 15);
labelGPU.TabIndex = 9;
labelGPU.Text = "GPU Mode";
//
@@ -222,20 +222,20 @@
//
pictureGPU.BackgroundImage = (Image)resources.GetObject("pictureGPU.BackgroundImage");
pictureGPU.BackgroundImageLayout = ImageLayout.Zoom;
pictureGPU.Location = new Point(36, 262);
pictureGPU.Margin = new Padding(4, 2, 4, 2);
pictureGPU.Location = new Point(18, 131);
pictureGPU.Margin = new Padding(2, 1, 2, 1);
pictureGPU.Name = "pictureGPU";
pictureGPU.Size = new Size(36, 38);
pictureGPU.Size = new Size(18, 19);
pictureGPU.TabIndex = 10;
pictureGPU.TabStop = false;
//
// labelCPUFan
//
labelCPUFan.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelCPUFan.Location = new Point(326, 38);
labelCPUFan.Margin = new Padding(4, 0, 4, 0);
labelCPUFan.Location = new Point(159, 19);
labelCPUFan.Margin = new Padding(2, 0, 2, 0);
labelCPUFan.Name = "labelCPUFan";
labelCPUFan.Size = new Size(366, 32);
labelCPUFan.Size = new Size(183, 16);
labelCPUFan.TabIndex = 12;
labelCPUFan.Text = " ";
labelCPUFan.TextAlign = ContentAlignment.TopRight;
@@ -250,12 +250,12 @@
tablePerf.Controls.Add(buttonTurbo, 2, 0);
tablePerf.Controls.Add(buttonBalanced, 1, 0);
tablePerf.Controls.Add(buttonSilent, 0, 0);
tablePerf.Location = new Point(22, 76);
tablePerf.Margin = new Padding(4, 2, 4, 2);
tablePerf.Location = new Point(11, 38);
tablePerf.Margin = new Padding(2, 1, 2, 1);
tablePerf.Name = "tablePerf";
tablePerf.RowCount = 1;
tablePerf.RowStyles.Add(new RowStyle(SizeType.Absolute, 108F));
tablePerf.Size = new Size(682, 108);
tablePerf.RowStyles.Add(new RowStyle(SizeType.Absolute, 54F));
tablePerf.Size = new Size(337, 54);
tablePerf.TabIndex = 11;
//
// buttonTurbo
@@ -265,10 +265,10 @@
buttonTurbo.FlatAppearance.BorderColor = Color.FromArgb(192, 0, 0);
buttonTurbo.FlatAppearance.BorderSize = 0;
buttonTurbo.FlatStyle = FlatStyle.Flat;
buttonTurbo.Location = new Point(462, 12);
buttonTurbo.Margin = new Padding(8, 12, 8, 12);
buttonTurbo.Location = new Point(228, 6);
buttonTurbo.Margin = new Padding(4, 6, 4, 6);
buttonTurbo.Name = "buttonTurbo";
buttonTurbo.Size = new Size(212, 84);
buttonTurbo.Size = new Size(105, 42);
buttonTurbo.TabIndex = 2;
buttonTurbo.Text = "Turbo";
buttonTurbo.UseVisualStyleBackColor = false;
@@ -280,10 +280,10 @@
buttonBalanced.FlatAppearance.BorderColor = Color.FromArgb(0, 0, 192);
buttonBalanced.FlatAppearance.BorderSize = 0;
buttonBalanced.FlatStyle = FlatStyle.Flat;
buttonBalanced.Location = new Point(235, 12);
buttonBalanced.Margin = new Padding(8, 12, 8, 12);
buttonBalanced.Location = new Point(116, 6);
buttonBalanced.Margin = new Padding(4, 6, 4, 6);
buttonBalanced.Name = "buttonBalanced";
buttonBalanced.Size = new Size(211, 84);
buttonBalanced.Size = new Size(104, 42);
buttonBalanced.TabIndex = 1;
buttonBalanced.Text = "Balanced";
buttonBalanced.UseVisualStyleBackColor = false;
@@ -296,10 +296,10 @@
buttonSilent.FlatAppearance.BorderColor = Color.FromArgb(0, 192, 192);
buttonSilent.FlatAppearance.BorderSize = 0;
buttonSilent.FlatStyle = FlatStyle.Flat;
buttonSilent.Location = new Point(8, 12);
buttonSilent.Margin = new Padding(8, 12, 8, 12);
buttonSilent.Location = new Point(4, 6);
buttonSilent.Margin = new Padding(4, 6, 4, 6);
buttonSilent.Name = "buttonSilent";
buttonSilent.Size = new Size(211, 84);
buttonSilent.Size = new Size(104, 42);
buttonSilent.TabIndex = 0;
buttonSilent.Text = "Silent";
buttonSilent.UseVisualStyleBackColor = false;
@@ -309,10 +309,10 @@
picturePerf.BackgroundImage = (Image)resources.GetObject("picturePerf.BackgroundImage");
picturePerf.BackgroundImageLayout = ImageLayout.Zoom;
picturePerf.InitialImage = null;
picturePerf.Location = new Point(36, 36);
picturePerf.Margin = new Padding(4, 2, 4, 2);
picturePerf.Location = new Point(18, 18);
picturePerf.Margin = new Padding(2, 1, 2, 1);
picturePerf.Name = "picturePerf";
picturePerf.Size = new Size(36, 38);
picturePerf.Size = new Size(18, 19);
picturePerf.TabIndex = 14;
picturePerf.TabStop = false;
//
@@ -320,10 +320,10 @@
//
labelPerf.AutoSize = true;
labelPerf.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelPerf.Location = new Point(78, 38);
labelPerf.Margin = new Padding(4, 0, 4, 0);
labelPerf.Location = new Point(39, 19);
labelPerf.Margin = new Padding(2, 0, 2, 0);
labelPerf.Name = "labelPerf";
labelPerf.Size = new Size(234, 32);
labelPerf.Size = new Size(115, 15);
labelPerf.TabIndex = 13;
labelPerf.Text = "Performance Mode";
//
@@ -331,10 +331,10 @@
//
checkGPU.AutoSize = true;
checkGPU.ForeColor = SystemColors.GrayText;
checkGPU.Location = new Point(32, 412);
checkGPU.Margin = new Padding(4, 2, 4, 2);
checkGPU.Location = new Point(16, 206);
checkGPU.Margin = new Padding(2, 1, 2, 1);
checkGPU.Name = "checkGPU";
checkGPU.Size = new Size(550, 36);
checkGPU.Size = new Size(273, 19);
checkGPU.TabIndex = 15;
checkGPU.Text = "Set Eco on battery and Standard when plugged";
checkGPU.UseVisualStyleBackColor = true;
@@ -344,10 +344,10 @@
//
buttonQuit.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonQuit.BackColor = SystemColors.ButtonFace;
buttonQuit.Location = new Point(584, 1130);
buttonQuit.Margin = new Padding(4, 2, 4, 2);
buttonQuit.Location = new Point(288, 565);
buttonQuit.Margin = new Padding(2, 1, 2, 1);
buttonQuit.Name = "buttonQuit";
buttonQuit.Size = new Size(120, 48);
buttonQuit.Size = new Size(60, 24);
buttonQuit.TabIndex = 16;
buttonQuit.Text = "Quit";
buttonQuit.UseVisualStyleBackColor = false;
@@ -356,10 +356,10 @@
//
pictureScreen.BackgroundImage = (Image)resources.GetObject("pictureScreen.BackgroundImage");
pictureScreen.BackgroundImageLayout = ImageLayout.Zoom;
pictureScreen.Location = new Point(36, 496);
pictureScreen.Margin = new Padding(4, 2, 4, 2);
pictureScreen.Location = new Point(18, 248);
pictureScreen.Margin = new Padding(2, 1, 2, 1);
pictureScreen.Name = "pictureScreen";
pictureScreen.Size = new Size(36, 38);
pictureScreen.Size = new Size(18, 19);
pictureScreen.TabIndex = 18;
pictureScreen.TabStop = false;
//
@@ -367,10 +367,10 @@
//
labelSreen.AutoSize = true;
labelSreen.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelSreen.Location = new Point(78, 496);
labelSreen.Margin = new Padding(4, 0, 4, 0);
labelSreen.Location = new Point(39, 248);
labelSreen.Margin = new Padding(2, 0, 2, 0);
labelSreen.Name = "labelSreen";
labelSreen.Size = new Size(176, 32);
labelSreen.Size = new Size(87, 15);
labelSreen.TabIndex = 17;
labelSreen.Text = "Laptop Screen";
//
@@ -383,12 +383,12 @@
tableScreen.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F));
tableScreen.Controls.Add(button120Hz, 1, 0);
tableScreen.Controls.Add(button60Hz, 0, 0);
tableScreen.Location = new Point(22, 536);
tableScreen.Margin = new Padding(4, 2, 4, 2);
tableScreen.Location = new Point(11, 268);
tableScreen.Margin = new Padding(2, 1, 2, 1);
tableScreen.Name = "tableScreen";
tableScreen.RowCount = 1;
tableScreen.RowStyles.Add(new RowStyle(SizeType.Absolute, 108F));
tableScreen.Size = new Size(682, 108);
tableScreen.RowStyles.Add(new RowStyle(SizeType.Absolute, 54F));
tableScreen.Size = new Size(337, 54);
tableScreen.TabIndex = 19;
//
// button120Hz
@@ -398,10 +398,10 @@
button120Hz.FlatAppearance.BorderColor = SystemColors.ActiveBorder;
button120Hz.FlatAppearance.BorderSize = 0;
button120Hz.FlatStyle = FlatStyle.Flat;
button120Hz.Location = new Point(235, 12);
button120Hz.Margin = new Padding(8, 12, 8, 12);
button120Hz.Location = new Point(116, 6);
button120Hz.Margin = new Padding(4, 6, 4, 6);
button120Hz.Name = "button120Hz";
button120Hz.Size = new Size(211, 84);
button120Hz.Size = new Size(104, 42);
button120Hz.TabIndex = 1;
button120Hz.Text = "120Hz + OD";
button120Hz.UseVisualStyleBackColor = false;
@@ -415,10 +415,10 @@
button60Hz.FlatAppearance.BorderSize = 0;
button60Hz.FlatStyle = FlatStyle.Flat;
button60Hz.ForeColor = SystemColors.ControlText;
button60Hz.Location = new Point(8, 12);
button60Hz.Margin = new Padding(8, 12, 8, 12);
button60Hz.Location = new Point(4, 6);
button60Hz.Margin = new Padding(4, 6, 4, 6);
button60Hz.Name = "button60Hz";
button60Hz.Size = new Size(211, 84);
button60Hz.Size = new Size(104, 42);
button60Hz.TabIndex = 0;
button60Hz.Text = "60Hz";
button60Hz.UseVisualStyleBackColor = false;
@@ -427,10 +427,10 @@
//
checkScreen.AutoSize = true;
checkScreen.ForeColor = SystemColors.GrayText;
checkScreen.Location = new Point(32, 644);
checkScreen.Margin = new Padding(4, 2, 4, 2);
checkScreen.Location = new Point(16, 322);
checkScreen.Margin = new Padding(2, 1, 2, 1);
checkScreen.Name = "checkScreen";
checkScreen.Size = new Size(527, 36);
checkScreen.Size = new Size(261, 19);
checkScreen.TabIndex = 20;
checkScreen.Text = "Set 60Hz on battery, and back when plugged";
checkScreen.UseVisualStyleBackColor = true;
@@ -439,10 +439,10 @@
//
checkBoost.AutoSize = true;
checkBoost.ForeColor = SystemColors.GrayText;
checkBoost.Location = new Point(32, 184);
checkBoost.Margin = new Padding(4, 2, 4, 2);
checkBoost.Location = new Point(16, 92);
checkBoost.Margin = new Padding(2, 1, 2, 1);
checkBoost.Name = "checkBoost";
checkBoost.Size = new Size(320, 36);
checkBoost.Size = new Size(161, 19);
checkBoost.TabIndex = 21;
checkBoost.Text = "CPU Turbo Boost enabled";
checkBoost.UseVisualStyleBackColor = true;
@@ -451,10 +451,10 @@
//
pictureKeyboard.BackgroundImage = Properties.Resources.icons8_keyboard_48;
pictureKeyboard.BackgroundImageLayout = ImageLayout.Zoom;
pictureKeyboard.Location = new Point(36, 724);
pictureKeyboard.Margin = new Padding(4, 2, 4, 2);
pictureKeyboard.Location = new Point(18, 362);
pictureKeyboard.Margin = new Padding(2, 1, 2, 1);
pictureKeyboard.Name = "pictureKeyboard";
pictureKeyboard.Size = new Size(36, 36);
pictureKeyboard.Size = new Size(18, 18);
pictureKeyboard.TabIndex = 23;
pictureKeyboard.TabStop = false;
//
@@ -462,10 +462,10 @@
//
label1.AutoSize = true;
label1.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
label1.Location = new Point(78, 724);
label1.Margin = new Padding(4, 0, 4, 0);
label1.Location = new Point(39, 362);
label1.Margin = new Padding(2, 0, 2, 0);
label1.Name = "label1";
label1.Size = new Size(210, 32);
label1.Size = new Size(101, 15);
label1.TabIndex = 22;
label1.Text = "Laptop Keyboard";
//
@@ -473,12 +473,12 @@
//
comboKeyboard.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
comboKeyboard.FormattingEnabled = true;
comboKeyboard.ItemHeight = 32;
comboKeyboard.ItemHeight = 15;
comboKeyboard.Items.AddRange(new object[] { "Static", "Breathe", "Strobe", "Rainbow", "Dingding" });
comboKeyboard.Location = new Point(30, 770);
comboKeyboard.Location = new Point(15, 385);
comboKeyboard.Margin = new Padding(0);
comboKeyboard.Name = "comboKeyboard";
comboKeyboard.Size = new Size(211, 40);
comboKeyboard.Size = new Size(108, 23);
comboKeyboard.TabIndex = 24;
comboKeyboard.TabStop = false;
//
@@ -489,10 +489,10 @@
buttonKeyboardColor.FlatAppearance.BorderColor = Color.Red;
buttonKeyboardColor.FlatAppearance.BorderSize = 2;
buttonKeyboardColor.ForeColor = SystemColors.ControlText;
buttonKeyboardColor.Location = new Point(257, 766);
buttonKeyboardColor.Location = new Point(128, 383);
buttonKeyboardColor.Margin = new Padding(0);
buttonKeyboardColor.Name = "buttonKeyboardColor";
buttonKeyboardColor.Size = new Size(211, 48);
buttonKeyboardColor.Size = new Size(106, 25);
buttonKeyboardColor.TabIndex = 25;
buttonKeyboardColor.Text = "Color ";
buttonKeyboardColor.UseVisualStyleBackColor = false;
@@ -500,10 +500,10 @@
// labelBattery
//
labelBattery.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelBattery.Location = new Point(420, 991);
labelBattery.Margin = new Padding(4, 0, 4, 0);
labelBattery.Location = new Point(206, 496);
labelBattery.Margin = new Padding(2, 0, 2, 0);
labelBattery.Name = "labelBattery";
labelBattery.Size = new Size(276, 32);
labelBattery.Size = new Size(138, 16);
labelBattery.TabIndex = 27;
labelBattery.Text = " ";
labelBattery.TextAlign = ContentAlignment.TopRight;
@@ -513,10 +513,10 @@
buttonFans.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonFans.BackColor = SystemColors.ButtonFace;
buttonFans.FlatAppearance.BorderSize = 0;
buttonFans.Location = new Point(486, 186);
buttonFans.Margin = new Padding(4, 2, 4, 2);
buttonFans.Location = new Point(239, 93);
buttonFans.Margin = new Padding(2, 1, 2, 1);
buttonFans.Name = "buttonFans";
buttonFans.Size = new Size(210, 48);
buttonFans.Size = new Size(105, 24);
buttonFans.TabIndex = 28;
buttonFans.Text = "Fans and Power";
buttonFans.UseVisualStyleBackColor = false;
@@ -526,27 +526,29 @@
buttonKeyboard.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonKeyboard.BackColor = SystemColors.ButtonFace;
buttonKeyboard.FlatAppearance.BorderSize = 0;
buttonKeyboard.Location = new Point(486, 765);
buttonKeyboard.Margin = new Padding(4, 2, 4, 2);
buttonKeyboard.Location = new Point(238, 383);
buttonKeyboard.Margin = new Padding(2, 1, 2, 1);
buttonKeyboard.Name = "buttonKeyboard";
buttonKeyboard.Size = new Size(209, 48);
buttonKeyboard.Size = new Size(104, 24);
buttonKeyboard.TabIndex = 29;
buttonKeyboard.Text = "Extra";
buttonKeyboard.UseVisualStyleBackColor = false;
//
// pictureColor
//
pictureColor.Location = new Point(431, 781);
pictureColor.Location = new Point(216, 390);
pictureColor.Margin = new Padding(2);
pictureColor.Name = "pictureColor";
pictureColor.Size = new Size(20, 20);
pictureColor.Size = new Size(10, 10);
pictureColor.TabIndex = 30;
pictureColor.TabStop = false;
//
// pictureColor2
//
pictureColor2.Location = new Point(405, 781);
pictureColor2.Location = new Point(202, 390);
pictureColor2.Margin = new Padding(2);
pictureColor2.Name = "pictureColor2";
pictureColor2.Size = new Size(20, 20);
pictureColor2.Size = new Size(10, 10);
pictureColor2.TabIndex = 31;
pictureColor2.TabStop = false;
//
@@ -555,9 +557,10 @@
labelVersion.AutoSize = true;
labelVersion.Font = new Font("Segoe UI", 9F, FontStyle.Underline, GraphicsUnit.Point);
labelVersion.ForeColor = SystemColors.ControlDark;
labelVersion.Location = new Point(36, 1088);
labelVersion.Location = new Point(18, 544);
labelVersion.Margin = new Padding(2, 0, 2, 0);
labelVersion.Name = "labelVersion";
labelVersion.Size = new Size(44, 32);
labelVersion.Size = new Size(22, 15);
labelVersion.TabIndex = 32;
labelVersion.Text = "v.0";
//
@@ -565,10 +568,10 @@
//
pictureMatrix.BackgroundImage = Properties.Resources.icons8_matrix_desktop_48;
pictureMatrix.BackgroundImageLayout = ImageLayout.Zoom;
pictureMatrix.Location = new Point(36, 858);
pictureMatrix.Margin = new Padding(4, 2, 4, 2);
pictureMatrix.Location = new Point(18, 429);
pictureMatrix.Margin = new Padding(2, 1, 2, 1);
pictureMatrix.Name = "pictureMatrix";
pictureMatrix.Size = new Size(36, 36);
pictureMatrix.Size = new Size(18, 18);
pictureMatrix.TabIndex = 34;
pictureMatrix.TabStop = false;
//
@@ -576,10 +579,10 @@
//
labelMatrix.AutoSize = true;
labelMatrix.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelMatrix.Location = new Point(78, 858);
labelMatrix.Margin = new Padding(4, 0, 4, 0);
labelMatrix.Location = new Point(39, 429);
labelMatrix.Margin = new Padding(2, 0, 2, 0);
labelMatrix.Name = "labelMatrix";
labelMatrix.Size = new Size(170, 32);
labelMatrix.Size = new Size(83, 15);
labelMatrix.TabIndex = 33;
labelMatrix.Text = "Anime Matrix";
//
@@ -587,12 +590,12 @@
//
comboMatrix.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
comboMatrix.FormattingEnabled = true;
comboMatrix.ItemHeight = 32;
comboMatrix.ItemHeight = 15;
comboMatrix.Items.AddRange(new object[] { "Off", "Dim", "Medium", "Bright" });
comboMatrix.Location = new Point(30, 910);
comboMatrix.Location = new Point(15, 455);
comboMatrix.Margin = new Padding(0);
comboMatrix.Name = "comboMatrix";
comboMatrix.Size = new Size(211, 40);
comboMatrix.Size = new Size(108, 23);
comboMatrix.TabIndex = 35;
comboMatrix.TabStop = false;
//
@@ -600,12 +603,12 @@
//
comboMatrixRunning.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
comboMatrixRunning.FormattingEnabled = true;
comboMatrixRunning.ItemHeight = 32;
comboMatrixRunning.ItemHeight = 15;
comboMatrixRunning.Items.AddRange(new object[] { "Binary Banner", "Rog Logo", "Picture" });
comboMatrixRunning.Location = new Point(257, 910);
comboMatrixRunning.Location = new Point(128, 455);
comboMatrixRunning.Margin = new Padding(0);
comboMatrixRunning.Name = "comboMatrixRunning";
comboMatrixRunning.Size = new Size(211, 40);
comboMatrixRunning.Size = new Size(108, 23);
comboMatrixRunning.TabIndex = 36;
comboMatrixRunning.TabStop = false;
//
@@ -614,19 +617,20 @@
buttonMatrix.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonMatrix.BackColor = SystemColors.ButtonFace;
buttonMatrix.FlatAppearance.BorderSize = 0;
buttonMatrix.Location = new Point(486, 905);
buttonMatrix.Margin = new Padding(4, 2, 4, 2);
buttonMatrix.Location = new Point(238, 453);
buttonMatrix.Margin = new Padding(2, 1, 2, 1);
buttonMatrix.Name = "buttonMatrix";
buttonMatrix.Size = new Size(209, 48);
buttonMatrix.Size = new Size(104, 24);
buttonMatrix.TabIndex = 37;
buttonMatrix.Text = "Picture";
buttonMatrix.UseVisualStyleBackColor = false;
//
// SettingsForm
//
AutoScaleDimensions = new SizeF(192F, 192F);
AutoScaleDimensions = new SizeF(96F, 96F);
AutoScaleMode = AutoScaleMode.Dpi;
ClientSize = new Size(736, 1203);
AutoSize = true;
ClientSize = new Size(364, 599);
Controls.Add(buttonMatrix);
Controls.Add(comboMatrixRunning);
Controls.Add(comboMatrix);
@@ -661,13 +665,12 @@
Controls.Add(labelBatteryTitle);
Controls.Add(trackBattery);
Controls.Add(checkStartup);
FormBorderStyle = FormBorderStyle.FixedSingle;
Margin = new Padding(4, 2, 4, 2);
Margin = new Padding(2, 1, 2, 1);
MaximizeBox = false;
MdiChildrenMinimizedAnchorBottom = false;
MinimizeBox = false;
Name = "SettingsForm";
Padding = new Padding(8, 12, 8, 12);
Padding = new Padding(4, 6, 4, 6);
ShowIcon = false;
StartPosition = FormStartPosition.CenterScreen;
Text = "G-Helper";

View File

@@ -1,10 +1,8 @@
using Starlight.AnimeMatrix;
using System.Diagnostics;
using System.Drawing.Imaging;
using System.Reflection;
using System.Timers;
using System.Drawing.Imaging;
using System.CodeDom.Compiler;
using System.Drawing;
namespace GHelper
{
@@ -20,12 +18,15 @@ namespace GHelper
static int buttonActive = 5;
static System.Timers.Timer aTimer = default!;
static System.Timers.Timer matrixTimer = new System.Timers.Timer();
public string perfName = "Balanced";
Fans fans;
Keyboard keyb;
AnimeMatrixDevice mat = new AnimeMatrixDevice();
public SettingsForm()
{
@@ -80,9 +81,6 @@ namespace GHelper
labelCPUFan.Click += LabelCPUFan_Click;
labelGPUFan.Click += LabelCPUFan_Click;
InitMatrix();
comboMatrix.DropDownStyle = ComboBoxStyle.DropDownList;
comboMatrixRunning.DropDownStyle = ComboBoxStyle.DropDownList;
comboMatrix.SelectedValueChanged += ComboMatrix_SelectedValueChanged;
@@ -90,62 +88,62 @@ namespace GHelper
buttonMatrix.Click += ButtonMatrix_Click;
matrixTimer.Enabled = false;
matrixTimer.Interval = 100;
matrixTimer.Elapsed += MatrixTimer_Elapsed;
SetTimer();
}
private void MatrixTimer_Elapsed(object? sender, ElapsedEventArgs e)
{
mat.PresentNextFrame();
}
void SetMatrixPicture(string fileName)
{
int width = 34 * 3;
int height = 61;
float scale;
Bitmap image;
Image image;
try
{
using (var bmpTemp = (Bitmap)Image.FromFile(fileName))
using (var fs = new FileStream(fileName, FileMode.Open))
{
image = new Bitmap(bmpTemp);
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, 34, 61);
var mat = new AnimeMatrixDevice();
mat.SetBuiltInAnimation(false);
for (int y = 0; y < bmp.Height; y++)
{
for (int x = 0; x < bmp.Width; x++)
{
var pixel = bmp.GetPixel(x, y);
byte color = (byte)((pixel.R + pixel.G + pixel.B) / 3);
mat.SetLedPlanar(x, y, color);
}
}
mat.Present();
mat.Dispose();
var ms = new MemoryStream();
fs.CopyTo(ms);
ms.Position = 0;
image = Image.FromStream(ms);
}
}
catch
{
Debug.WriteLine("Error loading picture");
return;
}
mat.SetBuiltInAnimation(false);
mat.ClearFrames();
FrameDimension dimension = new FrameDimension(image.FrameDimensionsList[0]);
int frameCount = image.GetFrameCount(dimension);
if (frameCount > 1)
{
for (int i = 0; i < frameCount; i++)
{
image.SelectActiveFrame(dimension, i);
mat.GenerateFrame(image);
mat.AddFrame();
}
matrixTimer.Enabled = true;
}
else
{
matrixTimer.Enabled = false;
mat.GenerateFrame(image);
mat.Present();
}
@@ -157,7 +155,7 @@ namespace GHelper
Thread t = new Thread((ThreadStart)(() =>
{
OpenFileDialog of = new OpenFileDialog();
of.Filter = "Image Files (*.bmp;*.jpg;*.jpeg,*.png)|*.BMP;*.JPG;*.JPEG;*.PNG";
of.Filter = "Image Files (*.bmp;*.jpg;*.jpeg,*.png,*.gif)|*.BMP;*.JPG;*.JPEG;*.PNG;*.GIF";
if (of.ShowDialog() == DialogResult.OK)
{
Program.config.setConfig("matrix_picture", of.FileName);
@@ -177,22 +175,25 @@ namespace GHelper
private void ComboMatrixRunning_SelectedValueChanged(object? sender, EventArgs e)
{
Program.config.setConfig("matrix_running", comboMatrixRunning.SelectedIndex);
SetAnimeMatrix();
}
private void ComboMatrix_SelectedValueChanged(object? sender, EventArgs e)
{
Program.config.setConfig("matrix_brightness", comboMatrix.SelectedIndex);
SetAnimeMatrix();
}
private void SetAnimeMatrix()
public void SetAnimeMatrix()
{
int brightness = comboMatrix.SelectedIndex;
int running = comboMatrixRunning.SelectedIndex;
int brightness = Program.config.getConfig("matrix_brightness");
int running = Program.config.getConfig("matrix_running");
var mat = new AnimeMatrixDevice();
if (brightness < 0) brightness = 0;
if (running < 0) running = 0;
BuiltInAnimation animation = new BuiltInAnimation(
(BuiltInAnimation.Running)running,
@@ -201,6 +202,7 @@ namespace GHelper
BuiltInAnimation.Startup.StaticEmergence
);
matrixTimer.Enabled = false;
if (brightness == 0)
{
@@ -222,10 +224,6 @@ namespace GHelper
}
}
mat.Dispose();
Program.config.setConfig("matrix_brightness", comboMatrix.SelectedIndex);
Program.config.setConfig("matrix_running", comboMatrixRunning.SelectedIndex);
}
@@ -572,7 +570,7 @@ namespace GHelper
if (Program.config.getConfig("fan_rpm") == 1)
return " Fan: " + (fan * 100).ToString() + "RPM";
else
return " Fan: " + Math.Round(fan / 0.6).ToString() + "%"; // relatively to 6000 rpm
return " Fan: " + Math.Min(Math.Round(fan / 0.6), 100).ToString() + "%"; // relatively to 6000 rpm
}
private static void RefreshSensors()
@@ -604,7 +602,7 @@ namespace GHelper
private static void OnTimedEvent(Object? source, ElapsedEventArgs? e)
{
RefreshSensors();
aTimer.Interval = 1000;
aTimer.Interval = 2000;
}
private void SettingsForm_VisibleChanged(object? sender, EventArgs e)
@@ -617,7 +615,7 @@ namespace GHelper
this.Top = Screen.FromControl(this).WorkingArea.Height - 10 - this.Height;
this.Activate();
aTimer.Interval = 100;
aTimer.Interval = 300;
aTimer.Enabled = true;
}

View File

@@ -55,7 +55,6 @@
<windowsSettings>
<!--<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitor/dpiAwareness>-->
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor, System</dpiAwareness>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB