Compare commits

...

11 Commits
v0.62 ... v0.63

Author SHA1 Message Date
Serge
8590d0301a Merge pull request #391 from seerge/revert-385-windows-power-plan-changes-optional
Revert "Adjustment of Windows Power Overlay is now optional"
2023-05-16 11:39:41 +02:00
Serge
8804d19567 Revert "Adjustment of Windows Power Overlay is now optional" 2023-05-16 11:38:17 +02:00
Serge
57ce0631a3 Merge pull request #385 from IceStormNG/windows-power-plan-changes-optional
Adjustment of Windows Power Overlay is now optional
2023-05-16 11:30:41 +02:00
Carsten Braun
b796f9f9d4 Moved checkbox to 2023-05-16 10:41:02 +02:00
Serge
f39563fcdf Added touchpad toggle for tablet mode on x13/x16 2023-05-15 23:59:21 +02:00
Serge
853d0c231d Auto update 2023-05-15 22:23:16 +02:00
Serge
df3324d641 Auto update 2023-05-15 22:21:41 +02:00
Serge
75c90ee155 Merge branch 'main' of https://github.com/seerge/g-helper 2023-05-15 22:11:29 +02:00
Serge
4015e0a7f7 Added auto-update checker 2023-05-15 22:11:27 +02:00
Carsten Braun
2a82e41894 Adjustment of Windows Power Overlay is now optional 2023-05-15 13:23:20 +02:00
Serge
a5541dfe10 Update README.md 2023-05-14 19:52:02 +02:00
11 changed files with 143 additions and 40 deletions

View File

@@ -15,6 +15,7 @@ public class ASUSWmi
public const uint UniversalControl = 0x00100021; public const uint UniversalControl = 0x00100021;
public const int KB_Light_Up = 0xc4; public const int KB_Light_Up = 0xc4;
public const int KB_Light_Down = 0xc5; public const int KB_Light_Down = 0xc5;
public const int Touchpad_Toggle = 0x6B;
public const int ChargerMode = 0x0012006C; public const int ChargerMode = 0x0012006C;
@@ -59,6 +60,13 @@ public class ASUSWmi
public const int TUF_KB = 0x00100056; public const int TUF_KB = 0x00100056;
public const int TUF_KB_STATE = 0x00100057; public const int TUF_KB_STATE = 0x00100057;
public const int TabletState = 0x00060077;
public const int Tablet_Notebook = 0;
public const int Tablet_Tablet = 1;
public const int Tablet_Tent = 2;
public const int Tablet_Rotated = 3;
public const int PerformanceBalanced = 0; public const int PerformanceBalanced = 0;
public const int PerformanceTurbo = 1; public const int PerformanceTurbo = 1;
public const int PerformanceSilent = 2; public const int PerformanceSilent = 2;

View File

@@ -2,6 +2,7 @@
using Starlight.Communication; using Starlight.Communication;
using System.Drawing.Drawing2D; using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Globalization; using System.Globalization;
using System.Management; using System.Management;
using System.Text; using System.Text;
@@ -343,11 +344,17 @@ namespace Starlight.AnimeMatrix
public void PresentClock() public void PresentClock()
{ {
int second = DateTime.Now.Second; int second = DateTime.Now.Second;
string time;
if (CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern.Contains("H")) if (CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern.Contains("H"))
PresentTextDiagonal(DateTime.Now.ToString(" H" + ((second % 2 == 0) ? ":" : " ") + "mm")); time = DateTime.Now.ToString("H" + ((second % 2 == 0) ? ":" : " ") + "mm");
else else
PresentTextDiagonal(DateTime.Now.ToString("h" + ((second % 2 == 0) ? ":" : " ") + "mmtt")); time = DateTime.Now.ToString("h" + ((second % 2 == 0) ? ":" : " ") + "mmtt");
if (_model == AnimeType.GA401)
PresentText(time);
else
PresentTextDiagonal(time);
} }
public void PresentText(string text1, string text2 = "") public void PresentText(string text1, string text2 = "")
@@ -359,14 +366,14 @@ namespace Starlight.AnimeMatrix
g.CompositingQuality = CompositingQuality.HighQuality; g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.AntiAlias; g.SmoothingMode = SmoothingMode.AntiAlias;
using (Font font = new Font("Arial", 24F, GraphicsUnit.Pixel)) using (Font font = new Font("Consolas", 24F, FontStyle.Regular, GraphicsUnit.Pixel))
{ {
SizeF textSize = g.MeasureString(text1, font); SizeF textSize = g.MeasureString(text1, font);
g.DrawString(text1, font, Brushes.White, (MaxColumns * 3 - textSize.Width) + 3, -3); g.DrawString(text1, font, Brushes.White, (MaxColumns * 3 - textSize.Width) + 3, -4);
} }
if (text2.Length > 0) if (text2.Length > 0)
using (Font font = new Font("Arial", 18F, GraphicsUnit.Pixel)) using (Font font = new Font("Consolas", 18F, GraphicsUnit.Pixel))
{ {
SizeF textSize = g.MeasureString(text2, font); SizeF textSize = g.MeasureString(text2, font);
g.DrawString(text2, font, Brushes.White, (MaxColumns * 3 - textSize.Width) + 1, 25); g.DrawString(text2, font, Brushes.White, (MaxColumns * 3 - textSize.Width) + 1, 25);
@@ -437,6 +444,24 @@ namespace Starlight.AnimeMatrix
Clear(); Clear();
InstalledFontCollection installedFontCollection = new InstalledFontCollection();
string familyName;
string familyList = "";
FontFamily[] fontFamilies;
// Get the array of FontFamily objects.
fontFamilies = installedFontCollection.Families;
int count = fontFamilies.Length;
for (int j = 0; j < count; ++j)
{
familyName = fontFamilies[j].Name;
familyList = familyList + familyName;
familyList = familyList + ", ";
}
int maxX = (int)Math.Sqrt(MaxRows * MaxRows + MaxColumns * MaxColumns); int maxX = (int)Math.Sqrt(MaxRows * MaxRows + MaxColumns * MaxColumns);
using (Bitmap bmp = new Bitmap(maxX, MaxRows)) using (Bitmap bmp = new Bitmap(maxX, MaxRows))
@@ -446,10 +471,10 @@ namespace Starlight.AnimeMatrix
g.CompositingQuality = CompositingQuality.HighQuality; g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.AntiAlias; g.SmoothingMode = SmoothingMode.AntiAlias;
using (Font font = new Font("Calibri", 13F, GraphicsUnit.Pixel)) using (Font font = new Font("Consolas", 13F, FontStyle.Regular, GraphicsUnit.Pixel))
{ {
SizeF textSize = g.MeasureString(text, font); SizeF textSize = g.MeasureString(text, font);
g.DrawString(text, font, Brushes.White, 4, 0); g.DrawString(text, font, Brushes.White, 4, 1);
} }
} }

View File

@@ -16,7 +16,7 @@
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly> <ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks> <AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<AssemblyVersion>0.62</AssemblyVersion> <AssemblyVersion>0.63</AssemblyVersion>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@@ -11,7 +11,7 @@ public class AmdGpuControl : IGpuControl {
public bool IsNvidia => false; public bool IsNvidia => false;
public string FullName => _internalDiscreteAdapter!.AdapterName;
public AmdGpuControl() { public AmdGpuControl() {
if (!Adl2.Load()) if (!Adl2.Load())
return; return;

View File

@@ -3,6 +3,7 @@
public interface IGpuControl : IDisposable { public interface IGpuControl : IDisposable {
bool IsNvidia { get; } bool IsNvidia { get; }
bool IsValid { get; } bool IsValid { get; }
public string FullName { get; }
int? GetCurrentTemperature(); int? GetCurrentTemperature();
int? GetGpuUse(); int? GetGpuUse();
} }

View File

@@ -51,6 +51,7 @@ public static class HardwareControl
try try
{ {
int? gpuUse = GpuControl?.GetGpuUse(); int? gpuUse = GpuControl?.GetGpuUse();
Logger.WriteLine("GPU usage: " + GpuControl?.FullName + " " + gpuUse + "%");
if (gpuUse is not null) return (int)gpuUse; if (gpuUse is not null) return (int)gpuUse;
} }
catch (Exception ex) catch (Exception ex)
@@ -113,16 +114,12 @@ public static class HardwareControl
} }
} }
public static bool IsUsedGPU(int threshold = 20) public static bool IsUsedGPU(int threshold = 10)
{ {
int use = GetGpuUse(); if (GetGpuUse() > threshold)
Logger.WriteLine("GPU usage: " + use);
if (use > threshold)
{ {
Thread.Sleep(1000); Thread.Sleep(1000);
use = GetGpuUse(); return (GetGpuUse() > threshold);
Logger.WriteLine("GPU usage: " + use);
return (use > threshold);
} }
return false; return false;
} }
@@ -136,7 +133,7 @@ public static class HardwareControl
return null; return null;
} }
public static void RecreateGpuControlWithDelay(int delay = 3) public static void RecreateGpuControlWithDelay(int delay = 5)
{ {
// Re-enabling the discrete GPU takes a bit of time, // Re-enabling the discrete GPU takes a bit of time,
// so a simple workaround is to refresh again after that happens // so a simple workaround is to refresh again after that happens

View File

@@ -1,4 +1,3 @@
using GHelper.Gpu;
using Microsoft.Win32; using Microsoft.Win32;
using System.Diagnostics; using System.Diagnostics;
using System.Globalization; using System.Globalization;
@@ -64,7 +63,7 @@ namespace GHelper
} }
Logger.WriteLine("------------"); Logger.WriteLine("------------");
Logger.WriteLine("App launched: " + config.GetModel() + " :" + Assembly.GetExecutingAssembly().GetName().Version.ToString() + (IsUserAdministrator()?"A":"")); Logger.WriteLine("App launched: " + config.GetModel() + " :" + Assembly.GetExecutingAssembly().GetName().Version.ToString() + (IsUserAdministrator() ? "A" : ""));
Application.EnableVisualStyles(); Application.EnableVisualStyles();
@@ -253,6 +252,23 @@ namespace GHelper
} }
} }
static void TabletMode()
{
bool touchpadState, tabletState;
using (var key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad\Status", false))
{
touchpadState = (key?.GetValue("Enabled")?.ToString() == "1");
}
tabletState = wmi.DeviceGet(ASUSWmi.TabletState) > 0;
Logger.WriteLine("Tablet: " + tabletState + " Touchpad: " + touchpadState);
if ((tabletState && touchpadState) || (!tabletState && !touchpadState))
wmi.DeviceSet(ASUSWmi.UniversalControl, ASUSWmi.Touchpad_Toggle, "Touchpad");
}
static void WatcherEventArrived(object sender, EventArrivedEventArgs e) static void WatcherEventArrived(object sender, EventArrivedEventArgs e)
{ {
@@ -278,6 +294,10 @@ namespace GHelper
case 179: // FN+F4 case 179: // FN+F4
KeyProcess("fnf4"); KeyProcess("fnf4");
return; return;
case 189: // Tablet mode
TabletMode();
return;
} }

View File

@@ -267,24 +267,25 @@ namespace GHelper
labelModel.Anchor = AnchorStyles.Top | AnchorStyles.Right; labelModel.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelModel.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point); labelModel.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
labelModel.ForeColor = SystemColors.ControlDark; labelModel.ForeColor = SystemColors.ControlDark;
labelModel.Location = new Point(291, 119); labelModel.Location = new Point(380, 119);
labelModel.Margin = new Padding(8, 0, 8, 0); labelModel.Margin = new Padding(8, 0, 8, 0);
labelModel.Name = "labelModel"; labelModel.Name = "labelModel";
labelModel.Size = new Size(492, 32); labelModel.Size = new Size(400, 32);
labelModel.TabIndex = 38; labelModel.TabIndex = 38;
labelModel.TextAlign = ContentAlignment.TopRight; labelModel.TextAlign = ContentAlignment.TopRight;
// //
// labelVersion // labelVersion
// //
labelVersion.AutoSize = true; labelVersion.AutoSize = false;
labelVersion.Font = new Font("Segoe UI", 9F, FontStyle.Underline, GraphicsUnit.Point); labelVersion.Font = new Font("Segoe UI", 9F, FontStyle.Underline, GraphicsUnit.Point);
labelVersion.ForeColor = SystemColors.ControlDark; labelVersion.ForeColor = SystemColors.ControlDark;
labelVersion.Location = new Point(25, 119); labelVersion.Location = new Point(25, 119);
labelVersion.Margin = new Padding(8, 0, 8, 0); labelVersion.Margin = new Padding(8, 0, 8, 0);
labelVersion.Name = "labelVersion"; labelVersion.Name = "labelVersion";
labelVersion.Size = new Size(44, 32); labelVersion.Size = new Size(300, 32);
labelVersion.TabIndex = 37; labelVersion.TabIndex = 37;
labelVersion.Text = "v.0"; labelVersion.Text = "v.0";
labelVersion.Cursor = Cursors.Hand;
// //
// labelBattery // labelBattery
// //

View File

@@ -3,6 +3,7 @@ using GHelper.Gpu;
using Starlight.AnimeMatrix; using Starlight.AnimeMatrix;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.Net;
using System.Reflection; using System.Reflection;
using System.Text.Json; using System.Text.Json;
using System.Timers; using System.Timers;
@@ -158,7 +159,7 @@ namespace GHelper
contextMenuStrip.Items.Clear(); contextMenuStrip.Items.Clear();
Padding padding = new Padding(15,5,5,5); Padding padding = new Padding(15, 5, 5, 5);
/* /*
TableLayoutPanel[] tables = { tablePerf, tableGPU }; TableLayoutPanel[] tables = { tablePerf, tableGPU };
@@ -294,10 +295,20 @@ namespace GHelper
var gitVersion = new Version(tag); var gitVersion = new Version(tag);
var appVersion = new Version(Assembly.GetExecutingAssembly().GetName().Version.ToString()); var appVersion = new Version(Assembly.GetExecutingAssembly().GetName().Version.ToString());
//appVersion = new Version("0.50.0.0");
if (gitVersion.CompareTo(appVersion) > 0) if (gitVersion.CompareTo(appVersion) > 0)
{ {
SetVersionLabel(Properties.Strings.DownloadUpdate + ": " + tag, url); SetVersionLabel(Properties.Strings.DownloadUpdate + ": " + tag, url);
if (Program.config.getConfigString("skip_version") != tag)
{
DialogResult dialogResult = MessageBox.Show(Properties.Strings.DownloadUpdate + ": G-Helper " + tag + "?", "Update", MessageBoxButtons.YesNo);
if (dialogResult == DialogResult.Yes)
AutoUpdate(url);
else
Program.config.setConfig("skip_version", tag);
}
} }
else else
{ {
@@ -314,6 +325,57 @@ namespace GHelper
} }
void SetVersionLabel(string label, string url = null)
{
BeginInvoke(delegate
{
labelVersion.Text = label;
if (url is not null)
{
this.versionUrl = url;
labelVersion.ForeColor = Color.Red;
}
});
}
public async void AutoUpdate(string requestUri)
{
Uri uri = new Uri(requestUri);
string zipName = Path.GetFileName(uri.LocalPath);
string exeLocation = Application.ExecutablePath;
string exeDir = Path.GetDirectoryName(exeLocation);
string zipLocation = exeDir + "\\" + zipName;
using (WebClient client = new WebClient())
{
client.DownloadFile(uri, zipLocation);
}
var cmd = new Process();
cmd.StartInfo.UseShellExecute = false;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.FileName = "powershell";
cmd.StartInfo.Arguments = $"Start-Sleep -Seconds 1; Expand-Archive {zipLocation} -DestinationPath {exeDir} -Force; {exeLocation}";
cmd.Start();
Debug.WriteLine(requestUri);
Debug.WriteLine(zipLocation);
Application.Exit();
return;
}
private void LabelVersion_Click(object? sender, EventArgs e)
{
Process.Start(new ProcessStartInfo(versionUrl) { UseShellExecute = true });
}
private static void TrayIcon_MouseMove(object? sender, MouseEventArgs e) private static void TrayIcon_MouseMove(object? sender, MouseEventArgs e)
{ {
Program.settingsForm.RefreshSensors(); Program.settingsForm.RefreshSensors();
@@ -419,22 +481,8 @@ namespace GHelper
} }
void SetVersionLabel(string label, string url = null)
{
labelVersion.Text = label;
if (url is not null)
{
this.versionUrl = url;
labelVersion.ForeColor = Color.Red;
}
}
private void LabelVersion_Click(object? sender, EventArgs e)
{
Process.Start(new ProcessStartInfo(versionUrl) { UseShellExecute = true });
}
private void CheckStartup_CheckedChanged(object? sender, EventArgs e) private void CheckStartup_CheckedChanged(object? sender, EventArgs e)
{ {
@@ -1695,7 +1743,8 @@ namespace GHelper
try try
{ {
OptimizationService.SetChargeLimit(limit); OptimizationService.SetChargeLimit(limit);
} catch (Exception ex) }
catch (Exception ex)
{ {
Debug.WriteLine(ex); Debug.WriteLine(ex);
} }

View File

@@ -149,6 +149,8 @@ It's a lightweight Armoury Crate alternative for Asus laptops. A small utility t
- It's not recommended to use an app in combination with Armoury Crate services, because they adjust the same settings. You can [uninstall it using it's own uninstall tool](https://dlcdnets.asus.com/pub/ASUS/mb/14Utilities/Armoury_Crate_Uninstall_Tool.zip?model=armoury%20crate). Just in case, you can always install it back later. - It's not recommended to use an app in combination with Armoury Crate services, because they adjust the same settings. You can [uninstall it using it's own uninstall tool](https://dlcdnets.asus.com/pub/ASUS/mb/14Utilities/Armoury_Crate_Uninstall_Tool.zip?model=armoury%20crate). Just in case, you can always install it back later.
- Also, it's not recommended to have "ASUS Smart Display Control" app running, as it will try to change refresh rates and fight with g-helper for the same function. You can safely uninstall it.
------------------------------- -------------------------------
Designed and developed for Asus Zephyrus G14 2022 (with AMD Radeon iGPU and dGPU). But could and should potentially work for G14 of 2021 and 2020, G15, X FLOW, and other ROG models for relevant and supported features. Designed and developed for Asus Zephyrus G14 2022 (with AMD Radeon iGPU and dGPU). But could and should potentially work for G14 of 2021 and 2020, G15, X FLOW, and other ROG models for relevant and supported features.