Compare commits

...

7 Commits

Author SHA1 Message Date
seerge
02ae48092b Minor fixes, Factory default profiles will apply immediately on click 2023-02-23 14:14:11 +01:00
seerge
41d92d76cc Readme and new screenshot 2023-02-23 00:41:57 +01:00
seerge
44c3d9f3c7 Custom fan profiles with editor 2023-02-23 00:25:41 +01:00
seerge
146150b1e7 Cleanup 2023-02-22 19:30:58 +01:00
seerge
ccf4ae5126 Temporarily removed notifications, as they require extra 20mb lib 2023-02-22 19:24:04 +01:00
seerge
249fef0bb1 Merge branch 'main' of https://github.com/seerge/g14-helper 2023-02-22 19:20:14 +01:00
seerge
2ee9110016 Rewrite of core ASUSWmi module, now app doesn't need admin permissions 2023-02-22 19:14:31 +01:00
14 changed files with 1483 additions and 970 deletions

200
ASUSWmi.cs Normal file
View File

@@ -0,0 +1,200 @@
using System.Management;
using System.Runtime.InteropServices;
using System.Diagnostics;
public class ASUSWmi
{
const string FILE_NAME = @"\\.\\ATKACPI";
const uint CONTROL_CODE = 0x0022240C;
const uint DSTS = 0x53545344;
const uint DEVS = 0x53564544;
public const uint CPU_Fan = 0x00110013;
public const uint GPU_Fan = 0x00110014;
public const uint PerformanceMode = 0x00120075; // Thermal Control
public const uint GPUEco = 0x00090020;
public const uint GPUMux = 0x00090016;
public const uint BatteryLimit = 0x00120057;
public const uint ScreenOverdrive = 0x00050019;
public const uint DevsCPUFanCurve = 0x00110024;
public const uint DevsGPUFanCurve = 0x00110025;
public const int PerformanceBalanced = 0;
public const int PerformanceTurbo = 1;
public const int PerformanceSilent = 2;
public const int GPUModeEco = 0;
public const int GPUModeStandard = 1;
public const int GPUModeUltimate = 2;
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern IntPtr CreateFile(
string lpFileName,
uint dwDesiredAccess,
uint dwShareMode,
IntPtr lpSecurityAttributes,
uint dwCreationDisposition,
uint dwFlagsAndAttributes,
IntPtr hTemplateFile
);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool DeviceIoControl(
IntPtr hDevice,
uint dwIoControlCode,
byte[] lpInBuffer,
uint nInBufferSize,
byte[] lpOutBuffer,
uint nOutBufferSize,
ref uint lpBytesReturned,
IntPtr lpOverlapped
);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool CloseHandle(IntPtr hObject);
private const uint GENERIC_READ = 0x80000000;
private const uint GENERIC_WRITE = 0x40000000;
private const uint OPEN_EXISTING = 3;
private const uint FILE_ATTRIBUTE_NORMAL = 0x80;
private const uint FILE_SHARE_READ = 1;
private const uint FILE_SHARE_WRITE = 2;
private IntPtr handle;
public ASUSWmi()
{
handle = CreateFile(
FILE_NAME,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
IntPtr.Zero,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
IntPtr.Zero
);
if (handle == new IntPtr(-1))
{
throw new Exception("Can't connect to ACPI");
}
}
public void Control(uint dwIoControlCode, byte[] lpInBuffer, byte[] lpOutBuffer)
{
uint lpBytesReturned = 0;
bool result = DeviceIoControl(
handle,
dwIoControlCode,
lpInBuffer,
(uint)lpInBuffer.Length,
lpOutBuffer,
(uint)lpOutBuffer.Length,
ref lpBytesReturned,
IntPtr.Zero
);
}
public void Close()
{
CloseHandle(handle);
}
protected byte[] CallMethod(uint MethodID, byte[] args)
{
byte[] acpiBuf = new byte[8 + args.Length];
byte[] outBuffer = new byte[20];
BitConverter.GetBytes((uint)MethodID).CopyTo(acpiBuf, 0);
BitConverter.GetBytes((uint)args.Length).CopyTo(acpiBuf, 4);
Array.Copy(args, 0, acpiBuf, 8, args.Length);
// if (MethodID == DEVS) Debug.WriteLine(BitConverter.ToString(acpiBuf, 0, acpiBuf.Length));
Control(CONTROL_CODE, acpiBuf, outBuffer);
return outBuffer;
}
public void DeviceSet(uint DeviceID, int Status)
{
byte[] args = new byte[8];
BitConverter.GetBytes((uint)DeviceID).CopyTo(args, 0);
BitConverter.GetBytes((uint)Status).CopyTo(args, 4);
CallMethod(DEVS, args);
}
public void DeviceSet(uint DeviceID, byte[] Params)
{
byte[] args = new byte[4 + Params.Length];
BitConverter.GetBytes((uint)DeviceID).CopyTo(args, 0);
Params.CopyTo(args, 4);
CallMethod(DEVS, args);
}
public int DeviceGet(uint DeviceID)
{
byte[] args = new byte[8];
BitConverter.GetBytes((uint)DeviceID).CopyTo(args, 0);
byte[] status = CallMethod(DSTS, args);
return BitConverter.ToInt32(status, 0) - 65536;
}
public byte[] DeviceGetBuffer(uint DeviceID, uint Status = 0)
{
byte[] args = new byte[8];
BitConverter.GetBytes((uint)DeviceID).CopyTo(args, 0);
BitConverter.GetBytes((uint)Status).CopyTo(args, 4);
return CallMethod(DSTS, args);
}
public void SetFanCurve(int device, byte[] curve)
{
if (device == 1)
DeviceSet(DevsGPUFanCurve, curve);
else
DeviceSet(DevsCPUFanCurve, curve);
}
public byte[] GetFanCurve(int device, int mode = 0)
{
uint fan_mode;
// because it's asus, and modes are swapped here
switch (mode)
{
case 1:fan_mode = 2; break;
case 2: fan_mode = 1; break;
default: fan_mode = 0; break;
}
if (device == 1)
return DeviceGetBuffer(DevsGPUFanCurve, fan_mode);
else
return DeviceGetBuffer(DevsCPUFanCurve, fan_mode);
}
public void SubscribeToEvents(Action<object, EventArrivedEventArgs> EventHandler)
{
ManagementEventWatcher watcher = new ManagementEventWatcher();
watcher.EventArrived += new EventArrivedEventHandler(EventHandler);
watcher.Scope = new ManagementScope("root\\wmi");
watcher.Query = new WqlEventQuery("SELECT * FROM AsusAtkWmiEvent");
watcher.Start();
}
}

68
Aura.cs Normal file
View File

@@ -0,0 +1,68 @@
using HidLibrary;
public class Aura
{
static byte[] MESSAGE_SET = { 0x5d, 0xb5 };
static byte[] MESSAGE_APPLY = { 0x5d, 0xb4 };
public const int Static = 0;
public const int Breathe = 1;
public const int Strobe = 2;
public const int Rainbow = 3;
public const int Dingding = 10;
public const int SpeedSlow = 0;
public const int SpeedMedium = 1;
public const int SpeedHigh = 2;
public static int Mode = Static;
public static Color Color1 = Color.White;
public static Color Color2 = Color.Black;
public static int Speed = SpeedSlow;
public static byte[] AuraMessage(int mode, Color color, Color color2, int speed)
{
byte[] msg = new byte[17];
msg[0] = 0x5d;
msg[1] = 0xb3;
msg[2] = 0x00; // Zone
msg[3] = (byte)mode; // Aura Mode
msg[4] = (byte)(color.R); // R
msg[5] = (byte)(color.G); // G
msg[6] = (byte)(color.B); // B
msg[7] = (byte)speed; // aura.speed as u8;
msg[8] = 0; // aura.direction as u8;
msg[10] = (byte)(color2.R); // R
msg[11] = (byte)(color2.G); // G
msg[12] = (byte)(color2.B); // B
return msg;
}
public static void ApplyAura()
{
HidDevice[] HidDeviceList;
int[] deviceIds = { 0x1854, 0x1869, 0x1866, 0x19b6 };
HidDeviceList = HidDevices.Enumerate(0x0b05, deviceIds).ToArray();
foreach (HidDevice device in HidDeviceList)
{
if (device.IsConnected)
{
if (device.Description.IndexOf("HID") >= 0)
{
device.OpenDevice();
byte[] msg = AuraMessage(Mode, Color1, Color2, Speed);
device.Write(msg);
device.Write(MESSAGE_SET);
device.Write(MESSAGE_APPLY);
device.CloseDevice();
}
}
}
}
}

125
Fans.Designer.cs generated Normal file
View File

@@ -0,0 +1,125 @@
namespace GHelper
{
partial class Fans
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend1 = new System.Windows.Forms.DataVisualization.Charting.Legend();
System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series();
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.Legend legend2 = new System.Windows.Forms.DataVisualization.Charting.Legend();
System.Windows.Forms.DataVisualization.Charting.Series series2 = new System.Windows.Forms.DataVisualization.Charting.Series();
chartCPU = new System.Windows.Forms.DataVisualization.Charting.Chart();
buttonApply = new Button();
buttonReset = new Button();
chartGPU = new System.Windows.Forms.DataVisualization.Charting.Chart();
((System.ComponentModel.ISupportInitialize)chartCPU).BeginInit();
((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit();
SuspendLayout();
//
// chartCPU
//
chartArea1.Name = "ChartArea1";
chartCPU.ChartAreas.Add(chartArea1);
legend1.Name = "Legend1";
chartCPU.Legends.Add(legend1);
chartCPU.Location = new Point(16, 13);
chartCPU.Name = "chartCPU";
series1.ChartArea = "ChartArea1";
series1.Legend = "Legend1";
series1.Name = "Series1";
chartCPU.Series.Add(series1);
chartCPU.Size = new Size(900, 446);
chartCPU.TabIndex = 0;
chartCPU.Text = "chartCPU";
//
// buttonApply
//
buttonApply.Location = new Point(662, 944);
buttonApply.Name = "buttonApply";
buttonApply.Size = new Size(254, 46);
buttonApply.TabIndex = 1;
buttonApply.Text = "Apply Fan Curve";
buttonApply.UseVisualStyleBackColor = true;
//
// buttonReset
//
buttonReset.Location = new Point(402, 944);
buttonReset.Name = "buttonReset";
buttonReset.Size = new Size(254, 46);
buttonReset.TabIndex = 2;
buttonReset.Text = "Factory Defaults";
buttonReset.UseVisualStyleBackColor = true;
//
// chartGPU
//
chartArea2.Name = "ChartArea1";
chartGPU.ChartAreas.Add(chartArea2);
legend2.Name = "Legend1";
chartGPU.Legends.Add(legend2);
chartGPU.Location = new Point(16, 477);
chartGPU.Name = "chartGPU";
series2.ChartArea = "ChartArea1";
series2.Legend = "Legend1";
series2.Name = "Series1";
chartGPU.Series.Add(series2);
chartGPU.Size = new Size(900, 448);
chartGPU.TabIndex = 3;
chartGPU.Text = "chart1";
//
// Fans
//
AutoScaleDimensions = new SizeF(13F, 32F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(940, 1020);
Controls.Add(chartGPU);
Controls.Add(buttonReset);
Controls.Add(buttonApply);
Controls.Add(chartCPU);
FormBorderStyle = FormBorderStyle.FixedSingle;
MaximizeBox = false;
MdiChildrenMinimizedAnchorBottom = false;
MinimizeBox = false;
Name = "Fans";
ShowIcon = false;
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterScreen;
Text = "Fans";
((System.ComponentModel.ISupportInitialize)chartCPU).EndInit();
((System.ComponentModel.ISupportInitialize)chartGPU).EndInit();
ResumeLayout(false);
}
#endregion
private System.Windows.Forms.DataVisualization.Charting.Chart chartCPU;
private Button buttonApply;
private Button buttonReset;
private System.Windows.Forms.DataVisualization.Charting.Chart chartGPU;
}
}

212
Fans.cs Normal file
View File

@@ -0,0 +1,212 @@
using System;
using System.Diagnostics;
using System.Windows.Forms.DataVisualization.Charting;
namespace GHelper
{
public partial class Fans : Form
{
DataPoint curPoint = null;
Series seriesCPU;
Series seriesGPU;
void SetChart(Chart chart, int device)
{
string title;
if (device == 1)
title = "GPU Fan Profile";
else
title = "CPU Fan Profile";
if (Program.settingsForm.perfName.Length > 0)
title += ": " + Program.settingsForm.perfName;
if (chart.Titles.Count > 0)
chart.Titles[0].Text = title;
else
chart.Titles.Add(title);
chart.ChartAreas[0].AxisX.Minimum = 10;
chart.ChartAreas[0].AxisX.Maximum = 100;
chart.ChartAreas[0].AxisX.Interval = 10;
chart.ChartAreas[0].AxisY.Minimum = 0;
chart.ChartAreas[0].AxisY.Maximum = 100;
chart.Legends[0].Enabled = false;
}
private void Fans_Shown(object? sender, EventArgs e)
{
Top = Program.settingsForm.Top;
Left = Program.settingsForm.Left - Width - 10;
}
public Fans()
{
InitializeComponent();
seriesCPU = chartCPU.Series.Add("CPU");
seriesGPU = chartGPU.Series.Add("GPU");
seriesCPU.Color = Color.Blue;
seriesGPU.Color = Color.Red;
LoadFans();
chartCPU.MouseMove += ChartCPU_MouseMove;
chartCPU.MouseUp += ChartCPU_MouseUp;
chartGPU.MouseMove += ChartCPU_MouseMove;
chartGPU.MouseUp += ChartCPU_MouseUp;
buttonReset.Click += ButtonReset_Click;
buttonApply.Click += ButtonApply_Click;
Shown += Fans_Shown;
}
public void LoadFans()
{
SetChart(chartCPU, 0);
SetChart(chartGPU, 0);
LoadProfile(seriesCPU, 0);
LoadProfile(seriesGPU, 1);
}
byte[] StringToBytes(string str)
{
String[] arr = str.Split('-');
byte[] array = new byte[arr.Length];
for (int i = 0; i < arr.Length; i++) array[i] = Convert.ToByte(arr[i], 16);
return array;
}
string GetFanName(int device)
{
int mode = Program.config.getConfig("performance_mode");
string name;
if (device == 1)
name = "gpu";
else
name = "cpu";
return "fan_profile_" + name + "_" + mode;
}
void LoadProfile(Series series, int device, int def = 0)
{
series.ChartType = SeriesChartType.Line;
series.MarkerSize = 10;
series.MarkerStyle = MarkerStyle.Circle;
series.Points.Clear();
int mode = Program.config.getConfig("performance_mode");
string curveString = Program.config.getConfigString(GetFanName(device));
byte[] curve = { };
if (curveString is not null)
curve = StringToBytes(curveString);
if (def == 1 || curve.Length != 16)
curve = Program.wmi.GetFanCurve(device, mode);
//Debug.WriteLine(BitConverter.ToString(curve));
byte old = 0;
for (int i = 0; i < 8; i++)
{
if (curve[i] == old) curve[i]++; // preventing 2 points in same spot from default asus profiles
series.Points.AddXY(curve[i], curve[i + 8]);
old = curve[i];
}
}
void ApplyProfile(Series series, int device)
{
byte[] curve = new byte[16];
int i = 0;
foreach (DataPoint point in series.Points)
{
curve[i] = (byte)point.XValue;
curve[i + 8] = (byte)point.YValues.First();
i++;
}
string bitCurve = BitConverter.ToString(curve);
Debug.WriteLine(bitCurve);
Program.config.setConfig(GetFanName(device), bitCurve);
Program.wmi.SetFanCurve(device, curve);
}
private void ButtonApply_Click(object? sender, EventArgs e)
{
ApplyProfile(seriesCPU, 0);
ApplyProfile(seriesGPU, 1);
}
private void ButtonReset_Click(object? sender, EventArgs e)
{
LoadProfile(seriesCPU, 0, 1);
LoadProfile(seriesGPU, 1, 1);
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, Program.config.getConfig("performance_mode"));
}
private void ChartCPU_MouseUp(object? sender, MouseEventArgs e)
{
curPoint = null;
}
private void ChartCPU_MouseMove(object? sender, MouseEventArgs e)
{
if (sender is null) return;
Chart chart = (Chart)sender;
if (e.Button.HasFlag(MouseButtons.Left))
{
ChartArea ca = chart.ChartAreas[0];
Axis ax = ca.AxisX;
Axis ay = ca.AxisY;
HitTestResult hit = chart.HitTest(e.X, e.Y);
if (hit.Series is not null && hit.PointIndex >= 0)
curPoint = hit.Series.Points[hit.PointIndex];
if (curPoint != null)
{
Series s = hit.Series;
double dx = ax.PixelPositionToValue(e.X);
double dy = ay.PixelPositionToValue(e.Y);
if (dx < 0) dx = 0;
if (dx > 100) dx = 100;
if (dy < 0) dy = 0;
if (dy > 100) dy = 100;
curPoint.XValue = dx;
curPoint.YValues[0] = dy;
}
}
}
}
}

60
Fans.resx Normal file
View File

@@ -0,0 +1,60 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -2,7 +2,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>WinExe</OutputType> <OutputType>WinExe</OutputType>
<TargetFramework>net7.0-windows10.0.17763.0</TargetFramework> <TargetFramework>net7.0-windows8.0</TargetFramework>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<UseWindowsForms>True</UseWindowsForms> <UseWindowsForms>True</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
@@ -12,6 +12,7 @@
<ApplicationIcon>favicon.ico</ApplicationIcon> <ApplicationIcon>favicon.ico</ApplicationIcon>
<Platforms>AnyCPU;x64</Platforms> <Platforms>AnyCPU;x64</Platforms>
<SupportedOSPlatformVersion>8.0</SupportedOSPlatformVersion> <SupportedOSPlatformVersion>8.0</SupportedOSPlatformVersion>
<AssemblyName>GHelper</AssemblyName>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@@ -33,10 +34,9 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="hidlibrary" Version="3.3.40" /> <PackageReference Include="hidlibrary" Version="3.3.40" />
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.3" />
<PackageReference Include="LibreHardwareMonitorLib" Version="0.9.1" /> <PackageReference Include="LibreHardwareMonitorLib" Version="0.9.1" />
<PackageReference Include="System.Management" Version="7.0.0" />
<PackageReference Include="TaskScheduler" Version="2.10.1" /> <PackageReference Include="TaskScheduler" Version="2.10.1" />
<PackageReference Include="WinForms.DataVisualization" Version="1.7.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -50,22 +50,22 @@
<ItemGroup> <ItemGroup>
<Content Include="Resources\eco.ico"> <Content Include="Resources\eco.ico">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Resources\icons8-charging-battery-48.png"> <Content Include="Resources\icons8-charging-battery-48.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Resources\icons8-laptop-48.png"> <Content Include="Resources\icons8-laptop-48.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Resources\icons8-speed-48.png"> <Content Include="Resources\icons8-speed-48.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Resources\icons8-video-card-48.png"> <Content Include="Resources\icons8-video-card-48.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Resources\ultimate.ico"> <Content Include="Resources\ultimate.ico">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content> </Content>
</ItemGroup> </ItemGroup>

227
NativeMethods.cs Normal file
View File

@@ -0,0 +1,227 @@
using System.Runtime.InteropServices;
public class NativeMethods
{
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerWriteDCValueIndex(IntPtr RootPowerKey,
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid,
int AcValueIndex);
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerWriteACValueIndex(IntPtr RootPowerKey,
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid,
int AcValueIndex);
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerReadACValueIndex(IntPtr RootPowerKey,
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid,
out IntPtr AcValueIndex
);
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerReadDCValueIndex(IntPtr RootPowerKey,
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid,
out IntPtr AcValueIndex
);
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerSetActiveScheme(IntPtr RootPowerKey,
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid);
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerGetActiveScheme(IntPtr UserPowerKey, out IntPtr ActivePolicyGuid);
static readonly Guid GUID_CPU = new Guid("54533251-82be-4824-96c1-47b60b740d00");
static readonly Guid GUID_BOOST = new Guid("be337238-0d82-4146-a960-4f3749d470c7");
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct DEVMODE
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;
public int dmPositionX;
public int dmPositionY;
public int dmDisplayOrientation;
public int dmDisplayFixedOutput;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmFormName;
public short dmLogPixels;
public short dmBitsPerPel;
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;
public int dmICMMethod;
public int dmICMIntent;
public int dmMediaType;
public int dmDitherType;
public int dmReserved1;
public int dmReserved2;
public int dmPanningWidth;
public int dmPanningHeight;
};
[Flags()]
public enum DisplaySettingsFlags : int
{
CDS_UPDATEREGISTRY = 1,
CDS_TEST = 2,
CDS_FULLSCREEN = 4,
CDS_GLOBAL = 8,
CDS_SET_PRIMARY = 0x10,
CDS_RESET = 0x40000000,
CDS_NORESET = 0x10000000
}
// PInvoke declaration for EnumDisplaySettings Win32 API
[DllImport("user32.dll")]
public static extern int EnumDisplaySettingsEx(
string lpszDeviceName,
int iModeNum,
ref DEVMODE lpDevMode);
// PInvoke declaration for ChangeDisplaySettings Win32 API
[DllImport("user32.dll")]
public static extern int ChangeDisplaySettingsEx(
string lpszDeviceName, ref DEVMODE lpDevMode, IntPtr hwnd,
DisplaySettingsFlags dwflags, IntPtr lParam);
public const int ENUM_CURRENT_SETTINGS = -1;
public const string laptopScreenName = "\\\\.\\DISPLAY1";
public static DEVMODE CreateDevmode()
{
DEVMODE dm = new DEVMODE();
dm.dmDeviceName = new String(new char[32]);
dm.dmFormName = new String(new char[32]);
dm.dmSize = (short)Marshal.SizeOf(dm);
return dm;
}
public static Screen FindLaptopScreen()
{
var screens = Screen.AllScreens;
Screen laptopScreen = null;
foreach (var screen in screens)
{
if (screen.DeviceName == laptopScreenName)
{
laptopScreen = screen;
}
}
if (laptopScreen is null) return null;
else return laptopScreen;
}
public static int GetRefreshRate()
{
DEVMODE dm = CreateDevmode();
Screen laptopScreen = FindLaptopScreen();
int frequency = -1;
if (laptopScreen is null)
return -1;
if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen.DeviceName, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
{
frequency = dm.dmDisplayFrequency;
}
return frequency;
}
public static int SetRefreshRate(int frequency = 120)
{
DEVMODE dm = CreateDevmode();
Screen laptopScreen = FindLaptopScreen();
if (laptopScreen is null)
return -1;
if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen.DeviceName, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
{
dm.dmDisplayFrequency = frequency;
int iRet = NativeMethods.ChangeDisplaySettingsEx(laptopScreen.DeviceName, ref dm, IntPtr.Zero, DisplaySettingsFlags.CDS_UPDATEREGISTRY, IntPtr.Zero);
return iRet;
}
return 0;
}
static Guid GetActiveScheme()
{
IntPtr pActiveSchemeGuid;
var hr = PowerGetActiveScheme(IntPtr.Zero, out pActiveSchemeGuid);
Guid activeSchemeGuid = (Guid)Marshal.PtrToStructure(pActiveSchemeGuid, typeof(Guid));
return activeSchemeGuid;
}
public static int GetCPUBoost()
{
IntPtr AcValueIndex;
Guid activeSchemeGuid = GetActiveScheme();
UInt32 value = PowerReadACValueIndex(IntPtr.Zero,
activeSchemeGuid,
GUID_CPU,
GUID_BOOST, out AcValueIndex);
return AcValueIndex.ToInt32();
}
public static void SetCPUBoost(int boost = 0)
{
Guid activeSchemeGuid = GetActiveScheme();
var hrAC = PowerWriteACValueIndex(
IntPtr.Zero,
activeSchemeGuid,
GUID_CPU,
GUID_BOOST,
boost);
PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid);
var hrDC = PowerWriteDCValueIndex(
IntPtr.Zero,
activeSchemeGuid,
GUID_CPU,
GUID_BOOST,
boost);
PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid);
}
}

View File

@@ -1,156 +1,8 @@
using HidLibrary;
using LibreHardwareMonitor.Hardware; using LibreHardwareMonitor.Hardware;
using Microsoft.Win32.TaskScheduler;
using System.Diagnostics; using System.Diagnostics;
using System.Management; using System.Management;
using System.Runtime.InteropServices;
using System.Text.Json; using System.Text.Json;
public class ASUSWmi
{
private ManagementObject mo;
private ManagementClass classInstance;
public const int CPU_Fan = 0x00110013;
public const int GPU_Fan = 0x00110014;
public const int PerformanceMode = 0x00120075;
public const int GPUEco = 0x00090020;
public const int GPUMux = 0x00090016;
public const int BatteryLimit = 0x00120057;
public const int ScreenOverdrive = 0x00050019;
public const int PerformanceBalanced = 0;
public const int PerformanceTurbo = 1;
public const int PerformanceSilent = 2;
public const int GPUModeEco = 0;
public const int GPUModeStandard = 1;
public const int GPUModeUltimate = 2;
public ASUSWmi()
{
this.classInstance = new ManagementClass(new ManagementScope("root\\wmi"), new ManagementPath("AsusAtkWmi_WMNB"), null);
foreach (ManagementObject mo in this.classInstance.GetInstances())
{
this.mo = mo;
}
}
private int WMICall(string MethodName, int Device_Id, int Control_status = -1)
{
ManagementBaseObject inParams = this.classInstance.Methods[MethodName].InParameters;
inParams["Device_ID"] = Device_Id;
if (Control_status != -1)
{
inParams["Control_status"] = Control_status;
}
ManagementBaseObject outParams = this.mo.InvokeMethod(MethodName, inParams, null);
foreach (PropertyData property in outParams.Properties)
{
if (property.Name == "device_status")
{
int status;
try
{
status = int.Parse(property.Value.ToString());
status -= 65536;
return status;
}
catch
{
return -1;
}
}
if (property.Name == "result")
{
try
{
return int.Parse(property.Value.ToString());
}
catch
{
return -1;
}
}
}
return -1;
}
public int DeviceGet(int Device_Id)
{
return this.WMICall("DSTS", Device_Id);
}
public int DeviceSet(int Device_Id, int Control_status)
{
return this.WMICall("DEVS", Device_Id, Control_status);
}
public void SubscribeToEvents(Action<object, EventArrivedEventArgs> EventHandler)
{
ManagementEventWatcher watcher = new ManagementEventWatcher();
watcher.EventArrived += new EventArrivedEventHandler(EventHandler);
watcher.Scope = new ManagementScope("root\\wmi");
watcher.Query = new WqlEventQuery("SELECT * FROM AsusAtkWmiEvent");
watcher.Start();
}
}
public class Startup
{
static string taskName = "GSharpHelper";
public Startup()
{
}
public bool IsScheduled()
{
TaskService taskService = new TaskService();
return (taskService.RootFolder.AllTasks.Any(t => t.Name == taskName));
}
public void Schedule()
{
TaskService taskService = new TaskService();
string strExeFilePath = Application.ExecutablePath;
if (strExeFilePath is null) return;
Debug.WriteLine(strExeFilePath);
TaskDefinition td = TaskService.Instance.NewTask();
td.RegistrationInfo.Description = "GSharpHelper Auto Start";
LogonTrigger lt = new LogonTrigger();
td.Triggers.Add(lt);
td.Actions.Add(strExeFilePath);
td.Principal.RunLevel = TaskRunLevel.Highest;
td.Settings.StopIfGoingOnBatteries = false;
td.Settings.DisallowStartIfOnBatteries = false;
TaskService.Instance.RootFolder.RegisterTaskDefinition(taskName, td);
}
public void UnSchedule()
{
TaskService taskService = new TaskService();
taskService.RootFolder.DeleteTask(taskName);
}
}
public class AppConfig public class AppConfig
{ {
@@ -203,310 +55,28 @@ public class AppConfig
else return -1; else return -1;
} }
public string getConfigString(string name)
{
if (config.ContainsKey(name))
return config[name].ToString();
else return null;
}
public void setConfig(string name, int value) public void setConfig(string name, int value)
{ {
config[name] = value; config[name] = value;
string jsonString = JsonSerializer.Serialize(config); string jsonString = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(configFile, jsonString);
}
public void setConfig(string name, string value)
{
config[name] = value;
string jsonString = JsonSerializer.Serialize(config, new JsonSerializerOptions { WriteIndented = true });
File.WriteAllText(configFile, jsonString); File.WriteAllText(configFile, jsonString);
} }
}
public class NativeMethods
{
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerWriteDCValueIndex(IntPtr RootPowerKey,
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid,
int AcValueIndex);
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerWriteACValueIndex(IntPtr RootPowerKey,
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid,
int AcValueIndex);
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerReadACValueIndex(IntPtr RootPowerKey,
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid,
out IntPtr AcValueIndex
);
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerReadDCValueIndex(IntPtr RootPowerKey,
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid SubGroupOfPowerSettingsGuid,
[MarshalAs(UnmanagedType.LPStruct)] Guid PowerSettingGuid,
out IntPtr AcValueIndex
);
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerSetActiveScheme(IntPtr RootPowerKey,
[MarshalAs(UnmanagedType.LPStruct)] Guid SchemeGuid);
[DllImport("PowrProf.dll", CharSet = CharSet.Unicode)]
static extern UInt32 PowerGetActiveScheme(IntPtr UserPowerKey, out IntPtr ActivePolicyGuid);
static readonly Guid GUID_CPU = new Guid("54533251-82be-4824-96c1-47b60b740d00");
static readonly Guid GUID_BOOST = new Guid("be337238-0d82-4146-a960-4f3749d470c7");
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct DEVMODE
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;
public int dmPositionX;
public int dmPositionY;
public int dmDisplayOrientation;
public int dmDisplayFixedOutput;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string dmFormName;
public short dmLogPixels;
public short dmBitsPerPel;
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;
public int dmICMMethod;
public int dmICMIntent;
public int dmMediaType;
public int dmDitherType;
public int dmReserved1;
public int dmReserved2;
public int dmPanningWidth;
public int dmPanningHeight;
};
[Flags()]
public enum DisplaySettingsFlags : int
{
CDS_UPDATEREGISTRY = 1,
CDS_TEST = 2,
CDS_FULLSCREEN = 4,
CDS_GLOBAL = 8,
CDS_SET_PRIMARY = 0x10,
CDS_RESET = 0x40000000,
CDS_NORESET = 0x10000000
}
// PInvoke declaration for EnumDisplaySettings Win32 API
[DllImport("user32.dll")]
public static extern int EnumDisplaySettingsEx(
string lpszDeviceName,
int iModeNum,
ref DEVMODE lpDevMode);
// PInvoke declaration for ChangeDisplaySettings Win32 API
[DllImport("user32.dll")]
public static extern int ChangeDisplaySettingsEx(
string lpszDeviceName, ref DEVMODE lpDevMode, IntPtr hwnd,
DisplaySettingsFlags dwflags, IntPtr lParam);
public const int ENUM_CURRENT_SETTINGS = -1;
public const string laptopScreenName = "\\\\.\\DISPLAY1";
public static DEVMODE CreateDevmode()
{
DEVMODE dm = new DEVMODE();
dm.dmDeviceName = new String(new char[32]);
dm.dmFormName = new String(new char[32]);
dm.dmSize = (short)Marshal.SizeOf(dm);
return dm;
}
public static Screen FindLaptopScreen()
{
var screens = Screen.AllScreens;
Screen laptopScreen = null;
foreach (var screen in screens)
{
if (screen.DeviceName == laptopScreenName)
{
laptopScreen = screen;
}
}
if (laptopScreen is null) return null;
else return laptopScreen;
}
public static int GetRefreshRate()
{
DEVMODE dm = CreateDevmode();
Screen laptopScreen = FindLaptopScreen();
int frequency = -1;
if (laptopScreen is null)
return -1;
if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen.DeviceName, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
{
frequency = dm.dmDisplayFrequency;
}
return frequency;
}
public static int SetRefreshRate(int frequency = 120)
{
DEVMODE dm = CreateDevmode();
Screen laptopScreen = FindLaptopScreen();
if (laptopScreen is null)
return -1;
if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen.DeviceName, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
{
dm.dmDisplayFrequency = frequency;
int iRet = NativeMethods.ChangeDisplaySettingsEx(laptopScreen.DeviceName, ref dm, IntPtr.Zero, DisplaySettingsFlags.CDS_UPDATEREGISTRY, IntPtr.Zero);
return iRet;
}
return 0;
}
static Guid GetActiveScheme()
{
IntPtr pActiveSchemeGuid;
var hr = PowerGetActiveScheme(IntPtr.Zero, out pActiveSchemeGuid);
Guid activeSchemeGuid = (Guid)Marshal.PtrToStructure(pActiveSchemeGuid, typeof(Guid));
return activeSchemeGuid;
}
public static int GetCPUBoost()
{
IntPtr AcValueIndex;
Guid activeSchemeGuid = GetActiveScheme();
UInt32 value = PowerReadACValueIndex(IntPtr.Zero,
activeSchemeGuid,
GUID_CPU,
GUID_BOOST, out AcValueIndex);
return AcValueIndex.ToInt32();
}
public static void SetCPUBoost(int boost = 0)
{
Guid activeSchemeGuid = GetActiveScheme();
var hrAC = PowerWriteACValueIndex(
IntPtr.Zero,
activeSchemeGuid,
GUID_CPU,
GUID_BOOST,
boost);
PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid);
var hrDC = PowerWriteDCValueIndex(
IntPtr.Zero,
activeSchemeGuid,
GUID_CPU,
GUID_BOOST,
boost);
PowerSetActiveScheme(IntPtr.Zero, activeSchemeGuid);
}
}
public class Aura
{
static byte[] MESSAGE_SET = { 0x5d, 0xb5 };
static byte[] MESSAGE_APPLY = { 0x5d, 0xb4 };
public const int Static = 0;
public const int Breathe = 1;
public const int Strobe = 2;
public const int Rainbow = 3;
public const int Dingding = 10;
public const int SpeedSlow = 0;
public const int SpeedMedium = 1;
public const int SpeedHigh = 2;
public static int Mode = Static;
public static Color Color1 = Color.White;
public static Color Color2 = Color.Black;
public static int Speed = SpeedSlow;
public static byte[] AuraMessage(int mode, Color color, Color color2, int speed)
{
byte[] msg = new byte[17];
msg[0] = 0x5d;
msg[1] = 0xb3;
msg[2] = 0x00; // Zone
msg[3] = (byte)mode; // Aura Mode
msg[4] = (byte)(color.R); // R
msg[5] = (byte)(color.G); // G
msg[6] = (byte)(color.B); // B
msg[7] = (byte)speed; // aura.speed as u8;
msg[8] = 0; // aura.direction as u8;
msg[10] = (byte)(color2.R); // R
msg[11] = (byte)(color2.G); // G
msg[12] = (byte)(color2.B); // B
return msg;
}
public static void ApplyAura()
{
HidDevice[] HidDeviceList;
int[] deviceIds = { 0x1854, 0x1869, 0x1866, 0x19b6 };
HidDeviceList = HidDevices.Enumerate(0x0b05, deviceIds).ToArray();
foreach (HidDevice device in HidDeviceList)
{
if (device.IsConnected)
{
if (device.Description.IndexOf("HID") >= 0)
{
device.OpenDevice();
byte[] msg = AuraMessage(Mode, Color1, Color2, Speed);
device.Write(msg);
device.Write(MESSAGE_SET);
device.Write(MESSAGE_APPLY);
device.CloseDevice();
}
}
}
}
} }
@@ -614,38 +184,27 @@ namespace GHelper
{ {
static class Program static class Program
{ {
public static NotifyIcon trayIcon; public static NotifyIcon trayIcon = new NotifyIcon
{
Text = "G-Helper",
Icon = Properties.Resources.standard,
Visible = true
};
public static ASUSWmi wmi; public static ASUSWmi wmi = new ASUSWmi();
public static AppConfig config; public static AppConfig config = new AppConfig();
public static SettingsForm settingsForm; public static SettingsForm settingsForm = new SettingsForm();
public static ToastForm toastForm; public static HardwareMonitor hwmonitor = new HardwareMonitor();
public static Startup scheduler;
public static HardwareMonitor hwmonitor;
// The main entry point for the application // The main entry point for the application
public static void Main() public static void Main()
{ {
trayIcon = new NotifyIcon
{
Text = "G-Helper",
Icon = GHelper.Properties.Resources.standard,
Visible = true
};
trayIcon.MouseClick += TrayIcon_MouseClick; ; trayIcon.MouseClick += TrayIcon_MouseClick; ;
config = new AppConfig();
wmi = new ASUSWmi();
wmi.SubscribeToEvents(WatcherEventArrived); wmi.SubscribeToEvents(WatcherEventArrived);
scheduler = new Startup();
settingsForm = new SettingsForm();
settingsForm.InitGPUMode(); settingsForm.InitGPUMode();
settingsForm.InitBoost(); settingsForm.InitBoost();
settingsForm.InitAura(); settingsForm.InitAura();
@@ -656,13 +215,13 @@ namespace GHelper
settingsForm.VisualiseGPUAuto(config.getConfig("gpu_auto")); settingsForm.VisualiseGPUAuto(config.getConfig("gpu_auto"));
settingsForm.VisualiseScreenAuto(config.getConfig("screen_auto")); settingsForm.VisualiseScreenAuto(config.getConfig("screen_auto"));
settingsForm.SetStartupCheck(scheduler.IsScheduled()); settingsForm.SetStartupCheck(Startup.IsScheduled());
bool isPlugged = (System.Windows.Forms.SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online); bool isPlugged = (System.Windows.Forms.SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online);
settingsForm.AutoGPUMode(isPlugged ? 1 : 0); settingsForm.AutoGPUMode(isPlugged ? 1 : 0);
settingsForm.AutoScreen(isPlugged ? 1 : 0); settingsForm.AutoScreen(isPlugged ? 1 : 0);
hwmonitor = new HardwareMonitor();
IntPtr dummy = settingsForm.Handle; IntPtr dummy = settingsForm.Handle;
Application.Run(); Application.Run();

View File

@@ -19,6 +19,7 @@ Profiles are **same** as in Armory Crate, including default fan curves
1. Eco mode : only low power iGPU (Radeon 680u) enabled, iGPU drives built in display 1. Eco mode : only low power iGPU (Radeon 680u) enabled, iGPU drives built in display
2. Standard mode (Windows Hybrid) : iGPU and dGPU (Radeon 6700s/6800s) enabled, iGPU drives built in display 2. Standard mode (Windows Hybrid) : iGPU and dGPU (Radeon 6700s/6800s) enabled, iGPU drives built in display
3. Ultimate mode: iGPU and dGPU enabled, but dGPU drives built in display 3. Ultimate mode: iGPU and dGPU enabled, but dGPU drives built in display
4. **Custom fan profiles** for any mode!
## Extras ## Extras
@@ -33,8 +34,7 @@ Profiles are **same** as in Armory Crate, including default fan curves
## Things still missing ## Things still missing
1. Custom fan profiles 1. Anime matrix control
2. Anime matrix control
## How to install ## How to install
@@ -42,8 +42,8 @@ Profiles are **same** as in Armory Crate, including default fan curves
2. Unzip to a folder of your choice 2. Unzip to a folder of your choice
3. Run **GHelper.exe** 3. Run **GHelper.exe**
Note: Uses low level ASUS WMI commands to do switching and doens't require Armory Crate to be isntalled at all. Note: Uses low level ASUS ACPI commands to do switching and doens't require Armory Crate to be isntalled at all.
Therefore requires Administrator priveledges on Windows to run. Doesn't require administrator privileges to run (anymore)!
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 set a warning from Windows Defender on launch (Windows Protected your PC), click More Info -> Run anyway.

877
Settings.Designer.cs generated
View File

@@ -29,546 +29,539 @@
private void InitializeComponent() private void InitializeComponent()
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsForm)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsForm));
this.checkStartup = new System.Windows.Forms.CheckBox(); checkStartup = new CheckBox();
this.trackBattery = new System.Windows.Forms.TrackBar(); trackBattery = new TrackBar();
this.labelBatteryTitle = new System.Windows.Forms.Label(); labelBatteryTitle = new Label();
this.pictureBattery = new System.Windows.Forms.PictureBox(); pictureBattery = new PictureBox();
this.labelGPUFan = new System.Windows.Forms.Label(); labelGPUFan = new Label();
this.tableGPU = new System.Windows.Forms.TableLayoutPanel(); tableGPU = new TableLayoutPanel();
this.buttonUltimate = new System.Windows.Forms.Button(); buttonUltimate = new Button();
this.buttonStandard = new System.Windows.Forms.Button(); buttonStandard = new Button();
this.buttonEco = new System.Windows.Forms.Button(); buttonEco = new Button();
this.labelGPU = new System.Windows.Forms.Label(); labelGPU = new Label();
this.pictureGPU = new System.Windows.Forms.PictureBox(); pictureGPU = new PictureBox();
this.labelCPUFan = new System.Windows.Forms.Label(); labelCPUFan = new Label();
this.tablePerf = new System.Windows.Forms.TableLayoutPanel(); tablePerf = new TableLayoutPanel();
this.buttonTurbo = new System.Windows.Forms.Button(); buttonTurbo = new Button();
this.buttonBalanced = new System.Windows.Forms.Button(); buttonBalanced = new Button();
this.buttonSilent = new System.Windows.Forms.Button(); buttonSilent = new Button();
this.picturePerf = new System.Windows.Forms.PictureBox(); picturePerf = new PictureBox();
this.labelPerf = new System.Windows.Forms.Label(); labelPerf = new Label();
this.checkGPU = new System.Windows.Forms.CheckBox(); checkGPU = new CheckBox();
this.buttonQuit = new System.Windows.Forms.Button(); buttonQuit = new Button();
this.pictureScreen = new System.Windows.Forms.PictureBox(); pictureScreen = new PictureBox();
this.labelSreen = new System.Windows.Forms.Label(); labelSreen = new Label();
this.tableScreen = new System.Windows.Forms.TableLayoutPanel(); tableScreen = new TableLayoutPanel();
this.button120Hz = new System.Windows.Forms.Button(); button120Hz = new Button();
this.button60Hz = new System.Windows.Forms.Button(); button60Hz = new Button();
this.checkScreen = new System.Windows.Forms.CheckBox(); checkScreen = new CheckBox();
this.checkBoost = new System.Windows.Forms.CheckBox(); checkBoost = new CheckBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox(); pictureBox1 = new PictureBox();
this.label1 = new System.Windows.Forms.Label(); label1 = new Label();
this.comboKeyboard = new System.Windows.Forms.ComboBox(); comboKeyboard = new ComboBox();
this.buttonKeyboardColor = new System.Windows.Forms.Button(); buttonKeyboardColor = new Button();
this.pictureBox2 = new System.Windows.Forms.PictureBox(); labelBattery = new Label();
this.labelBattery = new System.Windows.Forms.Label(); buttonFans = new Button();
((System.ComponentModel.ISupportInitialize)(this.trackBattery)).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackBattery).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBattery)).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureBattery).BeginInit();
this.tableGPU.SuspendLayout(); tableGPU.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureGPU)).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureGPU).BeginInit();
this.tablePerf.SuspendLayout(); tablePerf.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picturePerf)).BeginInit(); ((System.ComponentModel.ISupportInitialize)picturePerf).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureScreen)).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureScreen).BeginInit();
this.tableScreen.SuspendLayout(); tableScreen.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); SuspendLayout();
this.SuspendLayout();
// //
// checkStartup // checkStartup
// //
this.checkStartup.AutoSize = true; checkStartup.AutoSize = true;
this.checkStartup.Location = new System.Drawing.Point(40, 1007); checkStartup.Location = new Point(20, 508);
this.checkStartup.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); checkStartup.Margin = new Padding(2, 1, 2, 1);
this.checkStartup.Name = "checkStartup"; checkStartup.Name = "checkStartup";
this.checkStartup.Size = new System.Drawing.Size(206, 36); checkStartup.Size = new Size(105, 19);
this.checkStartup.TabIndex = 2; checkStartup.TabIndex = 2;
this.checkStartup.Text = "Run on Startup"; checkStartup.Text = "Run on Startup";
this.checkStartup.UseVisualStyleBackColor = true; checkStartup.UseVisualStyleBackColor = true;
this.checkStartup.CheckedChanged += new System.EventHandler(this.checkStartup_CheckedChanged); checkStartup.CheckedChanged += checkStartup_CheckedChanged;
// //
// trackBattery // trackBattery
// //
this.trackBattery.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) trackBattery.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
| System.Windows.Forms.AnchorStyles.Right))); trackBattery.LargeChange = 20;
this.trackBattery.LargeChange = 20; trackBattery.Location = new Point(10, 454);
this.trackBattery.Location = new System.Drawing.Point(20, 908); trackBattery.Margin = new Padding(2, 1, 2, 1);
this.trackBattery.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); trackBattery.Maximum = 100;
this.trackBattery.Maximum = 100; trackBattery.Minimum = 50;
this.trackBattery.Minimum = 50; trackBattery.Name = "trackBattery";
this.trackBattery.Name = "trackBattery"; trackBattery.Size = new Size(338, 45);
this.trackBattery.Size = new System.Drawing.Size(690, 90); trackBattery.SmallChange = 10;
this.trackBattery.SmallChange = 10; trackBattery.TabIndex = 3;
this.trackBattery.TabIndex = 3; trackBattery.TickFrequency = 10;
this.trackBattery.TickFrequency = 10; trackBattery.TickStyle = TickStyle.TopLeft;
this.trackBattery.TickStyle = System.Windows.Forms.TickStyle.TopLeft; trackBattery.Value = 100;
this.trackBattery.Value = 100;
// //
// labelBatteryTitle // labelBatteryTitle
// //
this.labelBatteryTitle.AutoSize = true; labelBatteryTitle.AutoSize = true;
this.labelBatteryTitle.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); labelBatteryTitle.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
this.labelBatteryTitle.Location = new System.Drawing.Point(77, 871); labelBatteryTitle.Location = new Point(38, 435);
this.labelBatteryTitle.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); labelBatteryTitle.Margin = new Padding(2, 0, 2, 0);
this.labelBatteryTitle.Name = "labelBatteryTitle"; labelBatteryTitle.Name = "labelBatteryTitle";
this.labelBatteryTitle.Size = new System.Drawing.Size(248, 32); labelBatteryTitle.Size = new Size(122, 15);
this.labelBatteryTitle.TabIndex = 4; labelBatteryTitle.TabIndex = 4;
this.labelBatteryTitle.Text = "Battery Charge Limit"; labelBatteryTitle.Text = "Battery Charge Limit";
// //
// pictureBattery // pictureBattery
// //
this.pictureBattery.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureBattery.BackgroundImage"))); pictureBattery.BackgroundImage = (Image)resources.GetObject("pictureBattery.BackgroundImage");
this.pictureBattery.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; pictureBattery.BackgroundImageLayout = ImageLayout.Zoom;
this.pictureBattery.Location = new System.Drawing.Point(33, 868); pictureBattery.Location = new Point(16, 434);
this.pictureBattery.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); pictureBattery.Margin = new Padding(2, 1, 2, 1);
this.pictureBattery.Name = "pictureBattery"; pictureBattery.Name = "pictureBattery";
this.pictureBattery.Size = new System.Drawing.Size(38, 38); pictureBattery.Size = new Size(18, 19);
this.pictureBattery.TabIndex = 6; pictureBattery.TabIndex = 6;
this.pictureBattery.TabStop = false; pictureBattery.TabStop = false;
// //
// labelGPUFan // labelGPUFan
// //
this.labelGPUFan.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); labelGPUFan.Anchor = AnchorStyles.Top | AnchorStyles.Right;
this.labelGPUFan.Location = new System.Drawing.Point(425, 262); labelGPUFan.Location = new Point(205, 131);
this.labelGPUFan.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); labelGPUFan.Margin = new Padding(2, 0, 2, 0);
this.labelGPUFan.Name = "labelGPUFan"; labelGPUFan.Name = "labelGPUFan";
this.labelGPUFan.Size = new System.Drawing.Size(277, 32); labelGPUFan.Size = new Size(138, 16);
this.labelGPUFan.TabIndex = 8; labelGPUFan.TabIndex = 8;
this.labelGPUFan.Text = "GPU Fan : 0%"; labelGPUFan.Text = "GPU Fan : 0%";
this.labelGPUFan.TextAlign = System.Drawing.ContentAlignment.TopRight; labelGPUFan.TextAlign = ContentAlignment.TopRight;
// //
// tableGPU // tableGPU
// //
this.tableGPU.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) tableGPU.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
| System.Windows.Forms.AnchorStyles.Right))); tableGPU.ColumnCount = 3;
this.tableGPU.ColumnCount = 3; tableGPU.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F));
this.tableGPU.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); tableGPU.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F));
this.tableGPU.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); tableGPU.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F));
this.tableGPU.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); tableGPU.Controls.Add(buttonUltimate, 2, 0);
this.tableGPU.Controls.Add(this.buttonUltimate, 2, 0); tableGPU.Controls.Add(buttonStandard, 1, 0);
this.tableGPU.Controls.Add(this.buttonStandard, 1, 0); tableGPU.Controls.Add(buttonEco, 0, 0);
this.tableGPU.Controls.Add(this.buttonEco, 0, 0); tableGPU.Location = new Point(11, 152);
this.tableGPU.Location = new System.Drawing.Point(22, 303); tableGPU.Margin = new Padding(2, 1, 2, 1);
this.tableGPU.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); tableGPU.Name = "tableGPU";
this.tableGPU.Name = "tableGPU"; tableGPU.RowCount = 1;
this.tableGPU.RowCount = 1; tableGPU.RowStyles.Add(new RowStyle(SizeType.Absolute, 54F));
this.tableGPU.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 107F)); tableGPU.Size = new Size(338, 54);
this.tableGPU.Size = new System.Drawing.Size(690, 107); tableGPU.TabIndex = 7;
this.tableGPU.TabIndex = 7;
// //
// buttonUltimate // buttonUltimate
// //
this.buttonUltimate.BackColor = System.Drawing.SystemColors.ControlLightLight; buttonUltimate.BackColor = SystemColors.ControlLightLight;
this.buttonUltimate.Dock = System.Windows.Forms.DockStyle.Fill; buttonUltimate.Dock = DockStyle.Fill;
this.buttonUltimate.FlatAppearance.BorderSize = 0; buttonUltimate.FlatAppearance.BorderSize = 0;
this.buttonUltimate.FlatStyle = System.Windows.Forms.FlatStyle.Flat; buttonUltimate.FlatStyle = FlatStyle.Flat;
this.buttonUltimate.Location = new System.Drawing.Point(469, 11); buttonUltimate.Location = new Point(228, 6);
this.buttonUltimate.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); buttonUltimate.Margin = new Padding(4, 6, 4, 6);
this.buttonUltimate.Name = "buttonUltimate"; buttonUltimate.Name = "buttonUltimate";
this.buttonUltimate.Size = new System.Drawing.Size(212, 85); buttonUltimate.Size = new Size(106, 42);
this.buttonUltimate.TabIndex = 2; buttonUltimate.TabIndex = 2;
this.buttonUltimate.Text = "Ultimate"; buttonUltimate.Text = "Ultimate";
this.buttonUltimate.UseVisualStyleBackColor = false; buttonUltimate.UseVisualStyleBackColor = false;
// //
// buttonStandard // buttonStandard
// //
this.buttonStandard.BackColor = System.Drawing.SystemColors.ControlLightLight; buttonStandard.BackColor = SystemColors.ControlLightLight;
this.buttonStandard.Dock = System.Windows.Forms.DockStyle.Fill; buttonStandard.Dock = DockStyle.Fill;
this.buttonStandard.FlatAppearance.BorderSize = 0; buttonStandard.FlatAppearance.BorderSize = 0;
this.buttonStandard.FlatStyle = System.Windows.Forms.FlatStyle.Flat; buttonStandard.FlatStyle = FlatStyle.Flat;
this.buttonStandard.Location = new System.Drawing.Point(239, 11); buttonStandard.Location = new Point(116, 6);
this.buttonStandard.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); buttonStandard.Margin = new Padding(4, 6, 4, 6);
this.buttonStandard.Name = "buttonStandard"; buttonStandard.Name = "buttonStandard";
this.buttonStandard.Size = new System.Drawing.Size(212, 85); buttonStandard.Size = new Size(104, 42);
this.buttonStandard.TabIndex = 1; buttonStandard.TabIndex = 1;
this.buttonStandard.Text = "Standard"; buttonStandard.Text = "Standard";
this.buttonStandard.UseVisualStyleBackColor = false; buttonStandard.UseVisualStyleBackColor = false;
// //
// buttonEco // buttonEco
// //
this.buttonEco.BackColor = System.Drawing.SystemColors.ControlLightLight; buttonEco.BackColor = SystemColors.ControlLightLight;
this.buttonEco.CausesValidation = false; buttonEco.CausesValidation = false;
this.buttonEco.Dock = System.Windows.Forms.DockStyle.Fill; buttonEco.Dock = DockStyle.Fill;
this.buttonEco.FlatAppearance.BorderSize = 0; buttonEco.FlatAppearance.BorderSize = 0;
this.buttonEco.FlatStyle = System.Windows.Forms.FlatStyle.Flat; buttonEco.FlatStyle = FlatStyle.Flat;
this.buttonEco.Location = new System.Drawing.Point(9, 11); buttonEco.Location = new Point(4, 6);
this.buttonEco.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); buttonEco.Margin = new Padding(4, 6, 4, 6);
this.buttonEco.Name = "buttonEco"; buttonEco.Name = "buttonEco";
this.buttonEco.Size = new System.Drawing.Size(212, 85); buttonEco.Size = new Size(104, 42);
this.buttonEco.TabIndex = 0; buttonEco.TabIndex = 0;
this.buttonEco.Text = "Eco"; buttonEco.Text = "Eco";
this.buttonEco.UseVisualStyleBackColor = false; buttonEco.UseVisualStyleBackColor = false;
// //
// labelGPU // labelGPU
// //
this.labelGPU.AutoSize = true; labelGPU.AutoSize = true;
this.labelGPU.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); labelGPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
this.labelGPU.Location = new System.Drawing.Point(77, 265); labelGPU.Location = new Point(38, 132);
this.labelGPU.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); labelGPU.Margin = new Padding(2, 0, 2, 0);
this.labelGPU.Name = "labelGPU"; labelGPU.Name = "labelGPU";
this.labelGPU.Size = new System.Drawing.Size(136, 32); labelGPU.Size = new Size(67, 15);
this.labelGPU.TabIndex = 9; labelGPU.TabIndex = 9;
this.labelGPU.Text = "GPU Mode"; labelGPU.Text = "GPU Mode";
// //
// pictureGPU // pictureGPU
// //
this.pictureGPU.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureGPU.BackgroundImage"))); pictureGPU.BackgroundImage = (Image)resources.GetObject("pictureGPU.BackgroundImage");
this.pictureGPU.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; pictureGPU.BackgroundImageLayout = ImageLayout.Zoom;
this.pictureGPU.Location = new System.Drawing.Point(33, 263); pictureGPU.Location = new Point(16, 131);
this.pictureGPU.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); pictureGPU.Margin = new Padding(2, 1, 2, 1);
this.pictureGPU.Name = "pictureGPU"; pictureGPU.Name = "pictureGPU";
this.pictureGPU.Size = new System.Drawing.Size(38, 38); pictureGPU.Size = new Size(18, 19);
this.pictureGPU.TabIndex = 10; pictureGPU.TabIndex = 10;
this.pictureGPU.TabStop = false; pictureGPU.TabStop = false;
// //
// labelCPUFan // labelCPUFan
// //
this.labelCPUFan.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); labelCPUFan.Anchor = AnchorStyles.Top | AnchorStyles.Right;
this.labelCPUFan.Location = new System.Drawing.Point(425, 38); labelCPUFan.Location = new Point(205, 19);
this.labelCPUFan.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); labelCPUFan.Margin = new Padding(2, 0, 2, 0);
this.labelCPUFan.Name = "labelCPUFan"; labelCPUFan.Name = "labelCPUFan";
this.labelCPUFan.Size = new System.Drawing.Size(277, 32); labelCPUFan.Size = new Size(138, 16);
this.labelCPUFan.TabIndex = 12; labelCPUFan.TabIndex = 12;
this.labelCPUFan.Text = "CPU Fan : 0%"; labelCPUFan.Text = "CPU Fan : 0%";
this.labelCPUFan.TextAlign = System.Drawing.ContentAlignment.TopRight; labelCPUFan.TextAlign = ContentAlignment.TopRight;
// //
// tablePerf // tablePerf
// //
this.tablePerf.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) tablePerf.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
| System.Windows.Forms.AnchorStyles.Right))); tablePerf.ColumnCount = 3;
this.tablePerf.ColumnCount = 3; tablePerf.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F));
this.tablePerf.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); tablePerf.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F));
this.tablePerf.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); tablePerf.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F));
this.tablePerf.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); tablePerf.Controls.Add(buttonTurbo, 2, 0);
this.tablePerf.Controls.Add(this.buttonTurbo, 2, 0); tablePerf.Controls.Add(buttonBalanced, 1, 0);
this.tablePerf.Controls.Add(this.buttonBalanced, 1, 0); tablePerf.Controls.Add(buttonSilent, 0, 0);
this.tablePerf.Controls.Add(this.buttonSilent, 0, 0); tablePerf.Location = new Point(11, 38);
this.tablePerf.Location = new System.Drawing.Point(22, 76); tablePerf.Margin = new Padding(2, 1, 2, 1);
this.tablePerf.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); tablePerf.Name = "tablePerf";
this.tablePerf.Name = "tablePerf"; tablePerf.RowCount = 1;
this.tablePerf.RowCount = 1; tablePerf.RowStyles.Add(new RowStyle(SizeType.Absolute, 54F));
this.tablePerf.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 107F)); tablePerf.Size = new Size(338, 54);
this.tablePerf.Size = new System.Drawing.Size(690, 107); tablePerf.TabIndex = 11;
this.tablePerf.TabIndex = 11;
// //
// buttonTurbo // buttonTurbo
// //
this.buttonTurbo.BackColor = System.Drawing.SystemColors.ControlLightLight; buttonTurbo.BackColor = SystemColors.ControlLightLight;
this.buttonTurbo.Dock = System.Windows.Forms.DockStyle.Fill; buttonTurbo.Dock = DockStyle.Fill;
this.buttonTurbo.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); buttonTurbo.FlatAppearance.BorderColor = Color.FromArgb(192, 0, 0);
this.buttonTurbo.FlatAppearance.BorderSize = 0; buttonTurbo.FlatAppearance.BorderSize = 0;
this.buttonTurbo.FlatStyle = System.Windows.Forms.FlatStyle.Flat; buttonTurbo.FlatStyle = FlatStyle.Flat;
this.buttonTurbo.Location = new System.Drawing.Point(469, 11); buttonTurbo.Location = new Point(228, 6);
this.buttonTurbo.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); buttonTurbo.Margin = new Padding(4, 6, 4, 6);
this.buttonTurbo.Name = "buttonTurbo"; buttonTurbo.Name = "buttonTurbo";
this.buttonTurbo.Size = new System.Drawing.Size(212, 85); buttonTurbo.Size = new Size(106, 42);
this.buttonTurbo.TabIndex = 2; buttonTurbo.TabIndex = 2;
this.buttonTurbo.Text = "Turbo"; buttonTurbo.Text = "Turbo";
this.buttonTurbo.UseVisualStyleBackColor = false; buttonTurbo.UseVisualStyleBackColor = false;
// //
// buttonBalanced // buttonBalanced
// //
this.buttonBalanced.BackColor = System.Drawing.SystemColors.ControlLightLight; buttonBalanced.BackColor = SystemColors.ControlLightLight;
this.buttonBalanced.Dock = System.Windows.Forms.DockStyle.Fill; buttonBalanced.Dock = DockStyle.Fill;
this.buttonBalanced.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); buttonBalanced.FlatAppearance.BorderColor = Color.FromArgb(0, 0, 192);
this.buttonBalanced.FlatAppearance.BorderSize = 0; buttonBalanced.FlatAppearance.BorderSize = 0;
this.buttonBalanced.FlatStyle = System.Windows.Forms.FlatStyle.Flat; buttonBalanced.FlatStyle = FlatStyle.Flat;
this.buttonBalanced.Location = new System.Drawing.Point(239, 11); buttonBalanced.Location = new Point(116, 6);
this.buttonBalanced.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); buttonBalanced.Margin = new Padding(4, 6, 4, 6);
this.buttonBalanced.Name = "buttonBalanced"; buttonBalanced.Name = "buttonBalanced";
this.buttonBalanced.Size = new System.Drawing.Size(212, 85); buttonBalanced.Size = new Size(104, 42);
this.buttonBalanced.TabIndex = 1; buttonBalanced.TabIndex = 1;
this.buttonBalanced.Text = "Balanced"; buttonBalanced.Text = "Balanced";
this.buttonBalanced.UseVisualStyleBackColor = false; buttonBalanced.UseVisualStyleBackColor = false;
// //
// buttonSilent // buttonSilent
// //
this.buttonSilent.BackColor = System.Drawing.SystemColors.ControlLightLight; buttonSilent.BackColor = SystemColors.ControlLightLight;
this.buttonSilent.CausesValidation = false; buttonSilent.CausesValidation = false;
this.buttonSilent.Dock = System.Windows.Forms.DockStyle.Fill; buttonSilent.Dock = DockStyle.Fill;
this.buttonSilent.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(192)))), ((int)(((byte)(192))))); buttonSilent.FlatAppearance.BorderColor = Color.FromArgb(0, 192, 192);
this.buttonSilent.FlatAppearance.BorderSize = 0; buttonSilent.FlatAppearance.BorderSize = 0;
this.buttonSilent.FlatStyle = System.Windows.Forms.FlatStyle.Flat; buttonSilent.FlatStyle = FlatStyle.Flat;
this.buttonSilent.Location = new System.Drawing.Point(9, 11); buttonSilent.Location = new Point(4, 6);
this.buttonSilent.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); buttonSilent.Margin = new Padding(4, 6, 4, 6);
this.buttonSilent.Name = "buttonSilent"; buttonSilent.Name = "buttonSilent";
this.buttonSilent.Size = new System.Drawing.Size(212, 85); buttonSilent.Size = new Size(104, 42);
this.buttonSilent.TabIndex = 0; buttonSilent.TabIndex = 0;
this.buttonSilent.Text = "Silent"; buttonSilent.Text = "Silent";
this.buttonSilent.UseVisualStyleBackColor = false; buttonSilent.UseVisualStyleBackColor = false;
// //
// picturePerf // picturePerf
// //
this.picturePerf.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("picturePerf.BackgroundImage"))); picturePerf.BackgroundImage = (Image)resources.GetObject("picturePerf.BackgroundImage");
this.picturePerf.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; picturePerf.BackgroundImageLayout = ImageLayout.Zoom;
this.picturePerf.InitialImage = null; picturePerf.InitialImage = null;
this.picturePerf.Location = new System.Drawing.Point(33, 36); picturePerf.Location = new Point(16, 18);
this.picturePerf.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); picturePerf.Margin = new Padding(2, 1, 2, 1);
this.picturePerf.Name = "picturePerf"; picturePerf.Name = "picturePerf";
this.picturePerf.Size = new System.Drawing.Size(38, 38); picturePerf.Size = new Size(18, 19);
this.picturePerf.TabIndex = 14; picturePerf.TabIndex = 14;
this.picturePerf.TabStop = false; picturePerf.TabStop = false;
// //
// labelPerf // labelPerf
// //
this.labelPerf.AutoSize = true; labelPerf.AutoSize = true;
this.labelPerf.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); labelPerf.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
this.labelPerf.Location = new System.Drawing.Point(77, 38); labelPerf.Location = new Point(38, 19);
this.labelPerf.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); labelPerf.Margin = new Padding(2, 0, 2, 0);
this.labelPerf.Name = "labelPerf"; labelPerf.Name = "labelPerf";
this.labelPerf.Size = new System.Drawing.Size(234, 32); labelPerf.Size = new Size(115, 15);
this.labelPerf.TabIndex = 13; labelPerf.TabIndex = 13;
this.labelPerf.Text = "Performance Mode"; labelPerf.Text = "Performance Mode";
// //
// checkGPU // checkGPU
// //
this.checkGPU.AutoSize = true; checkGPU.AutoSize = true;
this.checkGPU.ForeColor = System.Drawing.SystemColors.GrayText; checkGPU.ForeColor = SystemColors.GrayText;
this.checkGPU.Location = new System.Drawing.Point(33, 411); checkGPU.Location = new Point(16, 206);
this.checkGPU.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); checkGPU.Margin = new Padding(2, 1, 2, 1);
this.checkGPU.Name = "checkGPU"; checkGPU.Name = "checkGPU";
this.checkGPU.Size = new System.Drawing.Size(550, 36); checkGPU.Size = new Size(273, 19);
this.checkGPU.TabIndex = 15; checkGPU.TabIndex = 15;
this.checkGPU.Text = "Set Eco on battery and Standard when plugged"; checkGPU.Text = "Set Eco on battery and Standard when plugged";
this.checkGPU.UseVisualStyleBackColor = true; checkGPU.UseVisualStyleBackColor = true;
this.checkGPU.CheckedChanged += new System.EventHandler(this.checkGPU_CheckedChanged); checkGPU.CheckedChanged += checkGPU_CheckedChanged;
// //
// buttonQuit // buttonQuit
// //
this.buttonQuit.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); buttonQuit.Anchor = AnchorStyles.Top | AnchorStyles.Right;
this.buttonQuit.BackColor = System.Drawing.SystemColors.ButtonFace; buttonQuit.BackColor = SystemColors.ButtonFace;
this.buttonQuit.Location = new System.Drawing.Point(591, 1011); buttonQuit.Location = new Point(288, 504);
this.buttonQuit.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); buttonQuit.Margin = new Padding(2, 1, 2, 1);
this.buttonQuit.Name = "buttonQuit"; buttonQuit.Name = "buttonQuit";
this.buttonQuit.Size = new System.Drawing.Size(121, 47); buttonQuit.Size = new Size(60, 24);
this.buttonQuit.TabIndex = 16; buttonQuit.TabIndex = 16;
this.buttonQuit.Text = "Quit"; buttonQuit.Text = "Quit";
this.buttonQuit.UseVisualStyleBackColor = false; buttonQuit.UseVisualStyleBackColor = false;
// //
// pictureScreen // pictureScreen
// //
this.pictureScreen.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("pictureScreen.BackgroundImage"))); pictureScreen.BackgroundImage = (Image)resources.GetObject("pictureScreen.BackgroundImage");
this.pictureScreen.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; pictureScreen.BackgroundImageLayout = ImageLayout.Zoom;
this.pictureScreen.Location = new System.Drawing.Point(33, 496); pictureScreen.Location = new Point(16, 248);
this.pictureScreen.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); pictureScreen.Margin = new Padding(2, 1, 2, 1);
this.pictureScreen.Name = "pictureScreen"; pictureScreen.Name = "pictureScreen";
this.pictureScreen.Size = new System.Drawing.Size(38, 38); pictureScreen.Size = new Size(18, 19);
this.pictureScreen.TabIndex = 18; pictureScreen.TabIndex = 18;
this.pictureScreen.TabStop = false; pictureScreen.TabStop = false;
// //
// labelSreen // labelSreen
// //
this.labelSreen.AutoSize = true; labelSreen.AutoSize = true;
this.labelSreen.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); labelSreen.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
this.labelSreen.Location = new System.Drawing.Point(77, 496); labelSreen.Location = new Point(38, 248);
this.labelSreen.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); labelSreen.Margin = new Padding(2, 0, 2, 0);
this.labelSreen.Name = "labelSreen"; labelSreen.Name = "labelSreen";
this.labelSreen.Size = new System.Drawing.Size(176, 32); labelSreen.Size = new Size(87, 15);
this.labelSreen.TabIndex = 17; labelSreen.TabIndex = 17;
this.labelSreen.Text = "Laptop Screen"; labelSreen.Text = "Laptop Screen";
// //
// tableScreen // tableScreen
// //
this.tableScreen.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) tableScreen.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
| System.Windows.Forms.AnchorStyles.Right))); tableScreen.ColumnCount = 3;
this.tableScreen.ColumnCount = 3; tableScreen.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F));
this.tableScreen.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); tableScreen.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F));
this.tableScreen.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); tableScreen.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 33.33333F));
this.tableScreen.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F)); tableScreen.Controls.Add(button120Hz, 1, 0);
this.tableScreen.Controls.Add(this.button120Hz, 1, 0); tableScreen.Controls.Add(button60Hz, 0, 0);
this.tableScreen.Controls.Add(this.button60Hz, 0, 0); tableScreen.Location = new Point(11, 268);
this.tableScreen.Location = new System.Drawing.Point(22, 536); tableScreen.Margin = new Padding(2, 1, 2, 1);
this.tableScreen.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); tableScreen.Name = "tableScreen";
this.tableScreen.Name = "tableScreen"; tableScreen.RowCount = 1;
this.tableScreen.RowCount = 1; tableScreen.RowStyles.Add(new RowStyle(SizeType.Absolute, 54F));
this.tableScreen.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 107F)); tableScreen.Size = new Size(338, 54);
this.tableScreen.Size = new System.Drawing.Size(690, 102); tableScreen.TabIndex = 19;
this.tableScreen.TabIndex = 19;
// //
// button120Hz // button120Hz
// //
this.button120Hz.BackColor = System.Drawing.SystemColors.ControlLightLight; button120Hz.BackColor = SystemColors.ControlLightLight;
this.button120Hz.Dock = System.Windows.Forms.DockStyle.Fill; button120Hz.Dock = DockStyle.Fill;
this.button120Hz.FlatAppearance.BorderColor = System.Drawing.SystemColors.ActiveBorder; button120Hz.FlatAppearance.BorderColor = SystemColors.ActiveBorder;
this.button120Hz.FlatAppearance.BorderSize = 0; button120Hz.FlatAppearance.BorderSize = 0;
this.button120Hz.FlatStyle = System.Windows.Forms.FlatStyle.Flat; button120Hz.FlatStyle = FlatStyle.Flat;
this.button120Hz.Location = new System.Drawing.Point(239, 11); button120Hz.Location = new Point(116, 6);
this.button120Hz.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); button120Hz.Margin = new Padding(4, 6, 4, 6);
this.button120Hz.Name = "button120Hz"; button120Hz.Name = "button120Hz";
this.button120Hz.Size = new System.Drawing.Size(212, 85); button120Hz.Size = new Size(104, 42);
this.button120Hz.TabIndex = 1; button120Hz.TabIndex = 1;
this.button120Hz.Text = "120Hz + OD"; button120Hz.Text = "120Hz + OD";
this.button120Hz.UseVisualStyleBackColor = false; button120Hz.UseVisualStyleBackColor = false;
// //
// button60Hz // button60Hz
// //
this.button60Hz.BackColor = System.Drawing.SystemColors.ControlLightLight; button60Hz.BackColor = SystemColors.ControlLightLight;
this.button60Hz.CausesValidation = false; button60Hz.CausesValidation = false;
this.button60Hz.Dock = System.Windows.Forms.DockStyle.Fill; button60Hz.Dock = DockStyle.Fill;
this.button60Hz.FlatAppearance.BorderColor = System.Drawing.SystemColors.ActiveBorder; button60Hz.FlatAppearance.BorderColor = SystemColors.ActiveBorder;
this.button60Hz.FlatAppearance.BorderSize = 0; button60Hz.FlatAppearance.BorderSize = 0;
this.button60Hz.FlatStyle = System.Windows.Forms.FlatStyle.Flat; button60Hz.FlatStyle = FlatStyle.Flat;
this.button60Hz.ForeColor = System.Drawing.SystemColors.ControlText; button60Hz.ForeColor = SystemColors.ControlText;
this.button60Hz.Location = new System.Drawing.Point(9, 11); button60Hz.Location = new Point(4, 6);
this.button60Hz.Margin = new System.Windows.Forms.Padding(9, 11, 9, 11); button60Hz.Margin = new Padding(4, 6, 4, 6);
this.button60Hz.Name = "button60Hz"; button60Hz.Name = "button60Hz";
this.button60Hz.Size = new System.Drawing.Size(212, 85); button60Hz.Size = new Size(104, 42);
this.button60Hz.TabIndex = 0; button60Hz.TabIndex = 0;
this.button60Hz.Text = "60Hz"; button60Hz.Text = "60Hz";
this.button60Hz.UseVisualStyleBackColor = false; button60Hz.UseVisualStyleBackColor = false;
// //
// checkScreen // checkScreen
// //
this.checkScreen.AutoSize = true; checkScreen.AutoSize = true;
this.checkScreen.ForeColor = System.Drawing.SystemColors.GrayText; checkScreen.ForeColor = SystemColors.GrayText;
this.checkScreen.Location = new System.Drawing.Point(33, 639); checkScreen.Location = new Point(16, 322);
this.checkScreen.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); checkScreen.Margin = new Padding(2, 1, 2, 1);
this.checkScreen.Name = "checkScreen"; checkScreen.Name = "checkScreen";
this.checkScreen.Size = new System.Drawing.Size(527, 36); checkScreen.Size = new Size(261, 19);
this.checkScreen.TabIndex = 20; checkScreen.TabIndex = 20;
this.checkScreen.Text = "Set 60Hz on battery, and back when plugged"; checkScreen.Text = "Set 60Hz on battery, and back when plugged";
this.checkScreen.UseVisualStyleBackColor = true; checkScreen.UseVisualStyleBackColor = true;
// //
// checkBoost // checkBoost
// //
this.checkBoost.AutoSize = true; checkBoost.AutoSize = true;
this.checkBoost.ForeColor = System.Drawing.SystemColors.GrayText; checkBoost.ForeColor = SystemColors.GrayText;
this.checkBoost.Location = new System.Drawing.Point(33, 184); checkBoost.Location = new Point(16, 92);
this.checkBoost.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); checkBoost.Margin = new Padding(2, 1, 2, 1);
this.checkBoost.Name = "checkBoost"; checkBoost.Name = "checkBoost";
this.checkBoost.Size = new System.Drawing.Size(250, 36); checkBoost.Size = new Size(161, 19);
this.checkBoost.TabIndex = 21; checkBoost.TabIndex = 21;
this.checkBoost.Text = "CPU Boost enabled"; checkBoost.Text = "CPU Turbo Boost enabled";
this.checkBoost.UseVisualStyleBackColor = true; checkBoost.UseVisualStyleBackColor = true;
// //
// pictureBox1 // pictureBox1
// //
this.pictureBox1.BackgroundImage = global::GHelper.Properties.Resources.icons8_keyboard_48; pictureBox1.BackgroundImage = Properties.Resources.icons8_keyboard_48;
this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; pictureBox1.BackgroundImageLayout = ImageLayout.Zoom;
this.pictureBox1.Location = new System.Drawing.Point(33, 725); pictureBox1.Location = new Point(16, 362);
this.pictureBox1.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); pictureBox1.Margin = new Padding(2, 1, 2, 1);
this.pictureBox1.Name = "pictureBox1"; pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(36, 36); pictureBox1.Size = new Size(18, 18);
this.pictureBox1.TabIndex = 23; pictureBox1.TabIndex = 23;
this.pictureBox1.TabStop = false; pictureBox1.TabStop = false;
// //
// label1 // label1
// //
this.label1.AutoSize = true; label1.AutoSize = true;
this.label1.Font = new System.Drawing.Font("Segoe UI", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point); label1.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
this.label1.Location = new System.Drawing.Point(77, 726); label1.Location = new Point(38, 362);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); label1.Margin = new Padding(2, 0, 2, 0);
this.label1.Name = "label1"; label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(210, 32); label1.Size = new Size(101, 15);
this.label1.TabIndex = 22; label1.TabIndex = 22;
this.label1.Text = "Laptop Keyboard"; label1.Text = "Laptop Keyboard";
// //
// comboKeyboard // comboKeyboard
// //
this.comboKeyboard.FlatStyle = System.Windows.Forms.FlatStyle.Flat; comboKeyboard.FlatStyle = FlatStyle.Flat;
this.comboKeyboard.FormattingEnabled = true; comboKeyboard.Font = new Font("Segoe UI", 10F, FontStyle.Regular, GraphicsUnit.Point);
this.comboKeyboard.ItemHeight = 32; comboKeyboard.FormattingEnabled = true;
this.comboKeyboard.Items.AddRange(new object[] { comboKeyboard.ItemHeight = 17;
"Static", comboKeyboard.Items.AddRange(new object[] { "Static", "Breathe", "Strobe", "Rainbow" });
"Breathe", comboKeyboard.Location = new Point(18, 388);
"Strobe", comboKeyboard.Margin = new Padding(0);
"Rainbow"}); comboKeyboard.Name = "comboKeyboard";
this.comboKeyboard.Location = new System.Drawing.Point(38, 778); comboKeyboard.Size = new Size(102, 25);
this.comboKeyboard.Margin = new System.Windows.Forms.Padding(0); comboKeyboard.TabIndex = 24;
this.comboKeyboard.Name = "comboKeyboard"; comboKeyboard.TabStop = false;
this.comboKeyboard.Size = new System.Drawing.Size(200, 40);
this.comboKeyboard.TabIndex = 24;
this.comboKeyboard.TabStop = false;
// //
// buttonKeyboardColor // buttonKeyboardColor
// //
this.buttonKeyboardColor.BackColor = System.Drawing.SystemColors.ButtonHighlight; buttonKeyboardColor.AutoSize = true;
this.buttonKeyboardColor.FlatAppearance.BorderColor = System.Drawing.Color.Red; buttonKeyboardColor.BackColor = SystemColors.ButtonHighlight;
this.buttonKeyboardColor.FlatAppearance.BorderSize = 3; buttonKeyboardColor.FlatAppearance.BorderColor = Color.Red;
this.buttonKeyboardColor.FlatStyle = System.Windows.Forms.FlatStyle.Flat; buttonKeyboardColor.FlatAppearance.BorderSize = 2;
this.buttonKeyboardColor.ForeColor = System.Drawing.SystemColors.ControlText; buttonKeyboardColor.FlatStyle = FlatStyle.Flat;
this.buttonKeyboardColor.Location = new System.Drawing.Point(261, 773); buttonKeyboardColor.ForeColor = SystemColors.ControlText;
this.buttonKeyboardColor.Margin = new System.Windows.Forms.Padding(0); buttonKeyboardColor.Location = new Point(128, 388);
this.buttonKeyboardColor.Name = "buttonKeyboardColor"; buttonKeyboardColor.Margin = new Padding(0);
this.buttonKeyboardColor.Size = new System.Drawing.Size(212, 50); buttonKeyboardColor.Name = "buttonKeyboardColor";
this.buttonKeyboardColor.TabIndex = 25; buttonKeyboardColor.Size = new Size(106, 29);
this.buttonKeyboardColor.Text = "Color"; buttonKeyboardColor.TabIndex = 25;
this.buttonKeyboardColor.UseVisualStyleBackColor = false; buttonKeyboardColor.Text = "Color";
// buttonKeyboardColor.UseVisualStyleBackColor = false;
// pictureBox2
//
this.pictureBox2.BackColor = System.Drawing.SystemColors.ControlLightLight;
this.pictureBox2.Location = new System.Drawing.Point(32, 773);
this.pictureBox2.Name = "pictureBox2";
this.pictureBox2.Size = new System.Drawing.Size(212, 50);
this.pictureBox2.TabIndex = 26;
this.pictureBox2.TabStop = false;
// //
// labelBattery // labelBattery
// //
this.labelBattery.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); labelBattery.Anchor = AnchorStyles.Top | AnchorStyles.Right;
this.labelBattery.Location = new System.Drawing.Point(491, 869); labelBattery.Location = new Point(205, 434);
this.labelBattery.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); labelBattery.Margin = new Padding(2, 0, 2, 0);
this.labelBattery.Name = "labelBattery"; labelBattery.Name = "labelBattery";
this.labelBattery.Size = new System.Drawing.Size(211, 32); labelBattery.Size = new Size(138, 16);
this.labelBattery.TabIndex = 27; labelBattery.TabIndex = 27;
this.labelBattery.Text = " "; labelBattery.Text = " ";
this.labelBattery.TextAlign = System.Drawing.ContentAlignment.TopRight; labelBattery.TextAlign = ContentAlignment.TopRight;
//
// buttonFans
//
buttonFans.Anchor = AnchorStyles.Top | AnchorStyles.Right;
buttonFans.BackColor = SystemColors.ButtonFace;
buttonFans.Location = new Point(263, 93);
buttonFans.Margin = new Padding(2, 1, 2, 1);
buttonFans.Name = "buttonFans";
buttonFans.Size = new Size(82, 24);
buttonFans.TabIndex = 28;
buttonFans.Text = "Fan Profile";
buttonFans.UseVisualStyleBackColor = false;
// //
// SettingsForm // SettingsForm
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(13F, 32F); AutoScaleDimensions = new SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; AutoScaleMode = AutoScaleMode.Dpi;
this.ClientSize = new System.Drawing.Size(744, 1093); ClientSize = new Size(365, 543);
this.Controls.Add(this.labelBattery); Controls.Add(buttonFans);
this.Controls.Add(this.buttonKeyboardColor); Controls.Add(labelBattery);
this.Controls.Add(this.comboKeyboard); Controls.Add(buttonKeyboardColor);
this.Controls.Add(this.pictureBox1); Controls.Add(comboKeyboard);
this.Controls.Add(this.label1); Controls.Add(pictureBox1);
this.Controls.Add(this.checkBoost); Controls.Add(label1);
this.Controls.Add(this.checkScreen); Controls.Add(checkBoost);
this.Controls.Add(this.tableScreen); Controls.Add(checkScreen);
this.Controls.Add(this.pictureScreen); Controls.Add(tableScreen);
this.Controls.Add(this.labelSreen); Controls.Add(pictureScreen);
this.Controls.Add(this.buttonQuit); Controls.Add(labelSreen);
this.Controls.Add(this.checkGPU); Controls.Add(buttonQuit);
this.Controls.Add(this.picturePerf); Controls.Add(checkGPU);
this.Controls.Add(this.labelPerf); Controls.Add(picturePerf);
this.Controls.Add(this.labelCPUFan); Controls.Add(labelPerf);
this.Controls.Add(this.tablePerf); Controls.Add(labelCPUFan);
this.Controls.Add(this.pictureGPU); Controls.Add(tablePerf);
this.Controls.Add(this.labelGPU); Controls.Add(pictureGPU);
this.Controls.Add(this.labelGPUFan); Controls.Add(labelGPU);
this.Controls.Add(this.tableGPU); Controls.Add(labelGPUFan);
this.Controls.Add(this.pictureBattery); Controls.Add(tableGPU);
this.Controls.Add(this.labelBatteryTitle); Controls.Add(pictureBattery);
this.Controls.Add(this.trackBattery); Controls.Add(labelBatteryTitle);
this.Controls.Add(this.checkStartup); Controls.Add(trackBattery);
this.Controls.Add(this.pictureBox2); Controls.Add(checkStartup);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; FormBorderStyle = FormBorderStyle.FixedSingle;
this.Margin = new System.Windows.Forms.Padding(4, 2, 4, 2); Margin = new Padding(2, 1, 2, 1);
this.MaximizeBox = false; MaximizeBox = false;
this.MdiChildrenMinimizedAnchorBottom = false; MdiChildrenMinimizedAnchorBottom = false;
this.MinimizeBox = false; MinimizeBox = false;
this.Name = "SettingsForm"; Name = "SettingsForm";
this.Padding = new System.Windows.Forms.Padding(9, 11, 9, 11); Padding = new Padding(4, 6, 4, 6);
this.ShowIcon = false; ShowIcon = false;
this.ShowInTaskbar = false; StartPosition = FormStartPosition.CenterScreen;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; Text = "G-Helper";
this.Text = "G-Helper"; Load += Settings_Load;
this.Load += new System.EventHandler(this.Settings_Load); ((System.ComponentModel.ISupportInitialize)trackBattery).EndInit();
((System.ComponentModel.ISupportInitialize)(this.trackBattery)).EndInit(); ((System.ComponentModel.ISupportInitialize)pictureBattery).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBattery)).EndInit(); tableGPU.ResumeLayout(false);
this.tableGPU.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)pictureGPU).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureGPU)).EndInit(); tablePerf.ResumeLayout(false);
this.tablePerf.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)picturePerf).EndInit();
((System.ComponentModel.ISupportInitialize)(this.picturePerf)).EndInit(); ((System.ComponentModel.ISupportInitialize)pictureScreen).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureScreen)).EndInit(); tableScreen.ResumeLayout(false);
this.tableScreen.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
} }
#endregion #endregion
@@ -603,7 +596,7 @@
private Label label1; private Label label1;
private ComboBox comboKeyboard; private ComboBox comboKeyboard;
private Button buttonKeyboardColor; private Button buttonKeyboardColor;
private PictureBox pictureBox2;
private Label labelBattery; private Label labelBattery;
private Button buttonFans;
} }
} }

View File

@@ -1,8 +1,6 @@
using System.Diagnostics; using System.Diagnostics;
using System.Timers; using System.Timers;
using System.Windows.Forms;
using Windows.UI.Notifications;
using Microsoft.Toolkit.Uwp.Notifications;
namespace GHelper namespace GHelper
{ {
@@ -19,6 +17,10 @@ namespace GHelper
static System.Timers.Timer aTimer = default!; static System.Timers.Timer aTimer = default!;
public string perfName;
Fans fans;
public SettingsForm() public SettingsForm()
{ {
@@ -62,13 +64,34 @@ namespace GHelper
buttonKeyboardColor.Click += ButtonKeyboardColor_Click; buttonKeyboardColor.Click += ButtonKeyboardColor_Click;
buttonFans.Click += ButtonFans_Click;
SetTimer(); SetTimer();
}
private void ButtonFans_Click(object? sender, EventArgs e)
{
if (fans == null || fans.Text == "")
{
fans = new Fans();
fans.Show();
}
else
{
fans.Close();
}
} }
private void ButtonKeyboardColor_Click(object? sender, EventArgs e) private void ButtonKeyboardColor_Click(object? sender, EventArgs e)
{ {
if (sender is null)
return;
Button but = (Button)sender; Button but = (Button)sender;
ColorDialog colorDlg = new ColorDialog(); ColorDialog colorDlg = new ColorDialog();
@@ -143,6 +166,9 @@ namespace GHelper
private void ComboKeyboard_SelectedValueChanged(object? sender, EventArgs e) private void ComboKeyboard_SelectedValueChanged(object? sender, EventArgs e)
{ {
if (sender is null)
return;
ComboBox cmb = (ComboBox)sender; ComboBox cmb = (ComboBox)sender;
SetAuraMode(cmb.SelectedIndex); SetAuraMode(cmb.SelectedIndex);
} }
@@ -150,6 +176,9 @@ namespace GHelper
private void CheckBoost_Click(object? sender, EventArgs e) private void CheckBoost_Click(object? sender, EventArgs e)
{ {
if (sender is null)
return;
CheckBox chk = (CheckBox)sender; CheckBox chk = (CheckBox)sender;
if (chk.Checked) if (chk.Checked)
NativeMethods.SetCPUBoost(3); NativeMethods.SetCPUBoost(3);
@@ -371,18 +400,10 @@ namespace GHelper
public void SetPerformanceMode(int PerformanceMode = ASUSWmi.PerformanceBalanced, bool notify = false) public void SetPerformanceMode(int PerformanceMode = ASUSWmi.PerformanceBalanced, bool notify = false)
{ {
string perfName;
buttonSilent.FlatAppearance.BorderSize = buttonInactive; buttonSilent.FlatAppearance.BorderSize = buttonInactive;
buttonBalanced.FlatAppearance.BorderSize = buttonInactive; buttonBalanced.FlatAppearance.BorderSize = buttonInactive;
buttonTurbo.FlatAppearance.BorderSize = buttonInactive; buttonTurbo.FlatAppearance.BorderSize = buttonInactive;
string[] mode = new string[]{
"Balanced",
"Turbo",
"Silent"
};
switch (PerformanceMode) switch (PerformanceMode)
{ {
case ASUSWmi.PerformanceSilent: case ASUSWmi.PerformanceSilent:
@@ -400,19 +421,20 @@ namespace GHelper
break; break;
} }
string notifTitle = "Performance Mode Changed";
string notifBody = "Switched to: " + mode[PerformanceMode];
Program.config.setConfig("performance_mode", PerformanceMode); Program.config.setConfig("performance_mode", PerformanceMode);
try try
{ {
Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, PerformanceMode); Program.wmi.DeviceSet(ASUSWmi.PerformanceMode, PerformanceMode);
} catch }
catch
{ {
labelPerf.Text = "Performance Mode: not supported"; labelPerf.Text = "Performance Mode: not supported";
} }
if(notify) if (fans != null && fans.Text != "")
sendNotification(notifTitle, notifBody); fans.LoadFans();
} }
@@ -421,24 +443,6 @@ namespace GHelper
SetPerformanceMode(Program.config.getConfig("performance_mode") + 1, true); SetPerformanceMode(Program.config.getConfig("performance_mode") + 1, true);
} }
public void sendNotification(string title, string message)
{
var content = new ToastContentBuilder()
.AddText(title)
.AddText(message)
.SetToastDuration(ToastDuration.Short)
.GetToastContent();
var notification = new ToastNotification(content.GetXml())
{
Priority = ToastNotificationPriority.High
};
ToastNotificationManagerCompat.CreateToastNotifier().Show(notification);
}
public void AutoScreen(int Plugged = 1) public void AutoScreen(int Plugged = 1)
{ {
int ScreenAuto = Program.config.getConfig("screen_auto"); int ScreenAuto = Program.config.getConfig("screen_auto");
@@ -462,7 +466,6 @@ namespace GHelper
int eco = Program.wmi.DeviceGet(ASUSWmi.GPUEco); int eco = Program.wmi.DeviceGet(ASUSWmi.GPUEco);
int mux = Program.wmi.DeviceGet(ASUSWmi.GPUMux); int mux = Program.wmi.DeviceGet(ASUSWmi.GPUMux);
int GPUMode;
if (mux == 0) // GPU in Ultimate, ignore if (mux == 0) // GPU in Ultimate, ignore
return; return;
@@ -640,11 +643,11 @@ namespace GHelper
CheckBox chk = (CheckBox)sender; CheckBox chk = (CheckBox)sender;
if (chk.Checked) if (chk.Checked)
{ {
Program.scheduler.Schedule(); Startup.Schedule();
} }
else else
{ {
Program.scheduler.UnSchedule(); Startup.UnSchedule();
} }
} }
@@ -667,14 +670,20 @@ namespace GHelper
} }
private void trackBatteryChange(object sender, EventArgs e) private void trackBatteryChange(object? sender, EventArgs e)
{ {
if (sender is null)
return;
TrackBar bar = (TrackBar)sender; TrackBar bar = (TrackBar)sender;
SetBatteryChargeLimit(bar.Value); SetBatteryChargeLimit(bar.Value);
} }
private void checkGPU_CheckedChanged(object sender, EventArgs e) private void checkGPU_CheckedChanged(object? sender, EventArgs e)
{ {
if (sender is null)
return;
CheckBox chk = (CheckBox)sender; CheckBox chk = (CheckBox)sender;
if (chk.Checked) if (chk.Checked)
Program.config.setConfig("gpu_auto", 1); Program.config.setConfig("gpu_auto", 1);
@@ -683,8 +692,12 @@ namespace GHelper
} }
private void checkScreen_CheckedChanged(object sender, EventArgs e) private void checkScreen_CheckedChanged(object? sender, EventArgs e)
{ {
if (sender is null)
return;
CheckBox chk = (CheckBox)sender; CheckBox chk = (CheckBox)sender;
if (chk.Checked) if (chk.Checked)
Program.config.setConfig("screen_auto", 1); Program.config.setConfig("screen_auto", 1);

53
Startup.cs Normal file
View File

@@ -0,0 +1,53 @@
using Microsoft.Win32.TaskScheduler;
using System.Diagnostics;
using System.Security.Principal;
public class Startup
{
static string taskName = "GHelper";
public static bool IsScheduled()
{
TaskService taskService = new TaskService();
// cleanup of OLD autorun
try
{
taskService.RootFolder.DeleteTask("GSharpHelper");
} catch
{
Debug.WriteLine("Not running as admin");
}
return (taskService.RootFolder.AllTasks.Any(t => t.Name == taskName));
}
public static void Schedule()
{
string strExeFilePath = Application.ExecutablePath;
if (strExeFilePath is null) return;
var userId = WindowsIdentity.GetCurrent().Name;
//Debug.WriteLine(strExeFilePath);
TaskDefinition td = TaskService.Instance.NewTask();
td.RegistrationInfo.Description = "GHelper Auto Start";
td.Triggers.Add(new LogonTrigger { UserId = userId, });
td.Actions.Add(strExeFilePath);
td.Settings.StopIfGoingOnBatteries = false;
td.Settings.DisallowStartIfOnBatteries = false;
TaskService.Instance.RootFolder.RegisterTaskDefinition(taskName, td);
}
public static void UnSchedule()
{
TaskService taskService = new TaskService();
taskService.RootFolder.DeleteTask(taskName);
}
}

View File

@@ -16,7 +16,7 @@
Remove this element if your application requires this virtualization for backwards Remove this element if your application requires this virtualization for backwards
compatibility. compatibility.
--> -->
<requestedExecutionLevel level="highestAvailable" uiAccess="false" /> <requestedExecutionLevel level="asInvoker" uiAccess="false" />
</requestedPrivileges> </requestedPrivileges>
</security> </security>
</trustInfo> </trustInfo>
@@ -53,13 +53,16 @@
Makes the application long-path aware. See https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation --> Makes the application long-path aware. See https://docs.microsoft.com/windows/win32/fileio/maximum-file-path-limitation -->
<application xmlns="urn:schemas-microsoft-com:asm.v3"> <application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings> <windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware> <!--<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitor/dpiAwareness>-->
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware> <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2, PerMonitor, System</dpiAwareness>
</windowsSettings> <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</application> </windowsSettings>
</application>
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<dependency> <dependency>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity <assemblyIdentity

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB