Compare commits

...

6 Commits

Author SHA1 Message Date
seerge
30f678d08f Hide unsupported power sliders 2023-03-07 16:10:56 +01:00
seerge
cf201632d5 New built in monitor detection system 2023-03-07 15:23:06 +01:00
seerge
003a19d94b Auto off for matrix on battery 2023-03-06 19:57:47 +01:00
seerge
6c3d4b9cb2 Added ACPI alert 2023-03-06 18:34:26 +01:00
seerge
aa62330c1c UI Fixes 2023-03-06 13:30:04 +01:00
seerge
954861f2b1 Timers fix 2023-03-06 00:46:35 +01:00
8 changed files with 1076 additions and 720 deletions

295
Fans.Designer.cs generated
View File

@@ -28,114 +28,208 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea3 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea2 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea4 = new System.Windows.Forms.DataVisualization.Charting.ChartArea();
chartCPU = new System.Windows.Forms.DataVisualization.Charting.Chart(); chartCPU = new System.Windows.Forms.DataVisualization.Charting.Chart();
buttonApply = new Button(); buttonApply = new Button();
buttonReset = new Button(); buttonReset = new Button();
chartGPU = new System.Windows.Forms.DataVisualization.Charting.Chart(); chartGPU = new System.Windows.Forms.DataVisualization.Charting.Chart();
groupBox1 = new GroupBox(); groupBox1 = new GroupBox();
panelCPU = new Panel();
labelCPU = new Label();
label2 = new Label();
trackCPU = new TrackBar();
panelTotal = new Panel();
labelTotal = new Label();
label1 = new Label();
trackTotal = new TrackBar();
labelApplied = new Label(); labelApplied = new Label();
pictureFine = new PictureBox(); pictureFine = new PictureBox();
labelInfo = new Label(); labelInfo = new Label();
labelCPU = new Label();
labelTotal = new Label();
label2 = new Label();
label1 = new Label();
trackCPU = new TrackBar();
trackTotal = new TrackBar();
buttonApplyPower = new Button(); buttonApplyPower = new Button();
checkAuto = new CheckBox(); checkAuto = new CheckBox();
((System.ComponentModel.ISupportInitialize)chartCPU).BeginInit(); ((System.ComponentModel.ISupportInitialize)chartCPU).BeginInit();
((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit(); ((System.ComponentModel.ISupportInitialize)chartGPU).BeginInit();
groupBox1.SuspendLayout(); groupBox1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)pictureFine).BeginInit(); panelCPU.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackCPU).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackCPU).BeginInit();
panelTotal.SuspendLayout();
((System.ComponentModel.ISupportInitialize)trackTotal).BeginInit(); ((System.ComponentModel.ISupportInitialize)trackTotal).BeginInit();
((System.ComponentModel.ISupportInitialize)pictureFine).BeginInit();
SuspendLayout(); SuspendLayout();
// //
// chartCPU // chartCPU
// //
chartArea1.Name = "ChartArea1"; chartArea3.Name = "ChartArea1";
chartCPU.ChartAreas.Add(chartArea1); chartCPU.ChartAreas.Add(chartArea3);
chartCPU.Location = new Point(195, 14); chartCPU.Location = new Point(390, 28);
chartCPU.Margin = new Padding(2, 1, 2, 1); chartCPU.Margin = new Padding(4, 2, 4, 2);
chartCPU.Name = "chartCPU"; chartCPU.Name = "chartCPU";
chartCPU.Size = new Size(416, 218); chartCPU.Size = new Size(832, 436);
chartCPU.TabIndex = 0; chartCPU.TabIndex = 0;
chartCPU.Text = "chartCPU"; chartCPU.Text = "chartCPU";
// //
// buttonApply // buttonApply
// //
buttonApply.Location = new Point(473, 476); buttonApply.Location = new Point(946, 952);
buttonApply.Margin = new Padding(2, 1, 2, 1); buttonApply.Margin = new Padding(4, 2, 4, 2);
buttonApply.Name = "buttonApply"; buttonApply.Name = "buttonApply";
buttonApply.Size = new Size(137, 22); buttonApply.Size = new Size(274, 44);
buttonApply.TabIndex = 1; buttonApply.TabIndex = 1;
buttonApply.Text = "Apply Fan Curve"; buttonApply.Text = "Apply Fan Curve";
buttonApply.UseVisualStyleBackColor = true; buttonApply.UseVisualStyleBackColor = true;
// //
// buttonReset // buttonReset
// //
buttonReset.Location = new Point(195, 476); buttonReset.Location = new Point(390, 952);
buttonReset.Margin = new Padding(2, 1, 2, 1); buttonReset.Margin = new Padding(4, 2, 4, 2);
buttonReset.Name = "buttonReset"; buttonReset.Name = "buttonReset";
buttonReset.Size = new Size(137, 22); buttonReset.Size = new Size(274, 44);
buttonReset.TabIndex = 2; buttonReset.TabIndex = 2;
buttonReset.Text = "Factory Defaults"; buttonReset.Text = "Factory Defaults";
buttonReset.UseVisualStyleBackColor = true; buttonReset.UseVisualStyleBackColor = true;
// //
// chartGPU // chartGPU
// //
chartArea2.Name = "ChartArea1"; chartArea4.Name = "ChartArea1";
chartGPU.ChartAreas.Add(chartArea2); chartGPU.ChartAreas.Add(chartArea4);
chartGPU.Location = new Point(195, 240); chartGPU.Location = new Point(390, 480);
chartGPU.Margin = new Padding(2, 1, 2, 1); chartGPU.Margin = new Padding(4, 2, 4, 2);
chartGPU.Name = "chartGPU"; chartGPU.Name = "chartGPU";
chartGPU.Size = new Size(416, 225); chartGPU.Size = new Size(832, 450);
chartGPU.TabIndex = 3; chartGPU.TabIndex = 3;
chartGPU.Text = "chart1"; chartGPU.Text = "chart1";
// //
// groupBox1 // groupBox1
// //
groupBox1.Controls.Add(panelCPU);
groupBox1.Controls.Add(panelTotal);
groupBox1.Controls.Add(labelApplied); groupBox1.Controls.Add(labelApplied);
groupBox1.Controls.Add(pictureFine); groupBox1.Controls.Add(pictureFine);
groupBox1.Controls.Add(labelInfo); groupBox1.Controls.Add(labelInfo);
groupBox1.Controls.Add(labelCPU); groupBox1.Location = new Point(12, 12);
groupBox1.Controls.Add(labelTotal); groupBox1.Margin = new Padding(4, 2, 4, 2);
groupBox1.Controls.Add(label2);
groupBox1.Controls.Add(label1);
groupBox1.Controls.Add(trackCPU);
groupBox1.Controls.Add(trackTotal);
groupBox1.Location = new Point(6, 6);
groupBox1.Margin = new Padding(2, 1, 2, 1);
groupBox1.Name = "groupBox1"; groupBox1.Name = "groupBox1";
groupBox1.Padding = new Padding(3, 2, 3, 2); groupBox1.Padding = new Padding(6, 4, 6, 4);
groupBox1.Size = new Size(178, 459); groupBox1.Size = new Size(356, 918);
groupBox1.TabIndex = 4; groupBox1.TabIndex = 4;
groupBox1.TabStop = false; groupBox1.TabStop = false;
groupBox1.Text = "Power Limits (PPT)"; groupBox1.Text = "Power Limits (PPT)";
// //
// panelCPU
//
panelCPU.Controls.Add(labelCPU);
panelCPU.Controls.Add(label2);
panelCPU.Controls.Add(trackCPU);
panelCPU.Location = new Point(186, 72);
panelCPU.Name = "panelCPU";
panelCPU.Size = new Size(160, 510);
panelCPU.TabIndex = 15;
//
// labelCPU
//
labelCPU.AutoSize = true;
labelCPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelCPU.Location = new Point(43, 41);
labelCPU.Margin = new Padding(4, 0, 4, 0);
labelCPU.Name = "labelCPU";
labelCPU.Size = new Size(61, 32);
labelCPU.TabIndex = 13;
labelCPU.Text = "CPU";
labelCPU.TextAlign = ContentAlignment.MiddleCenter;
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(45, 7);
label2.Margin = new Padding(4, 0, 4, 0);
label2.Name = "label2";
label2.Size = new Size(58, 32);
label2.TabIndex = 12;
label2.Text = "CPU";
label2.TextAlign = ContentAlignment.MiddleCenter;
//
// trackCPU
//
trackCPU.Location = new Point(47, 89);
trackCPU.Margin = new Padding(4, 2, 4, 2);
trackCPU.Maximum = 85;
trackCPU.Minimum = 15;
trackCPU.Name = "trackCPU";
trackCPU.Orientation = Orientation.Vertical;
trackCPU.Size = new Size(90, 416);
trackCPU.TabIndex = 11;
trackCPU.TickFrequency = 5;
trackCPU.Value = 80;
//
// panelTotal
//
panelTotal.Controls.Add(labelTotal);
panelTotal.Controls.Add(label1);
panelTotal.Controls.Add(trackTotal);
panelTotal.Location = new Point(8, 72);
panelTotal.Name = "panelTotal";
panelTotal.Size = new Size(160, 511);
panelTotal.TabIndex = 14;
//
// labelTotal
//
labelTotal.AutoSize = true;
labelTotal.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelTotal.Location = new Point(46, 41);
labelTotal.Margin = new Padding(4, 0, 4, 0);
labelTotal.Name = "labelTotal";
labelTotal.Size = new Size(70, 32);
labelTotal.TabIndex = 12;
labelTotal.Text = "Total";
labelTotal.TextAlign = ContentAlignment.MiddleCenter;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(48, 7);
label1.Margin = new Padding(4, 0, 4, 0);
label1.Name = "label1";
label1.Size = new Size(65, 32);
label1.TabIndex = 11;
label1.Text = "Total";
label1.TextAlign = ContentAlignment.MiddleCenter;
//
// trackTotal
//
trackTotal.Location = new Point(44, 89);
trackTotal.Margin = new Padding(4, 2, 4, 2);
trackTotal.Maximum = 150;
trackTotal.Minimum = 15;
trackTotal.Name = "trackTotal";
trackTotal.Orientation = Orientation.Vertical;
trackTotal.Size = new Size(90, 416);
trackTotal.TabIndex = 10;
trackTotal.TickFrequency = 5;
trackTotal.TickStyle = TickStyle.TopLeft;
trackTotal.Value = 125;
//
// labelApplied // labelApplied
// //
labelApplied.AutoSize = true; labelApplied.AutoSize = true;
labelApplied.ForeColor = Color.Tomato; labelApplied.ForeColor = Color.Tomato;
labelApplied.Location = new Point(8, 18); labelApplied.Location = new Point(13, 36);
labelApplied.Margin = new Padding(2, 0, 2, 0); labelApplied.Margin = new Padding(4, 0, 4, 0);
labelApplied.Name = "labelApplied"; labelApplied.Name = "labelApplied";
labelApplied.Size = new Size(71, 15); labelApplied.Size = new Size(143, 32);
labelApplied.TabIndex = 13; labelApplied.TabIndex = 13;
labelApplied.Text = "Not Applied"; labelApplied.Text = "Not Applied";
// //
// pictureFine // pictureFine
// //
pictureFine.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; pictureFine.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
pictureFine.BackgroundImage = Properties.Resources.everything_is_fine_itsfine;
pictureFine.BackgroundImageLayout = ImageLayout.Zoom; pictureFine.BackgroundImageLayout = ImageLayout.Zoom;
pictureFine.Location = new Point(5, 343); pictureFine.Image = Properties.Resources.everything_is_fine_itsfine;
pictureFine.Margin = new Padding(2, 1, 2, 1); pictureFine.Location = new Point(10, 682);
pictureFine.Margin = new Padding(4, 2, 4, 2);
pictureFine.Name = "pictureFine"; pictureFine.Name = "pictureFine";
pictureFine.Size = new Size(167, 112); pictureFine.Size = new Size(336, 226);
pictureFine.SizeMode = PictureBoxSizeMode.Zoom;
pictureFine.TabIndex = 12; pictureFine.TabIndex = 12;
pictureFine.TabStop = false; pictureFine.TabStop = false;
pictureFine.Visible = false; pictureFine.Visible = false;
@@ -144,92 +238,19 @@
// //
labelInfo.AutoSize = true; labelInfo.AutoSize = true;
labelInfo.Dock = DockStyle.Bottom; labelInfo.Dock = DockStyle.Bottom;
labelInfo.Location = new Point(3, 442); labelInfo.Location = new Point(6, 882);
labelInfo.Margin = new Padding(2, 0, 2, 0); labelInfo.Margin = new Padding(4, 0, 4, 0);
labelInfo.Name = "labelInfo"; labelInfo.Name = "labelInfo";
labelInfo.Size = new Size(32, 15); labelInfo.Size = new Size(65, 32);
labelInfo.TabIndex = 11; labelInfo.TabIndex = 11;
labelInfo.Text = "label"; labelInfo.Text = "label";
// //
// labelCPU
//
labelCPU.AutoSize = true;
labelCPU.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelCPU.Location = new Point(106, 59);
labelCPU.Margin = new Padding(2, 0, 2, 0);
labelCPU.Name = "labelCPU";
labelCPU.Size = new Size(30, 15);
labelCPU.TabIndex = 10;
labelCPU.Text = "CPU";
labelCPU.TextAlign = ContentAlignment.MiddleCenter;
//
// labelTotal
//
labelTotal.AutoSize = true;
labelTotal.Font = new Font("Segoe UI", 9F, FontStyle.Bold, GraphicsUnit.Point);
labelTotal.Location = new Point(21, 59);
labelTotal.Margin = new Padding(2, 0, 2, 0);
labelTotal.Name = "labelTotal";
labelTotal.Size = new Size(34, 15);
labelTotal.TabIndex = 9;
labelTotal.Text = "Total";
labelTotal.TextAlign = ContentAlignment.MiddleCenter;
//
// label2
//
label2.AutoSize = true;
label2.Location = new Point(108, 43);
label2.Margin = new Padding(2, 0, 2, 0);
label2.Name = "label2";
label2.Size = new Size(30, 15);
label2.TabIndex = 8;
label2.Text = "CPU";
label2.TextAlign = ContentAlignment.MiddleCenter;
//
// label1
//
label1.AutoSize = true;
label1.Location = new Point(22, 43);
label1.Margin = new Padding(2, 0, 2, 0);
label1.Name = "label1";
label1.Size = new Size(32, 15);
label1.TabIndex = 7;
label1.Text = "Total";
label1.TextAlign = ContentAlignment.MiddleCenter;
//
// trackCPU
//
trackCPU.Location = new Point(109, 83);
trackCPU.Margin = new Padding(2, 1, 2, 1);
trackCPU.Maximum = 85;
trackCPU.Minimum = 15;
trackCPU.Name = "trackCPU";
trackCPU.Orientation = Orientation.Vertical;
trackCPU.Size = new Size(45, 208);
trackCPU.TabIndex = 6;
trackCPU.TickFrequency = 5;
trackCPU.Value = 80;
//
// trackTotal
//
trackTotal.Location = new Point(23, 83);
trackTotal.Margin = new Padding(2, 1, 2, 1);
trackTotal.Maximum = 150;
trackTotal.Minimum = 15;
trackTotal.Name = "trackTotal";
trackTotal.Orientation = Orientation.Vertical;
trackTotal.Size = new Size(45, 208);
trackTotal.TabIndex = 5;
trackTotal.TickFrequency = 5;
trackTotal.TickStyle = TickStyle.TopLeft;
trackTotal.Value = 125;
//
// buttonApplyPower // buttonApplyPower
// //
buttonApplyPower.Location = new Point(8, 476); buttonApplyPower.Location = new Point(16, 952);
buttonApplyPower.Margin = new Padding(2, 1, 2, 1); buttonApplyPower.Margin = new Padding(4, 2, 4, 2);
buttonApplyPower.Name = "buttonApplyPower"; buttonApplyPower.Name = "buttonApplyPower";
buttonApplyPower.Size = new Size(176, 22); buttonApplyPower.Size = new Size(352, 44);
buttonApplyPower.TabIndex = 11; buttonApplyPower.TabIndex = 11;
buttonApplyPower.Text = "Apply Power Limits"; buttonApplyPower.Text = "Apply Power Limits";
buttonApplyPower.UseVisualStyleBackColor = true; buttonApplyPower.UseVisualStyleBackColor = true;
@@ -237,20 +258,20 @@
// checkAuto // checkAuto
// //
checkAuto.AutoSize = true; checkAuto.AutoSize = true;
checkAuto.Location = new Point(381, 479); checkAuto.Location = new Point(772, 958);
checkAuto.Margin = new Padding(2, 1, 2, 1); checkAuto.Margin = new Padding(4, 2, 4, 2);
checkAuto.Name = "checkAuto"; checkAuto.Name = "checkAuto";
checkAuto.Size = new Size(86, 19); checkAuto.Size = new Size(165, 36);
checkAuto.TabIndex = 12; checkAuto.TabIndex = 12;
checkAuto.Text = "Auto Apply"; checkAuto.Text = "Auto Apply";
checkAuto.UseVisualStyleBackColor = true; checkAuto.UseVisualStyleBackColor = true;
// //
// Fans // Fans
// //
AutoScaleDimensions = new SizeF(96F, 96F); AutoScaleDimensions = new SizeF(192F, 192F);
AutoScaleMode = AutoScaleMode.Dpi; AutoScaleMode = AutoScaleMode.Dpi;
AutoSize = true; AutoSize = true;
ClientSize = new Size(621, 510); ClientSize = new Size(1242, 1020);
Controls.Add(checkAuto); Controls.Add(checkAuto);
Controls.Add(buttonApplyPower); Controls.Add(buttonApplyPower);
Controls.Add(groupBox1); Controls.Add(groupBox1);
@@ -258,7 +279,7 @@
Controls.Add(buttonReset); Controls.Add(buttonReset);
Controls.Add(buttonApply); Controls.Add(buttonApply);
Controls.Add(chartCPU); Controls.Add(chartCPU);
Margin = new Padding(2, 1, 2, 1); Margin = new Padding(4, 2, 4, 2);
MaximizeBox = false; MaximizeBox = false;
MdiChildrenMinimizedAnchorBottom = false; MdiChildrenMinimizedAnchorBottom = false;
MinimizeBox = false; MinimizeBox = false;
@@ -271,9 +292,13 @@
((System.ComponentModel.ISupportInitialize)chartGPU).EndInit(); ((System.ComponentModel.ISupportInitialize)chartGPU).EndInit();
groupBox1.ResumeLayout(false); groupBox1.ResumeLayout(false);
groupBox1.PerformLayout(); groupBox1.PerformLayout();
((System.ComponentModel.ISupportInitialize)pictureFine).EndInit(); panelCPU.ResumeLayout(false);
panelCPU.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackCPU).EndInit(); ((System.ComponentModel.ISupportInitialize)trackCPU).EndInit();
panelTotal.ResumeLayout(false);
panelTotal.PerformLayout();
((System.ComponentModel.ISupportInitialize)trackTotal).EndInit(); ((System.ComponentModel.ISupportInitialize)trackTotal).EndInit();
((System.ComponentModel.ISupportInitialize)pictureFine).EndInit();
ResumeLayout(false); ResumeLayout(false);
PerformLayout(); PerformLayout();
} }
@@ -285,16 +310,18 @@
private Button buttonReset; private Button buttonReset;
private System.Windows.Forms.DataVisualization.Charting.Chart chartGPU; private System.Windows.Forms.DataVisualization.Charting.Chart chartGPU;
private GroupBox groupBox1; private GroupBox groupBox1;
private Label labelCPU;
private Label labelTotal;
private Label label2;
private Label label1;
private TrackBar trackCPU;
private TrackBar trackTotal;
private Button buttonApplyPower; private Button buttonApplyPower;
private Label labelInfo; private Label labelInfo;
private PictureBox pictureFine; private PictureBox pictureFine;
private Label labelApplied; private Label labelApplied;
private CheckBox checkAuto; private CheckBox checkAuto;
private Panel panelTotal;
private Label labelTotal;
private Label label1;
private TrackBar trackTotal;
private Panel panelCPU;
private Label labelCPU;
private Label label2;
private TrackBar trackCPU;
} }
} }

View File

@@ -145,7 +145,6 @@ namespace GHelper
Program.wmi.DeviceSet(ASUSWmi.PPT_TotalA1, limit_total); Program.wmi.DeviceSet(ASUSWmi.PPT_TotalA1, limit_total);
Program.wmi.DeviceSet(ASUSWmi.PPT_CPUB0, limit_cpu); Program.wmi.DeviceSet(ASUSWmi.PPT_CPUB0, limit_cpu);
Program.wmi.DeviceSet(ASUSWmi.PPT_CPUA2, limit_cpu);
labelApplied.ForeColor = Color.Blue; labelApplied.ForeColor = Color.Blue;
labelApplied.Text = "Applied"; labelApplied.Text = "Applied";
@@ -155,6 +154,9 @@ namespace GHelper
public void VisualisePower(bool init = false) public void VisualisePower(bool init = false)
{ {
panelTotal.Visible = (Program.wmi.DeviceGet(ASUSWmi.PPT_TotalA0) >= 0);
panelCPU.Visible = (Program.wmi.DeviceGet(ASUSWmi.PPT_CPUB0) >= 0);
int limit_total; int limit_total;
int limit_cpu; int limit_cpu;

View File

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

View File

@@ -1,4 +1,5 @@
using System.Diagnostics; using System.Diagnostics;
using System.Management;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
public class NativeMethods public class NativeMethods
@@ -160,10 +161,42 @@ public class NativeMethods
string lpszDeviceName, ref DEVMODE lpDevMode, IntPtr hwnd, string lpszDeviceName, ref DEVMODE lpDevMode, IntPtr hwnd,
DisplaySettingsFlags dwflags, IntPtr lParam); DisplaySettingsFlags dwflags, IntPtr lParam);
// ENUM DISPLAYS
[DllImport("user32.dll")]
static extern bool EnumDisplayDevicesA(string lpDevice, uint iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, uint dwFlags);
public const int ENUM_CURRENT_SETTINGS = -1; [Flags()]
public enum DisplayDeviceStateFlags : int
{
AttachedToDesktop = 0x1,
MultiDriver = 0x2,
PrimaryDevice = 0x4,
MirroringDriver = 0x8,
VGACompatible = 0x10,
Removable = 0x20,
ModesPruned = 0x8000000,
Remote = 0x4000000,
Disconnect = 0x2000000
}
public const string laptopScreenName = "\\\\.\\DISPLAY1"; [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct DISPLAY_DEVICE
{
[MarshalAs(UnmanagedType.U4)]
public int cb;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string DeviceName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceString;
[MarshalAs(UnmanagedType.U4)]
public DisplayDeviceStateFlags StateFlags;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceID;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
public string DeviceKey;
}
// ----
public static DEVMODE CreateDevmode() public static DEVMODE CreateDevmode()
{ {
@@ -174,34 +207,90 @@ public class NativeMethods
return dm; return dm;
} }
public static Screen FindLaptopScreen() public const int ENUM_CURRENT_SETTINGS = -1;
{ public const string laptopScreenName = "\\\\.\\DISPLAY1";
var screens = Screen.AllScreens;
Screen laptopScreen = null;
foreach (var screen in screens) public static string FindLaptopScreen()
{
string laptopScreen = null;
DISPLAY_DEVICE d = new DISPLAY_DEVICE();
d.cb = Marshal.SizeOf(d);
List<string> activeScreens = new List<string>();
int counter = 0;
int deviceNum = -1;
try
{ {
if (screen.DeviceName == laptopScreenName) var searcherActive = new ManagementObjectSearcher(@"\\.\root\wmi", "SELECT * FROM WmiMonitorBasicDisplayParams");
var resultsActive = searcherActive.Get();
foreach (var result in resultsActive)
{ {
laptopScreen = screen; activeScreens.Add(result["InstanceName"].ToString());
} }
var searcher = new ManagementObjectSearcher(@"\\.\root\wmi", "SELECT * FROM WmiMonitorConnectionParams");
var results = searcher.Get();
foreach (var result in results)
{
long technology;
long.TryParse(result["VideoOutputTechnology"].ToString(), out technology);
string instanceName = result["InstanceName"].ToString();
if (technology == 0x80000000 && activeScreens.Contains(instanceName))
{
deviceNum = counter;
//Debug.WriteLine(result["InstanceName"]);
}
counter++;
}
} catch
{
Debug.WriteLine("Failed to detect built in display");
deviceNum = 0;
} }
if (laptopScreen is null) return null; counter = 0;
else return laptopScreen; for (uint id = 0; EnumDisplayDevicesA(null, id, ref d, 0); id++)
{
if ((d.StateFlags & DisplayDeviceStateFlags.AttachedToDesktop) != 0)
{
if (counter == deviceNum)
{
laptopScreen = d.DeviceName;
//Debug.WriteLine(d.DeviceID);
//Debug.WriteLine(d.DeviceName);
}
counter++;
}
}
/*
if (laptopScreen is null)
{
foreach (var screen in screens)
Debug.WriteLine(screen.DeviceName);
}
*/
return laptopScreen;
} }
public static int GetRefreshRate() public static int GetRefreshRate()
{ {
DEVMODE dm = CreateDevmode(); DEVMODE dm = CreateDevmode();
Screen laptopScreen = FindLaptopScreen(); string laptopScreen = FindLaptopScreen();
int frequency = -1; int frequency = -1;
if (laptopScreen is null) if (laptopScreen is null)
return -1; return -1;
if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen.DeviceName, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm)) if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
{ {
frequency = dm.dmDisplayFrequency; frequency = dm.dmDisplayFrequency;
} }
@@ -212,15 +301,15 @@ public class NativeMethods
public static int SetRefreshRate(int frequency = 120) public static int SetRefreshRate(int frequency = 120)
{ {
DEVMODE dm = CreateDevmode(); DEVMODE dm = CreateDevmode();
Screen laptopScreen = FindLaptopScreen(); string laptopScreen = FindLaptopScreen();
if (laptopScreen is null) if (laptopScreen is null)
return -1; return -1;
if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen.DeviceName, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm)) if (0 != NativeMethods.EnumDisplaySettingsEx(laptopScreen, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
{ {
dm.dmDisplayFrequency = frequency; dm.dmDisplayFrequency = frequency;
int iRet = NativeMethods.ChangeDisplaySettingsEx(laptopScreen.DeviceName, ref dm, IntPtr.Zero, DisplaySettingsFlags.CDS_UPDATEREGISTRY, IntPtr.Zero); int iRet = NativeMethods.ChangeDisplaySettingsEx(laptopScreen, ref dm, IntPtr.Zero, DisplaySettingsFlags.CDS_UPDATEREGISTRY, IntPtr.Zero);
return iRet; return iRet;
} }

View File

@@ -1,7 +1,6 @@
using Microsoft.Win32; using Microsoft.Win32;
using System.Diagnostics; using System.Diagnostics;
using System.Management; using System.Management;
using Starlight.AnimeMatrix;
public class HardwareMonitor public class HardwareMonitor
{ {
@@ -44,7 +43,7 @@ namespace GHelper
Visible = true Visible = true
}; };
public static ASUSWmi wmi = new ASUSWmi(); public static ASUSWmi wmi;
public static AppConfig config = new AppConfig(); public static AppConfig config = new AppConfig();
public static SettingsForm settingsForm = new SettingsForm(); public static SettingsForm settingsForm = new SettingsForm();
@@ -53,6 +52,23 @@ namespace GHelper
// The main entry point for the application // The main entry point for the application
public static void Main() public static void Main()
{ {
try
{
wmi = new ASUSWmi();
}
catch
{
DialogResult dialogResult = MessageBox.Show("Can't connect to ASUS ACPI. Application can't function without it. Try to install Asus System Controll Interface", "Startup Error", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
{
Process.Start(new ProcessStartInfo("https://www.asus.com/support/FAQ/1047338/") { UseShellExecute = true });
}
Application.Exit();
return;
}
trayIcon.MouseClick += TrayIcon_MouseClick; ; trayIcon.MouseClick += TrayIcon_MouseClick; ;
@@ -84,7 +100,7 @@ namespace GHelper
settingsForm.AutoScreen(isPlugged); settingsForm.AutoScreen(isPlugged);
settingsForm.AutoPerformance(isPlugged); settingsForm.AutoPerformance(isPlugged);
settingsForm.SetAnimeMatrix(); settingsForm.SetMatrix(isPlugged);
settingsForm.SetBatteryChargeLimit(config.getConfig("charge_limit")); settingsForm.SetBatteryChargeLimit(config.getConfig("charge_limit"));
} }
@@ -121,7 +137,8 @@ namespace GHelper
try try
{ {
intKey = Convert.ToInt32(command, 16); intKey = Convert.ToInt32(command, 16);
} catch }
catch
{ {
intKey = -1; intKey = -1;
} }

1185
Settings.Designer.cs generated

File diff suppressed because it is too large Load Diff

View File

@@ -18,14 +18,16 @@ namespace GHelper
static int buttonActive = 5; static int buttonActive = 5;
static System.Timers.Timer aTimer = default!; static System.Timers.Timer aTimer = default!;
static System.Timers.Timer matrixTimer = new System.Timers.Timer(); static System.Timers.Timer matrixTimer = default!;
public string perfName = "Balanced"; public string perfName = "Balanced";
Fans fans; Fans fans;
Keyboard keyb; Keyboard keyb;
AnimeMatrixDevice mat = new AnimeMatrixDevice(); static AnimeMatrixDevice mat;
static bool matEnabled = false;
public SettingsForm() public SettingsForm()
{ {
@@ -83,27 +85,48 @@ namespace GHelper
comboMatrix.DropDownStyle = ComboBoxStyle.DropDownList; comboMatrix.DropDownStyle = ComboBoxStyle.DropDownList;
comboMatrixRunning.DropDownStyle = ComboBoxStyle.DropDownList; comboMatrixRunning.DropDownStyle = ComboBoxStyle.DropDownList;
comboMatrix.SelectedValueChanged += ComboMatrix_SelectedValueChanged;
comboMatrixRunning.SelectedValueChanged += ComboMatrixRunning_SelectedValueChanged; comboMatrix.DropDownClosed += ComboMatrix_SelectedValueChanged;
comboMatrixRunning.DropDownClosed += ComboMatrixRunning_SelectedValueChanged;
checkMatrix.CheckedChanged += CheckMatrix_CheckedChanged; ;
buttonMatrix.Click += ButtonMatrix_Click; buttonMatrix.Click += ButtonMatrix_Click;
matrixTimer.Enabled = false;
matrixTimer.Interval = 100;
matrixTimer.Elapsed += MatrixTimer_Elapsed;
SetTimer(); SetTimer();
} }
private void MatrixTimer_Elapsed(object? sender, ElapsedEventArgs e) private void CheckMatrix_CheckedChanged(object? sender, EventArgs e)
{ {
if (sender is null) return;
CheckBox check = (CheckBox)sender;
Program.config.setConfig("matrix_auto", check.Checked ? 1 : 0);
}
private static void StartMatrixTimer()
{
matrixTimer.Enabled = true;
}
private static void StopMatrixTimer()
{
matrixTimer.Enabled = false;
}
private static void MatrixTimer_Elapsed(object? sender, ElapsedEventArgs e)
{
if (mat is null) return;
mat.PresentNextFrame(); mat.PresentNextFrame();
} }
void SetMatrixPicture(string fileName) void SetMatrixPicture(string fileName)
{ {
if (mat is null) return;
StopMatrixTimer();
Image image; Image image;
try try
@@ -136,12 +159,11 @@ namespace GHelper
mat.GenerateFrame(image); mat.GenerateFrame(image);
mat.AddFrame(); mat.AddFrame();
} }
matrixTimer.Enabled = true;
StartMatrixTimer();
} }
else else
{ {
matrixTimer.Enabled = false;
mat.GenerateFrame(image); mat.GenerateFrame(image);
mat.Present(); mat.Present();
} }
@@ -152,18 +174,15 @@ namespace GHelper
private void ButtonMatrix_Click(object? sender, EventArgs e) private void ButtonMatrix_Click(object? sender, EventArgs e)
{ {
string fileName = "";
Thread t = new Thread((ThreadStart)(() => Thread t = new Thread((ThreadStart)(() =>
{ {
OpenFileDialog of = new OpenFileDialog(); OpenFileDialog of = new OpenFileDialog();
of.Filter = "Image Files (*.bmp;*.jpg;*.jpeg,*.png,*.gif)|*.BMP;*.JPG;*.JPEG;*.PNG;*.GIF"; of.Filter = "Image Files (*.bmp;*.jpg;*.jpeg,*.png,*.gif)|*.BMP;*.JPG;*.JPEG;*.PNG;*.GIF";
if (of.ShowDialog() == DialogResult.OK) if (of.ShowDialog() == DialogResult.OK)
{ {
Program.config.setConfig("matrix_picture", of.FileName); fileName = of.FileName;
SetMatrixPicture(of.FileName);
BeginInvoke(delegate
{
comboMatrixRunning.SelectedIndex = 2;
});
} }
return; return;
})); }));
@@ -171,26 +190,37 @@ namespace GHelper
t.SetApartmentState(ApartmentState.STA); t.SetApartmentState(ApartmentState.STA);
t.Start(); t.Start();
t.Join(); t.Join();
Program.config.setConfig("matrix_picture", fileName);
SetMatrixPicture(fileName);
BeginInvoke(delegate
{
comboMatrixRunning.SelectedIndex = 2;
});
} }
private void ComboMatrixRunning_SelectedValueChanged(object? sender, EventArgs e) private void ComboMatrixRunning_SelectedValueChanged(object? sender, EventArgs e)
{ {
Program.config.setConfig("matrix_running", comboMatrixRunning.SelectedIndex); Program.config.setConfig("matrix_running", comboMatrixRunning.SelectedIndex);
SetAnimeMatrix(); SetMatrix();
} }
private void ComboMatrix_SelectedValueChanged(object? sender, EventArgs e) private void ComboMatrix_SelectedValueChanged(object? sender, EventArgs e)
{ {
Program.config.setConfig("matrix_brightness", comboMatrix.SelectedIndex); Program.config.setConfig("matrix_brightness", comboMatrix.SelectedIndex);
SetAnimeMatrix(); SetMatrix();
} }
public void SetAnimeMatrix() public void SetMatrix(PowerLineStatus Plugged = PowerLineStatus.Online)
{ {
if (mat is null) return;
int brightness = Program.config.getConfig("matrix_brightness"); int brightness = Program.config.getConfig("matrix_brightness");
int running = Program.config.getConfig("matrix_running"); int running = Program.config.getConfig("matrix_running");
bool auto = Program.config.getConfig("matrix_auto") == 1;
if (brightness < 0) brightness = 0; if (brightness < 0) brightness = 0;
if (running < 0) running = 0; if (running < 0) running = 0;
@@ -202,9 +232,9 @@ namespace GHelper
BuiltInAnimation.Startup.StaticEmergence BuiltInAnimation.Startup.StaticEmergence
); );
matrixTimer.Enabled = false; StopMatrixTimer();
if (brightness == 0) if (brightness == 0 || (auto && Plugged != PowerLineStatus.Online))
{ {
mat.SetDisplayState(false); mat.SetDisplayState(false);
} }
@@ -336,11 +366,38 @@ namespace GHelper
public void InitMatrix() public void InitMatrix()
{ {
int brightness = Program.config.getConfig("matrix_brightness");
int running = Program.config.getConfig("matrix_running");
comboMatrix.SelectedIndex = (brightness != -1) ? brightness : 0; matrixTimer = new System.Timers.Timer();
comboMatrixRunning.SelectedIndex = (running != -1) ? running : 0; matrixTimer.Enabled = false;
matrixTimer.Interval = 100;
try
{
matEnabled = true;
mat = new AnimeMatrixDevice();
matrixTimer.Elapsed += MatrixTimer_Elapsed;
}
catch
{
matEnabled = false;
Debug.WriteLine("Anime Matrix not detected");
}
if (!matEnabled)
{
panelMatrix.Visible = false;
}
else
{
int brightness = Program.config.getConfig("matrix_brightness");
int running = Program.config.getConfig("matrix_running");
comboMatrix.SelectedIndex = (brightness != -1) ? brightness : 0;
comboMatrixRunning.SelectedIndex = (running != -1) ? running : 0;
checkMatrix.Checked = (Program.config.getConfig("matrix_auto") == 1);
}
} }
@@ -925,37 +982,24 @@ namespace GHelper
private void trackBatteryChange(object? sender, EventArgs e) private void trackBatteryChange(object? sender, EventArgs e)
{ {
if (sender is null) if (sender is null) return;
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) if (sender is null) return;
return; CheckBox check = (CheckBox)sender;
Program.config.setConfig("gpu_auto", check.Checked ? 1 : 0);
CheckBox chk = (CheckBox)sender;
if (chk.Checked)
Program.config.setConfig("gpu_auto", 1);
else
Program.config.setConfig("gpu_auto", 0);
} }
private void checkScreen_CheckedChanged(object? sender, EventArgs e) private void checkScreen_CheckedChanged(object? sender, EventArgs e)
{ {
if (sender is null) return;
if (sender is null) CheckBox check = (CheckBox)sender;
return; Program.config.setConfig("screen_auto", check.Checked ? 1 : 0);
CheckBox chk = (CheckBox)sender;
if (chk.Checked)
Program.config.setConfig("screen_auto", 1);
else
Program.config.setConfig("screen_auto", 0);
} }

View File

@@ -69,19 +69,6 @@
vtSpbWIlX5XHkK/OOiq2RE5+H2ZRgx1v4RpMqBhHG5XElccIHie4EPW9o82fP8yx11SyLuxDm9L38yy8 vtSpbWIlX5XHkK/OOiq2RE5+H2ZRgx1v4RpMqBhHG5XElccIHie4EPW9o82fP8yx11SyLuxDm9L38yy8
gDa8UP+WK+UiLIIXaiZQiduQtYsv9Qme53kn5bWujY3NGqzFtin+5YMgCIIgCP4PVfUNWXMTLz5Z0sYA gDa8UP+WK+UiLIIXaiZQiduQtYsv9Qme53kn5bWujY3NGqzFtin+5YMgCIIgCP4PVfUNWXMTLz5Z0sYA
AAAASUVORK5CYII= AAAASUVORK5CYII=
</value>
</data>
<data name="pictureGPU.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
DAAACwwBP0AiyAAAAZVJREFUaEPtmTtOxDAURYcGGtgAsCJo6PisACE2ALTAvvgVsB0KQBRwT2HJGl3y
EtloHPCRjiKNfJ/sOLGV8aLT6XSa4Fa+ya/MD3kjm2dNvsq888l3OQu408szkJwlfQCr5k8NoAVZEV/k
vhyFK9KKBzLEBVvxWYa4YCuO2ptcsCVDXKim9/JQbst1uSOP5IN07ZcNcaEafspTOcSZpJ3LJ0NcCC8k
d8zB75fS5ZJR5xMMwuWTIS6Em3KILelyeCen8ChdHQxxIeQOD83AlXQ55JmfwrF0dTDEhUrlhZ0CL7ar
gyEuVOpPM/cTG9LVwRAXKnXqDOxKVwdDXAhLViHW+SmcSFcHQ1wIS1YhNqmx8Jn7JF0dDHEhLFmFkPV9
DOfS5ZMhLlRDdthoEHT+13biWrJJsc7zojJzXHnmhx6b3BAXaskQF2rF2X8PzP6LbE+GuOAq5V8J7vyo
zkMeniX/ZgB5u5oWM7ZY3q6mxYwtxsuVt61hlTOJdFbAdQjOFWoOglrXshg6xqnNLI6YOp1OZ1UsFt/W
cWCm8IATjAAAAABJRU5ErkJggg==
</value> </value>
</data> </data>
<data name="picturePerf.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="picturePerf.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -103,6 +90,19 @@
nbLijqltby+mGSx+Qlk5AtuQ6LdryGR4dcrQliFkF7w6h1E6emm9fZEe+QpopVTDtrysQ1BbzfZJ2v+0 nbLijqltby+mGSx+Qlk5AtuQ6LdryGR4dcrQliFkF7w6h1E6emm9fZEe+QpopVTDtrysQ1BbzfZJ2v+0
/N10MWyDnbYUbUVfjr2GO+Eo2o5+I5f5EFWVyj4tKvrQehneibqDZqJ+qDR6EnrhcjZlrVLbOofOVadO /N10MWyDnbYUbUVfjr2GO+Eo2o5+I5f5EFWVyj4tKvrQehneibqDZqJ+qDR6EnrhcjZlrVLbOofOVadO
nTr/fBqNP4sju3bXhjy/AAAAAElFTkSuQmCC nTr/fBqNP4sju3bXhjy/AAAAAElFTkSuQmCC
</value>
</data>
<data name="pictureGPU.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
DAAACwwBP0AiyAAAAZVJREFUaEPtmTtOxDAURYcGGtgAsCJo6PisACE2ALTAvvgVsB0KQBRwT2HJGl3y
EtloHPCRjiKNfJ/sOLGV8aLT6XSa4Fa+ya/MD3kjm2dNvsq888l3OQu408szkJwlfQCr5k8NoAVZEV/k
vhyFK9KKBzLEBVvxWYa4YCuO2ptcsCVDXKim9/JQbst1uSOP5IN07ZcNcaEafspTOcSZpJ3LJ0NcCC8k
d8zB75fS5ZJR5xMMwuWTIS6Em3KILelyeCen8ChdHQxxIeQOD83AlXQ55JmfwrF0dTDEhUrlhZ0CL7ar
gyEuVOpPM/cTG9LVwRAXKnXqDOxKVwdDXAhLViHW+SmcSFcHQ1wIS1YhNqmx8Jn7JF0dDHEhLFmFkPV9
DOfS5ZMhLlRDdthoEHT+13biWrJJsc7zojJzXHnmhx6b3BAXaskQF2rF2X8PzP6LbE+GuOAq5V8J7vyo
zkMeniX/ZgB5u5oWM7ZY3q6mxYwtxsuVt61hlTOJdFbAdQjOFWoOglrXshg6xqnNLI6YOp1OZ1UsFt/W
cWCm8IATjAAAAABJRU5ErkJggg==
</value> </value>
</data> </data>
<data name="pictureScreen.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="pictureScreen.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">