Compare commits

..

44 Commits
v0.62 ... v0.64

Author SHA1 Message Date
Serge
d1cceda2ab UI Tweaks 2023-05-19 10:40:16 +02:00
Serge
381b4dd3e8 Merge pull request #409 from TomBonnot/main
Adding French and Português Version
2023-05-19 00:16:11 +02:00
Tom Bonnot
a99dcbf445 Last changes on portuguese-brazilian version + deleting .idea files 2023-05-18 18:12:44 -04:00
Tom Bonnot
4751383a3a Saving progress on pt-br translation 2023-05-18 15:50:32 -04:00
Serge
06320afcb3 Audio visualizer 2023-05-18 18:21:09 +02:00
Serge
0eb6209eda Matrix audio visualizer 2023-05-18 17:42:19 +02:00
Tom Bonnot
a342cab9a6 Final version for French translation 2023-05-18 11:40:02 -04:00
Tom Bonnot
12c6482f61 Adding pt-br and completion of fr version (might need some corrections) 2023-05-18 10:30:05 -04:00
Tom Bonnot
20933bfd8d First commit - French version 2023-05-18 09:51:30 -04:00
Serge
c66c8e9030 Custom keybinding for mode toggle 2023-05-17 20:33:41 +02:00
Serge
14b677514b Update README.md 2023-05-17 17:17:13 +02:00
Serge
ce266ffe07 Merge pull request #402 from IceStormNG/german-translation
German translation
2023-05-17 16:51:04 +02:00
Serge
f29410fa2a Merge branch 'main' of https://github.com/seerge/g-helper 2023-05-17 14:52:09 +02:00
Serge
7117b58746 ACPI events listener 2023-05-17 14:52:06 +02:00
Carsten Braun
0456fa013c Improbed a few translations and fixed typos. 2023-05-17 13:11:11 +02:00
Carsten Braun
6a4aa4e138 Localize fan speed labels in the main window 2023-05-17 10:47:41 +02:00
IceStormNG
d75067b40c Merge branch 'seerge:main' into german-translation 2023-05-17 10:39:02 +02:00
Carsten Braun
de45038911 Translated the App to German. Added a few additional resources for localization 2023-05-16 16:20:00 +02:00
Serge
e23c727e79 Update README.md 2023-05-16 15:44:30 +02:00
Serge
2f2c534278 Merge pull request #394 from lswlc33/main
Update Strings.zh-CN.resx
2023-05-16 15:21:34 +02:00
Serge
bdbec79aba UI tweaks 2023-05-16 15:19:53 +02:00
雪中明月
e3d0a04fa4 Update Strings.zh-CN.resx 2023-05-16 21:12:58 +08:00
Serge
4dd7d41cf4 Merge pull request #392 from IceStormNG/windows-power-plan-changes-optional
Windows power plan changes optional
2023-05-16 14:53:58 +02:00
Carsten Braun
8370217cef This is not a perf config but a regular config value. 2023-05-16 13:34:40 +02:00
Carsten Braun
63c1829edd We can reference the checkbox directly 2023-05-16 13:34:26 +02:00
Carsten Braun
69e5a0448e Accomodate for non-exitent settings value 2023-05-16 13:30:08 +02:00
Carsten Braun
b74b9ae257 Fix nullability 2023-05-16 13:29:48 +02:00
Carsten Braun
71e007d8ad Fixed UI that VS Forms Designer broke 2023-05-16 13:29:31 +02:00
Carsten Braun
6896166c3c Fixed French translation value 2023-05-16 12:36:26 +02:00
Carsten Braun
fd89d9c13a Changed string to "Power Mode" instead of "power plan" 2023-05-16 12:33:15 +02:00
Carsten Braun
8bec153da8 Fixed localization key for french 2023-05-16 12:30:57 +02:00
Carsten Braun
7d968f5f08 Do not set default value. 2023-05-16 12:24:06 +02:00
Carsten Braun
ac5fc3f96e Revert "Revert "Adjustment of Windows Power Overlay is now optional""
This reverts commit 8804d19567.
2023-05-16 12:21:28 +02:00
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
27 changed files with 1356 additions and 391 deletions

View File

@@ -1,4 +1,5 @@
using System.Globalization;
using System.Diagnostics;
using System.Globalization;
using System.IO.Pipes;
using System.Management;
using System.Runtime.InteropServices;
@@ -15,6 +16,7 @@ public class ASUSWmi
public const uint UniversalControl = 0x00100021;
public const int KB_Light_Up = 0xc4;
public const int KB_Light_Down = 0xc5;
public const int Touchpad_Toggle = 0x6B;
public const int ChargerMode = 0x0012006C;
@@ -59,6 +61,13 @@ public class ASUSWmi
public const int TUF_KB = 0x00100056;
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 PerformanceTurbo = 1;
public const int PerformanceSilent = 2;
@@ -118,6 +127,42 @@ public class ASUSWmi
private IntPtr handle;
// Event handling attempt
[DllImport("kernel32.dll", SetLastError = true)]
private static extern IntPtr CreateEvent(IntPtr lpEventAttributes, bool bManualReset, bool bInitialState, string lpName);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool WaitForSingleObject(IntPtr hHandle, int dwMilliseconds);
private IntPtr eventHandle;
// still works only with asus optimization service on , if someone knows how to get ACPI events from asus without that - let me know
public void RunListener()
{
eventHandle = CreateEvent(IntPtr.Zero, false, false, "ATK Event");
byte[] outBuffer = new byte[16];
byte[] data = new byte[8];
bool result;
data[0] = BitConverter.GetBytes(eventHandle.ToInt32())[0];
data[1] = BitConverter.GetBytes(eventHandle.ToInt32())[1];
result = Control (0x222400, data, outBuffer);
Debug.WriteLine(result + ":" + BitConverter.ToString(data) + "|" + BitConverter.ToString(outBuffer));
while (true)
{
WaitForSingleObject(eventHandle, Timeout.Infinite);
Control(0x222408, new byte[0], outBuffer);
int code = BitConverter.ToInt32(outBuffer);
Logger.WriteLine("Code: " + code);
}
}
public ASUSWmi()
{
handle = CreateFile(
@@ -129,16 +174,18 @@ public class ASUSWmi
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)
public bool Control(uint dwIoControlCode, byte[] lpInBuffer, byte[] lpOutBuffer)
{
uint lpBytesReturned = 0;
bool result = DeviceIoControl(
return DeviceIoControl(
handle,
dwIoControlCode,
lpInBuffer,

View File

@@ -0,0 +1,299 @@
using NAudio.CoreAudioApi;
using NAudio.Wave;
using Starlight.AnimeMatrix;
using System.Diagnostics;
using System.Drawing.Imaging;
using System.Timers;
namespace GHelper.AnimeMatrix
{
public class AniMatrix
{
static System.Timers.Timer matrixTimer = default!;
static AnimeMatrixDevice mat;
static double[] AudioValues;
static WasapiCapture AudioDevice;
public static bool IsValid => mat != null;
private static long lastPresent;
private static List<double> maxes = new List<double>();
public AniMatrix()
{
try
{
mat = new AnimeMatrixDevice();
matrixTimer = new System.Timers.Timer(100);
matrixTimer.Elapsed += MatrixTimer_Elapsed;
}
catch
{
mat.Dispose();
mat = null;
}
}
public void SetMatrix()
{
if (!IsValid) return;
int brightness = Program.config.getConfig("matrix_brightness");
int running = Program.config.getConfig("matrix_running");
bool auto = Program.config.getConfig("matrix_auto") == 1;
if (brightness < 0) brightness = 0;
if (running < 0) running = 0;
BuiltInAnimation animation = new BuiltInAnimation(
(BuiltInAnimation.Running)running,
BuiltInAnimation.Sleeping.Starfield,
BuiltInAnimation.Shutdown.SeeYa,
BuiltInAnimation.Startup.StaticEmergence
);
StopMatrixTimer();
StopMatrixAudio();
mat.SetProvider();
if (brightness == 0 || (auto && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online))
{
mat.SetDisplayState(false);
Logger.WriteLine("Matrix Off");
}
else
{
mat.SetDisplayState(true);
mat.SetBrightness((BrightnessMode)brightness);
switch (running)
{
case 2:
SetMatrixPicture(Program.config.getConfigString("matrix_picture"));
break;
case 3:
StartMatrixTimer(1000);
Logger.WriteLine("Matrix Clock");
break;
case 4:
SetMatrixAudio();
break;
default:
mat.SetBuiltInAnimation(true, animation);
Logger.WriteLine("Matrix builtin " + animation.AsByte);
break;
}
//mat.SetBrightness((BrightnessMode)brightness);
}
}
private static void StartMatrixTimer(int interval = 100)
{
matrixTimer.Interval = interval;
matrixTimer.Enabled = true;
}
private static void StopMatrixTimer()
{
matrixTimer.Enabled = false;
}
private static void MatrixTimer_Elapsed(object? sender, ElapsedEventArgs e)
{
if (!IsValid) return;
switch (Program.config.getConfig("matrix_running"))
{
case 2:
mat.PresentNextFrame();
break;
case 3:
mat.PresentClock();
break;
}
}
void StopMatrixAudio()
{
if (AudioDevice is not null)
{
try
{
AudioDevice.StopRecording();
AudioDevice.Dispose();
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
}
}
}
void SetMatrixAudio()
{
if (!IsValid) return;
mat.SetBuiltInAnimation(false);
StopMatrixTimer();
StopMatrixAudio();
try
{
using (var enumerator = new MMDeviceEnumerator())
using (MMDevice device = enumerator.GetDefaultAudioEndpoint(DataFlow.Render, Role.Console))
{
AudioDevice = new WasapiLoopbackCapture(device);
WaveFormat fmt = AudioDevice.WaveFormat;
AudioValues = new double[fmt.SampleRate / 1000];
AudioDevice.DataAvailable += WaveIn_DataAvailable;
AudioDevice.StartRecording();
Logger.WriteLine("Matrix Audio");
}
}
catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
}
}
private void WaveIn_DataAvailable(object? sender, WaveInEventArgs e)
{
int bytesPerSamplePerChannel = AudioDevice.WaveFormat.BitsPerSample / 8;
int bytesPerSample = bytesPerSamplePerChannel * AudioDevice.WaveFormat.Channels;
int bufferSampleCount = e.Buffer.Length / bytesPerSample;
if (bufferSampleCount >= AudioValues.Length)
{
bufferSampleCount = AudioValues.Length;
}
if (bytesPerSamplePerChannel == 2 && AudioDevice.WaveFormat.Encoding == WaveFormatEncoding.Pcm)
{
for (int i = 0; i < bufferSampleCount; i++)
AudioValues[i] = BitConverter.ToInt16(e.Buffer, i * bytesPerSample);
}
else if (bytesPerSamplePerChannel == 4 && AudioDevice.WaveFormat.Encoding == WaveFormatEncoding.Pcm)
{
for (int i = 0; i < bufferSampleCount; i++)
AudioValues[i] = BitConverter.ToInt32(e.Buffer, i * bytesPerSample);
}
else if (bytesPerSamplePerChannel == 4 && AudioDevice.WaveFormat.Encoding == WaveFormatEncoding.IeeeFloat)
{
for (int i = 0; i < bufferSampleCount; i++)
AudioValues[i] = BitConverter.ToSingle(e.Buffer, i * bytesPerSample);
}
double[] paddedAudio = FftSharp.Pad.ZeroPad(AudioValues);
double[] fftMag = FftSharp.Transform.FFTmagnitude(paddedAudio);
PresentAudio(fftMag);
}
private void DrawBar(int pos, double h)
{
int dx = pos * 2;
int dy = 20;
byte color;
for (int y = 0; y < h - (h % 2); y++)
for (int x = 0; x < 2 - (y % 2); x++)
{
//color = (byte)(Math.Min(1,(h - y - 2)*2) * 255);
mat.SetLedPlanar(x + dx, dy + y, (byte)(h * 255 / 30));
mat.SetLedPlanar(x + dx, dy - y, 255);
}
}
void PresentAudio(double[] audio)
{
if (Math.Abs(DateTimeOffset.Now.ToUnixTimeMilliseconds() - lastPresent) < 70) return;
lastPresent = DateTimeOffset.Now.ToUnixTimeMilliseconds();
mat.Clear();
int size = 20;
double[] bars = new double[size];
double max = 2, maxAverage;
for (int i = 0; i < size; i++)
{
bars[i] = Math.Sqrt(audio[i] * 10000);
if (bars[i] > max) max = bars[i];
}
maxes.Add(max);
if (maxes.Count > 20) maxes.RemoveAt(0);
maxAverage = maxes.Average();
for (int i = 0; i < size; i++) DrawBar(20 - i, bars[i]*20/maxAverage);
mat.Present();
}
public void SetMatrixPicture(string fileName)
{
if (!IsValid) return;
StopMatrixTimer();
Image image;
try
{
using (var fs = new FileStream(fileName, FileMode.Open))
{
var ms = new MemoryStream();
fs.CopyTo(ms);
ms.Position = 0;
image = Image.FromStream(ms);
}
}
catch
{
Debug.WriteLine("Error loading picture");
return;
}
mat.SetBuiltInAnimation(false);
mat.ClearFrames();
FrameDimension dimension = new FrameDimension(image.FrameDimensionsList[0]);
int frameCount = image.GetFrameCount(dimension);
if (frameCount > 1)
{
for (int i = 0; i < frameCount; i++)
{
image.SelectActiveFrame(dimension, i);
mat.GenerateFrame(image);
mat.AddFrame();
}
StartMatrixTimer();
Logger.WriteLine("Matrix GIF " + fileName);
}
else
{
mat.GenerateFrame(image);
mat.Present();
Logger.WriteLine("Matrix " + fileName);
}
}
}
}

View File

@@ -2,6 +2,7 @@
using Starlight.Communication;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Globalization;
using System.Management;
using System.Text;
@@ -97,6 +98,7 @@ namespace Starlight.AnimeMatrix
private static AnimeType _model = AnimeType.GA402;
public AnimeMatrixDevice()
: base(0x0B05, 0x193B, 640)
{
@@ -343,13 +345,21 @@ namespace Starlight.AnimeMatrix
public void PresentClock()
{
int second = DateTime.Now.Second;
string time;
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
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 = "")
{
using (Bitmap bmp = new Bitmap(MaxColumns * 3, MaxRows))
@@ -359,14 +369,14 @@ namespace Starlight.AnimeMatrix
g.CompositingQuality = CompositingQuality.HighQuality;
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);
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)
using (Font font = new Font("Arial", 18F, GraphicsUnit.Pixel))
using (Font font = new Font("Consolas", 18F, GraphicsUnit.Pixel))
{
SizeF textSize = g.MeasureString(text2, font);
g.DrawString(text2, font, Brushes.White, (MaxColumns * 3 - textSize.Width) + 1, 25);
@@ -437,6 +447,24 @@ namespace Starlight.AnimeMatrix
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);
using (Bitmap bmp = new Bitmap(maxX, MaxRows))
@@ -446,10 +474,10 @@ namespace Starlight.AnimeMatrix
g.CompositingQuality = CompositingQuality.HighQuality;
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);
g.DrawString(text, font, Brushes.White, 4, 0);
g.DrawString(text, font, Brushes.White, 4, 1);
}
}

View File

@@ -166,7 +166,7 @@ namespace GHelper
{
HidDevice[] HidDeviceList = HidDevices.Enumerate(0x0b05, deviceIds).ToArray();
foreach (HidDevice device in HidDeviceList)
if (device.IsConnected
if (device.IsConnected
&& device.Capabilities.FeatureReportByteLength > 0
&& device.Capabilities.InputReportByteLength >= minInput) //
yield return device;

41
app/Extra.Designer.cs generated
View File

@@ -74,6 +74,7 @@ namespace GHelper
checkSleepLid = new CheckBox();
checkShutdownLid = new CheckBox();
groupOther = new GroupBox();
checkAutoApplyWindowsPowerMode = new CheckBox();
checkKeyboardAuto = new CheckBox();
checkUSBC = new CheckBox();
checkNoOverdrive = new CheckBox();
@@ -233,7 +234,7 @@ namespace GHelper
//
// numericBacklightTime
//
numericBacklightTime.Location = new Point(477, 131);
numericBacklightTime.Location = new Point(655, 133);
numericBacklightTime.Maximum = new decimal(new int[] { 3600, 0, 0, 0 });
numericBacklightTime.Name = "numericBacklightTime";
numericBacklightTime.Size = new Size(240, 39);
@@ -241,37 +242,35 @@ namespace GHelper
//
// labelBacklightTimeout
//
labelBacklightTimeout.Location = new Point(13, 133);
labelBacklightTimeout.Location = new Point(13, 135);
labelBacklightTimeout.Name = "labelBacklightTimeout";
labelBacklightTimeout.Size = new Size(489, 45);
labelBacklightTimeout.Size = new Size(636, 45);
labelBacklightTimeout.TabIndex = 46;
labelBacklightTimeout.Text = "Seconds to turn off backlight on battery";
//
// labelBrightness
//
labelBrightness.Location = new Point(13, 76);
labelBrightness.Location = new Point(13, 75);
labelBrightness.Name = "labelBrightness";
labelBrightness.Size = new Size(197, 49);
labelBrightness.Size = new Size(336, 43);
labelBrightness.TabIndex = 41;
labelBrightness.Text = "Brightness";
//
// trackBrightness
//
trackBrightness.LargeChange = 1;
trackBrightness.Location = new Point(216, 60);
trackBrightness.Location = new Point(355, 60);
trackBrightness.Maximum = 3;
trackBrightness.Name = "trackBrightness";
trackBrightness.Size = new Size(600, 90);
trackBrightness.Size = new Size(558, 90);
trackBrightness.TabIndex = 42;
trackBrightness.TickStyle = TickStyle.TopLeft;
//
// labelSpeed
//
labelSpeed.AutoSize = true;
labelSpeed.Location = new Point(13, 15);
labelSpeed.MaximumSize = new Size(200, 0);
labelSpeed.Name = "labelSpeed";
labelSpeed.Size = new Size(198, 32);
labelSpeed.Size = new Size(538, 40);
labelSpeed.TabIndex = 44;
labelSpeed.Text = "Animation Speed";
//
@@ -284,7 +283,7 @@ namespace GHelper
comboKeyboardSpeed.FormattingEnabled = true;
comboKeyboardSpeed.ItemHeight = 32;
comboKeyboardSpeed.Items.AddRange(new object[] { "Slow", "Normal", "Fast" });
comboKeyboardSpeed.Location = new Point(220, 12);
comboKeyboardSpeed.Location = new Point(607, 15);
comboKeyboardSpeed.Margin = new Padding(4, 10, 4, 8);
comboKeyboardSpeed.Name = "comboKeyboardSpeed";
comboKeyboardSpeed.Size = new Size(291, 40);
@@ -574,6 +573,7 @@ namespace GHelper
//
// groupOther
//
groupOther.Controls.Add(checkAutoApplyWindowsPowerMode);
groupOther.Controls.Add(checkKeyboardAuto);
groupOther.Controls.Add(checkUSBC);
groupOther.Controls.Add(checkNoOverdrive);
@@ -586,10 +586,20 @@ namespace GHelper
groupOther.TabStop = false;
groupOther.Text = "Other";
//
// checkAutoApplyWindowsPowerMode
//
checkAutoApplyWindowsPowerMode.AutoSize = true;
checkAutoApplyWindowsPowerMode.Location = new Point(25, 220);
checkAutoApplyWindowsPowerMode.Name = "checkAutoApplyWindowsPowerMode";
checkAutoApplyWindowsPowerMode.Size = new Size(416, 36);
checkAutoApplyWindowsPowerMode.TabIndex = 47;
checkAutoApplyWindowsPowerMode.Text = "Auto Adjust Windows Power Mode";
checkAutoApplyWindowsPowerMode.UseVisualStyleBackColor = true;
//
// checkKeyboardAuto
//
checkKeyboardAuto.AutoSize = true;
checkKeyboardAuto.Location = new Point(25, 53);
checkKeyboardAuto.Location = new Point(25, 40);
checkKeyboardAuto.MaximumSize = new Size(780, 0);
checkKeyboardAuto.Name = "checkKeyboardAuto";
checkKeyboardAuto.Size = new Size(712, 36);
@@ -600,7 +610,7 @@ namespace GHelper
// checkUSBC
//
checkUSBC.AutoSize = true;
checkUSBC.Location = new Point(25, 210);
checkUSBC.Location = new Point(25, 85);
checkUSBC.Name = "checkUSBC";
checkUSBC.Size = new Size(659, 36);
checkUSBC.TabIndex = 4;
@@ -610,7 +620,7 @@ namespace GHelper
// checkNoOverdrive
//
checkNoOverdrive.AutoSize = true;
checkNoOverdrive.Location = new Point(25, 156);
checkNoOverdrive.Location = new Point(25, 130);
checkNoOverdrive.Name = "checkNoOverdrive";
checkNoOverdrive.Size = new Size(307, 36);
checkNoOverdrive.TabIndex = 3;
@@ -620,7 +630,7 @@ namespace GHelper
// checkTopmost
//
checkTopmost.AutoSize = true;
checkTopmost.Location = new Point(25, 104);
checkTopmost.Location = new Point(25, 175);
checkTopmost.Name = "checkTopmost";
checkTopmost.Size = new Size(390, 36);
checkTopmost.TabIndex = 1;
@@ -714,5 +724,6 @@ namespace GHelper
private Label labelBacklightTimeout;
private NumericUpDown numericBacklightTime;
private CheckBox checkKeyboardAuto;
private CheckBox checkAutoApplyWindowsPowerMode;
}
}

View File

@@ -68,11 +68,13 @@ namespace GHelper
labelSpeed.Text = Properties.Strings.AnimationSpeed;
labelBrightness.Text = Properties.Strings.Brightness;
labelBacklightTimeout.Text = Properties.Strings.BacklightTimeout;
checkKeyboardAuto.Text = Properties.Strings.KeyboardAuto;
checkNoOverdrive.Text = Properties.Strings.DisableOverdrive;
checkTopmost.Text = Properties.Strings.WindowTop;
checkUSBC.Text = Properties.Strings.OptimizedUSBC;
checkAutoApplyWindowsPowerMode.Text = Properties.Strings.ApplyWindowsPowerPlan;
labelBacklight.Text = Properties.Strings.Keyboard;
labelBacklightBar.Text = Properties.Strings.Lightbar;
@@ -176,6 +178,9 @@ namespace GHelper
checkUSBC.Checked = (Program.config.getConfig("optimized_usbc") == 1);
checkUSBC.CheckedChanged += CheckUSBC_CheckedChanged;
checkAutoApplyWindowsPowerMode.Checked = (Program.config.getConfig("auto_apply_power_plan") != 0);
checkAutoApplyWindowsPowerMode.CheckedChanged += checkAutoApplyWindowsPowerMode_CheckedChanged;
int kb_brightness = Program.config.getConfig("keyboard_brightness");
trackBrightness.Value = (kb_brightness >= 0 && kb_brightness <= 3) ? kb_brightness : 3;
@@ -299,5 +304,10 @@ namespace GHelper
Top = Program.settingsForm.Top;
Left = Program.settingsForm.Left - Width - 5;
}
private void checkAutoApplyWindowsPowerMode_CheckedChanged(object? sender, EventArgs e)
{
Program.config.setConfig("auto_apply_power_plan", checkAutoApplyWindowsPowerMode.Checked ? 1 : 0);
}
}
}

View File

@@ -1,4 +1,64 @@
<root>
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing"">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<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">

View File

@@ -36,6 +36,11 @@ namespace GHelper
labelGPU.Text = Properties.Strings.GPUSettings;
labelGPUCoreTitle.Text = Properties.Strings.GPUCoreClockOffset;
labelGPUMemoryTitle.Text = Properties.Strings.GPUMemoryClockOffset;
labelGPUBoostTitle.Text = Properties.Strings.GPUBoost;
labelGPUTempTitle.Text = Properties.Strings.GPUTempTarget;
InitTheme();
MinRPM = 18;
@@ -161,7 +166,13 @@ namespace GHelper
memory = current_memory;
}
labelGPU.Text = nvControl.FullName;
try
{
labelGPU.Text = nvControl.FullName;
} catch
{
}
//}
@@ -266,6 +277,8 @@ namespace GHelper
private void Fans_Shown(object? sender, EventArgs e)
{
panelSliders.Visible = panelGPU.Visible || panelPower.Visible;
if (Height > Program.settingsForm.Height)
{
Top = Program.settingsForm.Top + Program.settingsForm.Height - Height;
@@ -277,8 +290,8 @@ namespace GHelper
Top = Program.settingsForm.Top;
}
Left = Program.settingsForm.Left - Width - 5;
}

View File

@@ -16,7 +16,7 @@
<PlatformTarget>AnyCPU</PlatformTarget>
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<AssemblyVersion>0.62</AssemblyVersion>
<AssemblyVersion>0.64</AssemblyVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
@@ -59,8 +59,10 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="FftSharp" Version="2.0.0" />
<PackageReference Include="hidlibrary" Version="3.3.40" />
<PackageReference Include="HidSharpCore" Version="1.2.1.1" />
<PackageReference Include="NAudio" Version="2.1.0" />
<PackageReference Include="System.Management" Version="7.0.1" />
<PackageReference Include="TaskScheduler" Version="2.10.1" />
<PackageReference Include="WinForms.DataVisualization" Version="1.8.0" />

View File

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

View File

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

View File

@@ -41,9 +41,9 @@ public static class HardwareControl
if (fan > fanMax && fan < 110) SetFanMax(fan);
if (Program.config.getConfig("fan_rpm") == 1)
return " Fan: " + (fan * 100).ToString() + "RPM";
return GHelper.Properties.Strings.FanSpeed + (fan * 100).ToString() + GHelper.Properties.Strings.RPM;
else
return " Fan: " + Math.Min(Math.Round((float)fan / fanMax * 100), 100).ToString() + "%"; // relatively to 6000 rpm
return GHelper.Properties.Strings.FanSpeed + Math.Min(Math.Round((float)fan / fanMax * 100), 100).ToString() + "%"; // relatively to 6000 rpm
}
private static int GetGpuUse()
@@ -51,6 +51,7 @@ public static class HardwareControl
try
{
int? gpuUse = GpuControl?.GetGpuUse();
Logger.WriteLine("GPU usage: " + GpuControl?.FullName + " " + gpuUse + "%");
if (gpuUse is not null) return (int)gpuUse;
}
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();
Logger.WriteLine("GPU usage: " + use);
if (use > threshold)
if (GetGpuUse() > threshold)
{
Thread.Sleep(1000);
use = GetGpuUse();
Logger.WriteLine("GPU usage: " + use);
return (use > threshold);
return (GetGpuUse() > threshold);
}
return false;
}
@@ -136,7 +133,7 @@ public static class HardwareControl
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,
// so a simple workaround is to refresh again after that happens

View File

@@ -1,4 +1,3 @@
using GHelper.Gpu;
using Microsoft.Win32;
using System.Diagnostics;
using System.Globalization;
@@ -43,7 +42,7 @@ namespace GHelper
Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentUICulture;
Debug.WriteLine(CultureInfo.CurrentUICulture);
//Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("es");
//Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr");
CheckProcesses();
@@ -64,7 +63,7 @@ namespace GHelper
}
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();
@@ -91,14 +90,21 @@ namespace GHelper
unRegPowerNotify = NativeMethods.RegisterPowerSettingNotification(ds, settingGuid.ConsoleDisplayState, NativeMethods.DEVICE_NOTIFY_WINDOW_HANDLE);
// CTRL + SHIFT + F5 to cycle profiles
var ghk = new KeyHandler(KeyHandler.SHIFT | KeyHandler.CTRL, Keys.F5, ds);
ghk.Register();
Keys keybind_profile = (config.getConfig("keybind_profile") != -1) ? (Keys)config.getConfig("keybind_profile") : Keys.F5;
if (keybind_profile != 0)
{
var ghk = new KeyHandler(KeyHandler.SHIFT | KeyHandler.CTRL, keybind_profile, ds);
ghk.Register();
}
if (Environment.CurrentDirectory.Trim('\\') == Application.StartupPath.Trim('\\') || action.Length > 0)
{
SettingsToggle(action);
}
//Task.Run(wmi.RunListener);
Application.Run();
}
@@ -153,7 +159,7 @@ namespace GHelper
}
settingsForm.AutoKeyboard();
settingsForm.SetMatrix();
settingsForm.matrix.SetMatrix();
}
private static void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
@@ -253,6 +259,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)
{
@@ -278,6 +301,10 @@ namespace GHelper
case 179: // FN+F4
KeyProcess("fnf4");
return;
case 189: // Tablet mode
TabletMode();
return;
}

View File

@@ -1,7 +1,6 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -168,6 +167,15 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Auto adjust Windows Power Mode.
/// </summary>
internal static string ApplyWindowsPowerPlan {
get {
return ResourceManager.GetString("ApplyWindowsPowerPlan", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Breathe.
/// </summary>
@@ -267,6 +275,15 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Seconds to turn off backlight on battery.
/// </summary>
internal static string BacklightTimeout {
get {
return ResourceManager.GetString("BacklightTimeout", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Balanced.
/// </summary>
@@ -465,6 +482,15 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Fan: .
/// </summary>
internal static string FanSpeed {
get {
return ResourceManager.GetString("FanSpeed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Fans + Power.
/// </summary>
@@ -474,6 +500,15 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Dynamic Boost.
/// </summary>
internal static string GPUBoost {
get {
return ResourceManager.GetString("GPUBoost", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Changing.
/// </summary>
@@ -483,6 +518,24 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Core Clock Offset.
/// </summary>
internal static string GPUCoreClockOffset {
get {
return ResourceManager.GetString("GPUCoreClockOffset", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Memory Clock Offset.
/// </summary>
internal static string GPUMemoryClockOffset {
get {
return ResourceManager.GetString("GPUMemoryClockOffset", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to GPU Mode.
/// </summary>
@@ -528,6 +581,15 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Temperature Target.
/// </summary>
internal static string GPUTempTarget {
get {
return ResourceManager.GetString("GPUTempTarget", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Key Bindings.
/// </summary>
@@ -609,6 +671,15 @@ namespace GHelper.Properties {
}
}
/// <summary>
/// Looks up a localized string similar to Audio Visualizer.
/// </summary>
internal static string MatrixAudio {
get {
return ResourceManager.GetString("MatrixAudio", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Binary Banner.
/// </summary>

View File

@@ -59,106 +59,115 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ACPIError" xml:space="preserve">
<value>Can't connect to ASUS ACPI. Application can't function without it. Try to install Asus System Control Interface</value>
<value>Verbindung zu ASUS ACPI fehlgeschlagen. G-Helper kann nicht ausgeführt werden. Bitte installiere ASUS System Control Interface.</value>
</data>
<data name="AlertDGPU" xml:space="preserve">
<value>Looks like GPU is in heavy use, disable it?</value>
<value>Die GPU wird gerade verwendet. Trotzdem deaktivieren?</value>
</data>
<data name="AlertDGPUTitle" xml:space="preserve">
<value>Eco Mode</value>
<value>Eco Modus</value>
</data>
<data name="AlertUltimateOff" xml:space="preserve">
<value>Switching off Ultimate Mode requires restart</value>
<value>Wechseln in den Ultimate Modus benötigt einen Neustart. Jetzt neustarten?</value>
</data>
<data name="AlertUltimateOn" xml:space="preserve">
<value>Ultimate Mode requires restart</value>
<value>Ultimate Modus benötigt einen Neustart</value>
</data>
<data name="AlertUltimateTitle" xml:space="preserve">
<value>Reboot now?</value>
<value>Jetzt neustarten?</value>
</data>
<data name="AnimationSpeed" xml:space="preserve">
<value>Animation Speed</value>
<value>Animationsgeschwindigkeit</value>
</data>
<data name="AnimeMatrix" xml:space="preserve">
<value>Anime Matrix</value>
<value>AniMeMatrix</value>
</data>
<data name="AppAlreadyRunning" xml:space="preserve">
<value>App already running</value>
<value>Die Anwendung läuft bereits</value>
</data>
<data name="AppAlreadyRunningText" xml:space="preserve">
<value>G-Helper is already running. Check system tray for an icon.</value>
<value>G-Helper läuft bereits. Bitte prüfe den Systemtray.</value>
</data>
<data name="ApplyFanCurve" xml:space="preserve">
<value>Apply Custom Fan Curve</value>
<value>Lüfterkurve anweden</value>
</data>
<data name="ApplyPowerLimits" xml:space="preserve">
<value>Apply Power Limits</value>
<value>Leistunsgrenzen anwenden</value>
</data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Windows Leistungsmodus automatisch anpassen</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Breathe</value>
<value>Atmen</value>
</data>
<data name="AuraColorCycle" xml:space="preserve">
<value>Color Cycle</value>
<value>Farbwechsel</value>
</data>
<data name="AuraFast" xml:space="preserve">
<value>Fast</value>
<value>Schnell</value>
</data>
<data name="AuraNormal" xml:space="preserve">
<value>Normal</value>
</data>
<data name="AuraRainbow" xml:space="preserve">
<value>Rainbow</value>
<value>Regenbogen</value>
</data>
<data name="AuraSlow" xml:space="preserve">
<value>Slow</value>
<value>Langsam</value>
</data>
<data name="AuraStatic" xml:space="preserve">
<value>Static</value>
<value>Statisch</value>
</data>
<data name="AuraStrobe" xml:space="preserve">
<value>Strobe</value>
<value>Stroboskop</value>
</data>
<data name="AutoMode" xml:space="preserve">
<value>Auto</value>
</data>
<data name="AutoRefreshTooltip" xml:space="preserve">
<value>Sets 60Hz to save battery, and back when plugged</value>
<value>60Hz im Batteriebetrieb Maximal wenn eingesteckt.</value>
</data>
<data name="Awake" xml:space="preserve">
<value>Awake</value>
<value>Im Betrieb</value>
</data>
<data name="BacklightTimeout" xml:space="preserve">
<value>Tastaturbelechtung abschalten in (Sekunden)</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>Balanced</value>
<value>Ausbalanciert</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Battery Charge Limit</value>
<value>Ladebegrenzung</value>
</data>
<data name="Boot" xml:space="preserve">
<value>Boot</value>
<value>Hochfahren</value>
</data>
<data name="Brightness" xml:space="preserve">
<value>Helligkeit</value>
</data>
<data name="Color" xml:space="preserve">
<value>Color</value>
<value>Farbe</value>
</data>
<data name="CPUBoost" xml:space="preserve">
<value>CPU Boost</value>
</data>
<data name="Custom" xml:space="preserve">
<value>Custom</value>
<value>Benutzerdefiniert</value>
</data>
<data name="Default" xml:space="preserve">
<value>Default</value>
<value>Standard</value>
</data>
<data name="DisableOverdrive" xml:space="preserve">
<value>Disable screen overdrive</value>
<value>Overdrive abschalten</value>
</data>
<data name="Discharging" xml:space="preserve">
<value>Discharging</value>
<value>Entlädt</value>
</data>
<data name="DownloadUpdate" xml:space="preserve">
<value>Download Update</value>
<value>Updates herunterladen</value>
</data>
<data name="EcoGPUTooltip" xml:space="preserve">
<value>Disables dGPU for battery savings</value>
<value>dGPU zum Stromsparen abschalten</value>
</data>
<data name="EcoMode" xml:space="preserve">
<value>Eco</value>
@@ -167,172 +176,193 @@
<value>Extra</value>
</data>
<data name="ExtraSettings" xml:space="preserve">
<value>Extra Settings</value>
<value>Extra-Einstellungen</value>
</data>
<data name="FactoryDefaults" xml:space="preserve">
<value>Factory Defaults</value>
<value>Werkseinstellungen</value>
</data>
<data name="FanCurves" xml:space="preserve">
<value>Fan Curves</value>
<value>Lüfterkurven</value>
</data>
<data name="FanProfileCPU" xml:space="preserve">
<value>CPU Fan Profile</value>
<value>CPU Lüfterprofil</value>
</data>
<data name="FanProfileGPU" xml:space="preserve">
<value>GPU Fan Profile</value>
<value>GPU Lüfterprofil</value>
</data>
<data name="FanProfileMid" xml:space="preserve">
<value>Mid Fan Profile</value>
<value>Mittleres Lüfterprofil</value>
</data>
<data name="FanProfiles" xml:space="preserve">
<value>Fan Profiles</value>
<value>Lüfterprofile</value>
</data>
<data name="FansAndPower" xml:space="preserve">
<value>Fans and Power</value>
<value>Lüfter und Leistung</value>
</data>
<data name="FanSpeed" xml:space="preserve">
<value> Lüfter: </value>
</data>
<data name="FansPower" xml:space="preserve">
<value>Fans + Power</value>
<value>Lüfter + Leistung</value>
</data>
<data name="GPUBoost" xml:space="preserve">
<value>Dynamic Boost</value>
</data>
<data name="GPUChanging" xml:space="preserve">
<value>Changing</value>
<value>Wechseln</value>
</data>
<data name="GPUCoreClockOffset" xml:space="preserve">
<value>Kernfrequenz Anpassung</value>
</data>
<data name="GPUMemoryClockOffset" xml:space="preserve">
<value>Speicherfrequenz Anpassung</value>
</data>
<data name="GPUMode" xml:space="preserve">
<value>GPU Mode</value>
<value>GPU Modus</value>
</data>
<data name="GPUModeEco" xml:space="preserve">
<value>iGPU only</value>
<value>Nur iGPU</value>
</data>
<data name="GPUModeStandard" xml:space="preserve">
<value>iGPU + dGPU</value>
</data>
<data name="GPUModeUltimate" xml:space="preserve">
<value>dGPU exclusive</value>
<value>Nur dGPU</value>
</data>
<data name="GPUTempTarget" xml:space="preserve">
<value>Maximale GPU Temperatur</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Key Bindings</value>
<value>Tastenbelegung</value>
</data>
<data name="Keyboard" xml:space="preserve">
<value>Keyboard</value>
<value>Tastatur</value>
</data>
<data name="KeyboardAuto" xml:space="preserve">
<value>Lower backlight brightness on battery and back when plugged</value>
<value>Tastaturbeleuchtung im Batteriebetrieb abdunkeln.</value>
</data>
<data name="KeyboardBacklight" xml:space="preserve">
<value>Keyboard Backlight</value>
<value>Tastaturbeleuchtung</value>
</data>
<data name="LaptopBacklight" xml:space="preserve">
<value>Laptopbelechtung</value>
</data>
<data name="LaptopKeyboard" xml:space="preserve">
<value>Laptop Keyboard</value>
<value>Laptoptastatur</value>
</data>
<data name="LaptopScreen" xml:space="preserve">
<value>Laptop Screen</value>
<value>Laptopbildschirm</value>
</data>
<data name="MatrixBanner" xml:space="preserve">
<value>Binary Banner</value>
</data>
<data name="MatrixBright" xml:space="preserve">
<value>Bright</value>
<value>Hell</value>
</data>
<data name="MatrixClock" xml:space="preserve">
<value>Clock</value>
<value>Uhr</value>
</data>
<data name="MatrixDim" xml:space="preserve">
<value>Dim</value>
<value>Dunkel</value>
</data>
<data name="MatrixLogo" xml:space="preserve">
<value>Rog Logo</value>
<value>ROG Logo</value>
</data>
<data name="MatrixMedium" xml:space="preserve">
<value>Medium</value>
<value>Mittel</value>
</data>
<data name="MatrixOff" xml:space="preserve">
<value>Off</value>
<value>Aus</value>
</data>
<data name="MatrixPicture" xml:space="preserve">
<value>Picture</value>
<value>Bild</value>
</data>
<data name="MaxRefreshTooltip" xml:space="preserve">
<value>Max refresh rate for lower latency</value>
<value>Maximale Wiederholrate für niedrigste Latenz</value>
</data>
<data name="MinRefreshTooltip" xml:space="preserve">
<value>60Hz refresh rate to save battery</value>
<value>60Hz um Strom zu sparen</value>
</data>
<data name="Multizone" xml:space="preserve">
<value>Multizone</value>
<value>Multi-Zone</value>
</data>
<data name="OpenGHelper" xml:space="preserve">
<value>Open G-Helper window</value>
<value>G-Helper Fenster öffnen</value>
</data>
<data name="Optimized" xml:space="preserve">
<value>Optimized</value>
<value>Optimiert</value>
</data>
<data name="OptimizedGPUTooltip" xml:space="preserve">
<value>Switch to Eco on battery and to Standard when plugged</value>
<value>Eco Modus im Batteriebetrieb, Standard wenn eingesteckt.</value>
</data>
<data name="OptimizedUSBC" xml:space="preserve">
<value>GPU beim USB-C Laden im Optimierten Modus deaktiviert lassen</value>
</data>
<data name="Other" xml:space="preserve">
<value>Other</value>
<value>Sonstiges</value>
</data>
<data name="Overdrive" xml:space="preserve">
<value>Overdrive</value>
</data>
<data name="PerformanceMode" xml:space="preserve">
<value>Performance Mode</value>
<value>Leistungsmodus</value>
</data>
<data name="PictureGif" xml:space="preserve">
<value>Picture / Gif</value>
<value>Bild / GIF</value>
</data>
<data name="PlayPause" xml:space="preserve">
<value>Play / Pause</value>
<value>Wiedergabe / Pause</value>
</data>
<data name="PowerLimits" xml:space="preserve">
<value>Power Limits (PPT)</value>
<value>Leistungsbegrenzung (PPT)</value>
</data>
<data name="PPTExperimental" xml:space="preserve">
<value>Power Limits (PPT) is experimental feature. Use carefully and on your own risk!</value>
<value>Leistungsbegrenzung (PPT) ist experimentell. Nutzung erfolgt auf eigene Gefahr!</value>
</data>
<data name="PrintScreen" xml:space="preserve">
<value>PrintScreen</value>
<value>Druck</value>
</data>
<data name="Quit" xml:space="preserve">
<value>Quit</value>
<value>Schließen</value>
</data>
<data name="RPM" xml:space="preserve">
<value>RPM</value>
<value>U/Min</value>
</data>
<data name="RunOnStartup" xml:space="preserve">
<value>Run on Startup</value>
<value>Beim Start ausführen</value>
</data>
<data name="Shutdown" xml:space="preserve">
<value>Shutdown</value>
<value>Herunterfahren</value>
</data>
<data name="Silent" xml:space="preserve">
<value>Silent</value>
<value>Leise</value>
</data>
<data name="Sleep" xml:space="preserve">
<value>Sleep</value>
<value>Standby</value>
</data>
<data name="StandardGPUTooltip" xml:space="preserve">
<value>Enables dGPU for standard use</value>
<value>dGPU aktivieren</value>
</data>
<data name="StandardMode" xml:space="preserve">
<value>Standard</value>
</data>
<data name="StartupError" xml:space="preserve">
<value>Startup Error</value>
<value>Startfehler</value>
</data>
<data name="ToggleAura" xml:space="preserve">
<value>Toggle Aura</value>
<value>Aura umschalten</value>
</data>
<data name="Turbo" xml:space="preserve">
<value>Turbo</value>
</data>
<data name="TurnedOff" xml:space="preserve">
<value>Turned off</value>
<value>Ausgeschaltet</value>
</data>
<data name="TurnOffOnBattery" xml:space="preserve">
<value>Turn off on battery</value>
<value>Im Batteriebetrieb abschalten</value>
</data>
<data name="UltimateGPUTooltip" xml:space="preserve">
<value>Routes laptop screen to dGPU, maximizing FPS</value>
<value>Verbindet den Bildschirm mit der dGPU für maximale Leistung.</value>
</data>
<data name="UltimateMode" xml:space="preserve">
<value>Ultimate</value>
@@ -341,9 +371,9 @@
<value>Version</value>
</data>
<data name="VolumeMute" xml:space="preserve">
<value>Volume Mute</value>
<value>Stummschalten</value>
</data>
<data name="WindowTop" xml:space="preserve">
<value>Keep app window always on top</value>
<value>Fenster immer über allen anderen</value>
</data>
</root>

View File

@@ -153,6 +153,9 @@
<data name="ApplyPowerLimits" xml:space="preserve">
<value>Aplicar límites de energía</value>
</data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Auto Adjust Windows Power Mode</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Respiración</value>
</data>

View File

@@ -59,280 +59,283 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ACPIError" xml:space="preserve">
<value>Can't connect to ASUS ACPI. Application can't function without it. Try to install Asus System Control Interface</value>
<value>Connexion impossible avec ASUS ACPI. Lapplication ne peut fonctionner sans. Veuillez installer Asus System Control Interface.</value>
</data>
<data name="AlertDGPU" xml:space="preserve">
<value>Looks like GPU is in heavy use, disable it?</value>
<value>Le GPU semble être surchargé, voulez vous le désactiver ?</value>
</data>
<data name="AlertDGPUTitle" xml:space="preserve">
<value>Eco Mode</value>
<value>Mode Économique</value>
</data>
<data name="AlertUltimateOff" xml:space="preserve">
<value>Switching off Ultimate Mode requires restart</value>
<value>Désactiver le Mode Ultime requiert un redémarrage</value>
</data>
<data name="AlertUltimateOn" xml:space="preserve">
<value>Ultimate Mode requires restart</value>
<value>Activer le Mode Ultime requiert un redémarrage</value>
</data>
<data name="AlertUltimateTitle" xml:space="preserve">
<value>Reboot now?</value>
<value>Redémarrer maintenant ?</value>
</data>
<data name="AnimationSpeed" xml:space="preserve">
<value>Animation Speed</value>
<value>Vitesse danimation</value>
</data>
<data name="AnimeMatrix" xml:space="preserve">
<value>Anime Matrix</value>
</data>
<data name="AppAlreadyRunning" xml:space="preserve">
<value>App already running</value>
<value>Lapplication est déjà en cours déxecution</value>
</data>
<data name="AppAlreadyRunningText" xml:space="preserve">
<value>G-Helper is already running. Check system tray for an icon.</value>
<value>G-Helper est déjà en cours d'exécution. Vérifiez la barre d'état du système</value>
</data>
<data name="ApplyFanCurve" xml:space="preserve">
<value>Apply Custom Fan Curve</value>
<value>Appliquer la courbe de ventilateur personnalisée</value>
</data>
<data name="ApplyPowerLimits" xml:space="preserve">
<value>Apply Power Limits</value>
<value>Appliquer les limites de performance</value>
</data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Ajuster automatiquement les modes de Performance Windows</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Breathe</value>
<value>Respiration</value>
</data>
<data name="AuraColorCycle" xml:space="preserve">
<value>Color Cycle</value>
<value>Cycle de couleur</value>
</data>
<data name="AuraFast" xml:space="preserve">
<value>Fast</value>
<value>Rapide</value>
</data>
<data name="AuraNormal" xml:space="preserve">
<value>Normal</value>
</data>
<data name="AuraRainbow" xml:space="preserve">
<value>Rainbow</value>
<value>Arc-en-ciel</value>
</data>
<data name="AuraSlow" xml:space="preserve">
<value>Slow</value>
<value>Lent</value>
</data>
<data name="AuraStatic" xml:space="preserve">
<value>Static</value>
<value>Statique</value>
</data>
<data name="AuraStrobe" xml:space="preserve">
<value>Strobe</value>
<value>Stroboscopique</value>
</data>
<data name="AutoMode" xml:space="preserve">
<value>Auto</value>
<value>Automatique</value>
</data>
<data name="AutoRefreshTooltip" xml:space="preserve">
<value>Sets 60Hz to save battery, and back when plugged</value>
<value>Limiter le rafraîchissement de lécran à 60Hz pour économiser de la batterie, et retour à la normal en chargement</value>
</data>
<data name="Awake" xml:space="preserve">
<value>Awake</value>
<value>Éveillé</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>Balanced</value>
<value>Balancé</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Battery Charge Limit</value>
<value>Limite de charge de la batterie</value>
</data>
<data name="Boot" xml:space="preserve">
<value>Boot</value>
<value>Au lancement</value>
</data>
<data name="Color" xml:space="preserve">
<value>Color</value>
<value>Couleur</value>
</data>
<data name="CPUBoost" xml:space="preserve">
<value>CPU Boost</value>
</data>
<data name="Custom" xml:space="preserve">
<value>Custom</value>
<value>Personnalisé</value>
</data>
<data name="Default" xml:space="preserve">
<value>Default</value>
<value>Par défaut</value>
</data>
<data name="DisableOverdrive" xml:space="preserve">
<value>Disable screen overdrive</value>
<value>Désactiver lOverdrive de lÉcran</value>
</data>
<data name="Discharging" xml:space="preserve">
<value>Discharging</value>
<value>En déchargement</value>
</data>
<data name="DownloadUpdate" xml:space="preserve">
<value>Download Update</value>
<value>Télécharger la mise à jour</value>
</data>
<data name="EcoGPUTooltip" xml:space="preserve">
<value>Disables dGPU for battery savings</value>
<value>Désactive le dGPU pour économiser la batterie</value>
</data>
<data name="EcoMode" xml:space="preserve">
<value>Eco</value>
<value>Économique</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Extra</value>
<value>Aditionnel</value>
</data>
<data name="ExtraSettings" xml:space="preserve">
<value>Extra Settings</value>
<value>Paramètres additionnels</value>
</data>
<data name="FactoryDefaults" xml:space="preserve">
<value>Factory Defaults</value>
<value>Paramètres d'usine</value>
</data>
<data name="FanCurves" xml:space="preserve">
<value>Fan Curves</value>
<value>Courbes des ventilateurs</value>
</data>
<data name="FanProfileCPU" xml:space="preserve">
<value>CPU Fan Profile</value>
<value>Profil de ventilateur CPU</value>
</data>
<data name="FanProfileGPU" xml:space="preserve">
<value>GPU Fan Profile</value>
<value>Profil de ventilateur GPU</value>
</data>
<data name="FanProfileMid" xml:space="preserve">
<value>Mid Fan Profile</value>
<value>Profil de ventilateur central</value>
</data>
<data name="FanProfiles" xml:space="preserve">
<value>Fan Profiles</value>
<value>Profil des ventilateurs </value>
</data>
<data name="FansAndPower" xml:space="preserve">
<value>Fans and Power</value>
<value>Ventilateurs et Puissance</value>
</data>
<data name="FansPower" xml:space="preserve">
<value>Fans + Power</value>
<value>Ventilateurs + Puissance</value>
</data>
<data name="GPUChanging" xml:space="preserve">
<value>Changing</value>
<value>Changement</value>
</data>
<data name="GPUMode" xml:space="preserve">
<value>GPU Mode</value>
<value>Mode de GPU</value>
</data>
<data name="GPUModeEco" xml:space="preserve">
<value>iGPU only</value>
<value>Seulement iGPU</value>
</data>
<data name="GPUModeStandard" xml:space="preserve">
<value>iGPU + dGPU</value>
</data>
<data name="GPUModeUltimate" xml:space="preserve">
<value>dGPU exclusive</value>
<value>Exclusivement dGPU</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Key Bindings</value>
<value>Raccourcis clavier</value>
</data>
<data name="Keyboard" xml:space="preserve">
<value>Keyboard</value>
<value>Clavier</value>
</data>
<data name="KeyboardAuto" xml:space="preserve">
<value>Lower backlight brightness on battery and back when plugged</value>
<value>Baisser la luminosité du rétroéclairage sur batterie et retour à la normal en charge</value>
</data>
<data name="KeyboardBacklight" xml:space="preserve">
<value>Keyboard Backlight</value>
<value>Rétroéclairage du clavier</value>
</data>
<data name="LaptopKeyboard" xml:space="preserve">
<value>Laptop Keyboard</value>
<value>Clavier de lordinateur</value>
</data>
<data name="LaptopScreen" xml:space="preserve">
<value>Laptop Screen</value>
<value>Écran de lordinateur</value>
</data>
<data name="MatrixBanner" xml:space="preserve">
<value>Binary Banner</value>
<value>Bannière binaire</value>
</data>
<data name="MatrixBright" xml:space="preserve">
<value>Bright</value>
<value>Lumineux</value>
</data>
<data name="MatrixClock" xml:space="preserve">
<value>Clock</value>
<value>Horloge</value>
</data>
<data name="MatrixDim" xml:space="preserve">
<value>Dim</value>
<value>Faible</value>
</data>
<data name="MatrixLogo" xml:space="preserve">
<value>Rog Logo</value>
<value>Logo ROG</value>
</data>
<data name="MatrixMedium" xml:space="preserve">
<value>Medium</value>
<value>Moyen</value>
</data>
<data name="MatrixOff" xml:space="preserve">
<value>Off</value>
<value>Éteint</value>
</data>
<data name="MatrixPicture" xml:space="preserve">
<value>Picture</value>
<value>Image</value>
</data>
<data name="MaxRefreshTooltip" xml:space="preserve">
<value>Max refresh rate for lower latency</value>
<value>Rafraichissement maximum pour baisser la latance</value>
</data>
<data name="MinRefreshTooltip" xml:space="preserve">
<value>60Hz refresh rate to save battery</value>
<value>Rafraichissement à 60Hz pour économiser de la batterie</value>
</data>
<data name="Multizone" xml:space="preserve">
<value>Multizone</value>
</data>
<data name="OpenGHelper" xml:space="preserve">
<value>Open G-Helper window</value>
<value>Ouvrir la fenêtre G-Helper</value>
</data>
<data name="Optimized" xml:space="preserve">
<value>Optimized</value>
<value>Optimizé</value>
</data>
<data name="OptimizedGPUTooltip" xml:space="preserve">
<value>Switch to Eco on battery and to Standard when plugged</value>
<value>Passer en Économique sur batterie et sur Standard en chargement</value>
</data>
<data name="Other" xml:space="preserve">
<value>Other</value>
<value>Autre</value>
</data>
<data name="Overdrive" xml:space="preserve">
<value>Overdrive</value>
</data>
<data name="PerformanceMode" xml:space="preserve">
<value>Performance Mode</value>
<value>Mode Performance</value>
</data>
<data name="PictureGif" xml:space="preserve">
<value>Picture / Gif</value>
<value>Image / Gif</value>
</data>
<data name="PlayPause" xml:space="preserve">
<value>Play / Pause</value>
<value>Reproduire / Pause</value>
</data>
<data name="PowerLimits" xml:space="preserve">
<value>Power Limits (PPT)</value>
<value>Limites de puissance (PPT)</value>
</data>
<data name="PPTExperimental" xml:space="preserve">
<value>Power Limits (PPT) is experimental feature. Use carefully and on your own risk!</value>
<value>Limites de puissance (PPT) est une fonctionnalité expérimentale. Utilisez la avec attention et à vos risques.</value>
</data>
<data name="PrintScreen" xml:space="preserve">
<value>PrintScreen</value>
<value>Capture dÉcran</value>
</data>
<data name="Quit" xml:space="preserve">
<value>Quit</value>
<value>Quitter</value>
</data>
<data name="RPM" xml:space="preserve">
<value>RPM</value>
</data>
<data name="RunOnStartup" xml:space="preserve">
<value>Run on Startup</value>
<value>Executer au lancement</value>
</data>
<data name="Shutdown" xml:space="preserve">
<value>Shutdown</value>
<value>Éteindre</value>
</data>
<data name="Silent" xml:space="preserve">
<value>Silent</value>
<value>Silencieux</value>
</data>
<data name="Sleep" xml:space="preserve">
<value>Sleep</value>
<value>En veille</value>
</data>
<data name="StandardGPUTooltip" xml:space="preserve">
<value>Enables dGPU for standard use</value>
<value>Active le dGPU pour une utilisation standard</value>
</data>
<data name="StandardMode" xml:space="preserve">
<value>Standard</value>
</data>
<data name="StartupError" xml:space="preserve">
<value>Startup Error</value>
<value>Erreur au lancement</value>
</data>
<data name="ToggleAura" xml:space="preserve">
<value>Toggle Aura</value>
<value>Basculer Aura</value>
</data>
<data name="Turbo" xml:space="preserve">
<value>Turbo</value>
</data>
<data name="TurnedOff" xml:space="preserve">
<value>Turned off</value>
<value>Éteint</value>
</data>
<data name="TurnOffOnBattery" xml:space="preserve">
<value>Turn off on battery</value>
<value>Éteindre sur batterie</value>
</data>
<data name="UltimateGPUTooltip" xml:space="preserve">
<value>Routes laptop screen to dGPU, maximizing FPS</value>
<value>Redirige lécran de lordinateur sur le dGPU pour maximiser le nombre de FPS</value>
</data>
<data name="UltimateMode" xml:space="preserve">
<value>Ultimate</value>
@@ -341,9 +344,57 @@
<value>Version</value>
</data>
<data name="VolumeMute" xml:space="preserve">
<value>Volume Mute</value>
<value>Mettre en sourdine</value>
</data>
<data name="WindowTop" xml:space="preserve">
<value>Keep app window always on top</value>
<value>Garder lapplication au premier plan</value>
</data>
<data name="Brightness" xml:space="preserve">
<value>Luminosité</value>
</data>
<data name="FanSpeed" xml:space="preserve">
<value>Ventilateurs :</value>
</data>
<data name="GPUBoost" xml:space="preserve">
<value>Boost Dynamique</value>
</data>
<data name="GPUCoreClockOffset" xml:space="preserve">
<value>Augmentation de la fréquence de base</value>
</data>
<data name="GPUMemoryClockOffset" xml:space="preserve">
<value>Augmentation de la fréquence de la mémoire</value>
</data>
<data name="GPUSettings" xml:space="preserve">
<value>Paramêtres de GPU</value>
</data>
<data name="GPUTempTarget" xml:space="preserve">
<value>Température ciblée</value>
</data>
<data name="LaptopBacklight" xml:space="preserve">
<value>Rétroéclairage de lordinateur</value>
</data>
<data name="Lid" xml:space="preserve">
<value>Capot</value>
</data>
<data name="Lightbar" xml:space="preserve">
<value>Barre de lumière</value>
</data>
<data name="Logo" xml:space="preserve">
<value>Logo</value>
</data>
<data name="OptimizedUSBC" xml:space="preserve">
<value>Garder le GPU désactivé en chargement via USB-C dans le mode Optimisé</value>
</data>
<data name="RestartGPU" xml:space="preserve">
<value>Un processus utilise le dGPU est empêche le passage en mode Économique. Redémarrer le dGPU dans le gestionnaire de périphérique ? * Veuillez procéder à vos risques</value>
</data>
<data name="ToggleMiniled" xml:space="preserve">
<value>Basculer sur Miniled (si supporté)</value>
</data>
<data name="ToggleScreen" xml:space="preserve">
<value>Basculer décran</value>
</data>
<data name="BacklightTimeout" xml:space="preserve">
<value>Nombre de secondes avant déteindre le rétroéclairage sur batterie</value>
</data>
</root>

View File

@@ -94,6 +94,9 @@
<data name="ApplyPowerLimits" xml:space="preserve">
<value>Apply Power Limits</value>
</data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Auto Adjust Windows Power Mode</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Breathe</value>
</data>

View File

@@ -0,0 +1,350 @@
<root>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ACPIError" xml:space="preserve">
<value>Não foi possível conectar ao ASUS ACPI. O applicativo não pode funcionar sem isso. Tente instalar Asus System Controle Interface</value>
</data>
<data name="AlertDGPU" xml:space="preserve">
<value>Parece que o GPU está em uso pesado.</value>
</data>
<data name="AlertDGPUTitle" xml:space="preserve">
<value>Modo econômico</value>
</data>
<data name="AlertUltimateOff" xml:space="preserve">
<value>Passar ao Modo Final implica na reinicialização do sistema</value>
</data>
<data name="AlertUltimateOn" xml:space="preserve">
<value>Modo Ultimado necessita de reinicialização.</value>
</data>
<data name="AlertUltimateTitle" xml:space="preserve">
<value>Reiniciar agora ?</value>
</data>
<data name="AnimationSpeed" xml:space="preserve">
<value>Velocidade da Animação</value>
</data>
<data name="AnimeMatrix" xml:space="preserve">
<value>Anime Matrix</value>
</data>
<data name="AppAlreadyRunning" xml:space="preserve">
<value>O applicativo já está em execução</value>
</data>
<data name="AppAlreadyRunningText" xml:space="preserve">
<value>G-Helper já está em execução. Verifique a barra de sistema</value>
</data>
<data name="ApplyFanCurve" xml:space="preserve">
<value>Aplicar a curva de ventilador personalizada</value>
</data>
<data name="ApplyPowerLimits" xml:space="preserve">
<value>Aplicar as limitações de energia</value>
</data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Automaticamente ajustar os Modos de Energia Windows</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Repiração</value>
</data>
<data name="AuraColorCycle" xml:space="preserve">
<value>Ciclo de cores</value>
</data>
<data name="AuraFast" xml:space="preserve">
<value>Rápido</value>
</data>
<data name="AuraNormal" xml:space="preserve">
<value>Normal</value>
</data>
<data name="AuraRainbow" xml:space="preserve">
<value>Arco-íris</value>
</data>
<data name="AuraSlow" xml:space="preserve">
<value>Lento</value>
</data>
<data name="AuraStatic" xml:space="preserve">
<value>Estático</value>
</data>
<data name="AuraStrobe" xml:space="preserve">
<value>Estroboscópio</value>
</data>
<data name="AutoMode" xml:space="preserve">
<value>Automático</value>
</data>
<data name="AutoRefreshTooltip" xml:space="preserve">
<value>Estabelece 60Hz para economizar energia</value>
</data>
<data name="Awake" xml:space="preserve">
<value>Acordado</value>
</data>
<data name="BacklightTimeout" xml:space="preserve">
<value>Números de segundos para desligar a luz de fundo</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>Equilibrado</value>
</data>
<data name="BatteryChargeLimit" xml:space="preserve">
<value>Limite de carga da bateria</value>
</data>
<data name="Boot" xml:space="preserve">
<value>Durante o lançamento</value>
</data>
<data name="Brightness" xml:space="preserve">
<value>Luminosidade</value>
</data>
<data name="Color" xml:space="preserve">
<value>Cor</value>
</data>
<data name="CPUBoost" xml:space="preserve">
<value>CPU Boost</value>
</data>
<data name="Custom" xml:space="preserve">
<value>Personalizado</value>
</data>
<data name="Default" xml:space="preserve">
<value>Padrão</value>
</data>
<data name="DisableOverdrive" xml:space="preserve">
<value>Desativar o overdrive da tela</value>
</data>
<data name="Discharging" xml:space="preserve">
<value>Descarregando</value>
</data>
<data name="DownloadUpdate" xml:space="preserve">
<value>Baixar a atualização</value>
</data>
<data name="EcoGPUTooltip" xml:space="preserve">
<value>Desativar o dGPU para economisar a energía</value>
</data>
<data name="EcoMode" xml:space="preserve">
<value>Econômico</value>
</data>
<data name="Extra" xml:space="preserve">
<value>Adicional</value>
</data>
<data name="ExtraSettings" xml:space="preserve">
<value>Configurações adicionais</value>
</data>
<data name="FactoryDefaults" xml:space="preserve">
<value>Padrão de fábrica</value>
</data>
<data name="FanCurves" xml:space="preserve">
<value>Curvas de ventilador</value>
</data>
<data name="FanProfileCPU" xml:space="preserve">
<value>Perfil de ventilador CPU</value>
</data>
<data name="FanProfileGPU" xml:space="preserve">
<value>Perfil de ventilador GPU</value>
</data>
<data name="FanProfileMid" xml:space="preserve">
<value>Perfil de ventilador central</value>
</data>
<data name="FanProfiles" xml:space="preserve">
<value>Perfis de ventilador</value>
</data>
<data name="FansAndPower" xml:space="preserve">
<value>Ventiladores e Energía</value>
</data>
<data name="FanSpeed" xml:space="preserve">
<value>Ventilador</value>
</data>
<data name="FansPower" xml:space="preserve">
<value>Ventiladores + Energía</value>
</data>
<data name="GPUBoost" xml:space="preserve">
<value>Boost dinâmico</value>
</data>
<data name="GPUChanging" xml:space="preserve">
<value>Carregando</value>
</data>
<data name="GPUMode" xml:space="preserve">
<value>Modo de GPU</value>
</data>
<data name="GPUModeEco" xml:space="preserve">
<value>Só iGPU</value>
</data>
<data name="GPUModeStandard" xml:space="preserve">
<value>iGPU + dGPU</value>
</data>
<data name="GPUModeUltimate" xml:space="preserve">
<value>Exclusivamente dGPU</value>
</data>
<data name="GPUSettings" xml:space="preserve">
<value>Parâmetros de GPU</value>
</data>
<data name="GPUTempTarget" xml:space="preserve">
<value>Alvo de temperatura</value>
</data>
<data name="Keyboard" xml:space="preserve">
<value>Teclado</value>
</data>
<data name="KeyboardAuto" xml:space="preserve">
<value>Abaixar a luz de fundo na bateria e voltar quando carregando</value>
</data>
<data name="KeyboardBacklight" xml:space="preserve">
<value>Luz de fundo do teclado</value>
</data>
<data name="LaptopBacklight" xml:space="preserve">
<value>Luz de fundo do computador</value>
</data>
<data name="LaptopKeyboard" xml:space="preserve">
<value>Teclado do computador</value>
</data>
<data name="LaptopScreen" xml:space="preserve">
<value>Tela do computador</value>
</data>
<data name="Lid" xml:space="preserve">
<value>Tampa</value>
</data>
<data name="Logo" xml:space="preserve">
<value>Logo</value>
</data>
<data name="MatrixBanner" xml:space="preserve">
<value>Bandeira Binária</value>
</data>
<data name="MatrixBright" xml:space="preserve">
<value>Brilho</value>
</data>
<data name="MatrixClock" xml:space="preserve">
<value>Relógio</value>
</data>
<data name="MatrixDim" xml:space="preserve">
<value>Escuro</value>
</data>
<data name="MatrixLogo" xml:space="preserve">
<value>Logo ROG</value>
</data>
<data name="MatrixMedium" xml:space="preserve">
<value>Médio</value>
</data>
<data name="MatrixOff" xml:space="preserve">
<value>Desligado</value>
</data>
<data name="MatrixPicture" xml:space="preserve">
<value>Imagem</value>
</data>
<data name="MaxRefreshTooltip" xml:space="preserve">
<value>Taxa de atualização maxíma para abaixar a latência</value>
</data>
<data name="MinRefreshTooltip" xml:space="preserve">
<value>Taxa de atualização à 60Hz para salvar energía</value>
</data>
<data name="Multizone" xml:space="preserve">
<value>Multizona</value>
</data>
<data name="OpenGHelper" xml:space="preserve">
<value>Abrir G-Helper</value>
</data>
<data name="Optimized" xml:space="preserve">
<value>Otimizado</value>
</data>
<data name="OptimizedGPUTooltip" xml:space="preserve">
<value>Passar ao Ecônomico em bateria e voltar quando carregando</value>
</data>
<data name="OptimizedUSBC" xml:space="preserve">
<value>Manter o GPU desligado com um carregador USB-C no Modo Otimizado</value>
</data>
<data name="Other" xml:space="preserve">
<value>Outro</value>
</data>
<data name="Overdrive" xml:space="preserve">
<value>Overdrive</value>
</data>
<data name="PerformanceMode" xml:space="preserve">
<value>Modo Desempenho</value>
</data>
<data name="PictureGif" xml:space="preserve">
<value>Imagem / Gif</value>
</data>
<data name="PlayPause" xml:space="preserve">
<value>Reproduzir / Pausar</value>
</data>
<data name="PowerLimits" xml:space="preserve">
<value>Limitações de Energia (PPT)</value>
</data>
<data name="PPTExperimental" xml:space="preserve">
<value>Limitações de Energia (PPT) é uma funcionalidade experimental. Usar isso com cuidado </value>
</data>
<data name="PrintScreen" xml:space="preserve">
<value>Captura de tela</value>
</data>
<data name="Quit" xml:space="preserve">
<value>Sair</value>
</data>
<data name="GPUCoreClockOffset" xml:space="preserve">
<value>Aumento da frequência básica</value>
</data>
<data name="GPUMemoryClockOffset" xml:space="preserve">
<value>Aumento da frequência da memória</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Combinações de teclas</value>
</data>
<data name="RPM" xml:space="preserve">
<value>RPM</value>
</data>
<data name="RestartGPU" xml:space="preserve">
<value>Algum processo está usando o dGPU e impedindo o modo Econômico. Reinicialize o dGPU no gerenciador de dispositivos. Por favor, proceda por sua conta e risco. </value>
</data>
<data name="RunOnStartup" xml:space="preserve">
<value>Executar ao iniciar</value>
</data>
<data name="Shutdown" xml:space="preserve">
<value>Desligar</value>
</data>
<data name="Silent" xml:space="preserve">
<value>Silencioso</value>
</data>
<data name="Sleep" xml:space="preserve">
<value>Hibernação</value>
</data>
<data name="StandardGPUTooltip" xml:space="preserve">
<value>Liga o dGPU para uso padrão</value>
</data>
<data name="StandardMode" xml:space="preserve">
<value>Padrão</value>
</data>
<data name="StartupError" xml:space="preserve">
<value>Erro ao iniciar</value>
</data>
<data name="ToggleAura" xml:space="preserve">
<value>Alternar Aura</value>
</data>
<data name="ToggleMiniled" xml:space="preserve">
<value>Alternar Miniled (se suportado) </value>
</data>
<data name="ToggleScreen" xml:space="preserve">
<value>Alternar Tela</value>
</data>
<data name="Turbo" xml:space="preserve">
<value>Turbo</value>
</data>
<data name="TurnedOff" xml:space="preserve">
<value>Desligado</value>
</data>
<data name="TurnOffOnBattery" xml:space="preserve">
<value>Desligar em bateria</value>
</data>
<data name="UltimateGPUTooltip" xml:space="preserve">
<value>Direciona a tela do computador ao dGPU</value>
</data>
<data name="UltimateMode" xml:space="preserve">
<value>Ultimate</value>
</data>
<data name="VersionLabel" xml:space="preserve">
<value>Versão</value>
</data>
<data name="VolumeMute" xml:space="preserve">
<value>Mudo</value>
</data>
<data name="WindowTop" xml:space="preserve">
<value>Manter o app em primeiro plano</value>
</data>
</root>

View File

@@ -153,6 +153,9 @@
<data name="ApplyPowerLimits" xml:space="preserve">
<value>Apply Power Limits</value>
</data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Auto adjust Windows Power Mode</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Breathe</value>
</data>
@@ -186,6 +189,9 @@
<data name="Awake" xml:space="preserve">
<value>Awake</value>
</data>
<data name="BacklightTimeout" xml:space="preserve">
<value>Seconds to turn off backlight on battery</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>Balanced</value>
</data>
@@ -252,12 +258,24 @@
<data name="FansAndPower" xml:space="preserve">
<value>Fans and Power</value>
</data>
<data name="FanSpeed" xml:space="preserve">
<value> Fan: </value>
</data>
<data name="FansPower" xml:space="preserve">
<value>Fans + Power</value>
</data>
<data name="GPUBoost" xml:space="preserve">
<value>Dynamic Boost</value>
</data>
<data name="GPUChanging" xml:space="preserve">
<value>Changing</value>
</data>
<data name="GPUCoreClockOffset" xml:space="preserve">
<value>Core Clock Offset</value>
</data>
<data name="GPUMemoryClockOffset" xml:space="preserve">
<value>Memory Clock Offset</value>
</data>
<data name="GPUMode" xml:space="preserve">
<value>GPU Mode</value>
</data>
@@ -273,6 +291,9 @@
<data name="GPUSettings" xml:space="preserve">
<value>GPU Settings</value>
</data>
<data name="GPUTempTarget" xml:space="preserve">
<value>Temperature Target</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>Key Bindings</value>
</data>
@@ -300,6 +321,9 @@
<data name="Logo" xml:space="preserve">
<value>Logo</value>
</data>
<data name="MatrixAudio" xml:space="preserve">
<value>Audio Visualizer</value>
</data>
<data name="MatrixBanner" xml:space="preserve">
<value>Binary Banner</value>
</data>

View File

@@ -153,6 +153,9 @@
<data name="ApplyPowerLimits" xml:space="preserve">
<value>Güç Sınırlarını Uygula</value>
</data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Auto adjust Windows Power Mode</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Nefes</value>
</data>

View File

@@ -153,6 +153,9 @@
<data name="ApplyPowerLimits" xml:space="preserve">
<value>Застосувати потужність</value>
</data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Автоматично застосовувати Windows Power Mode</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>Дихання</value>
</data>

View File

@@ -153,6 +153,9 @@
<data name="ApplyPowerLimits" xml:space="preserve">
<value>应用功率限制</value>
</data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>自动调整Windows电源模式</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>呼吸</value>
</data>
@@ -408,4 +411,4 @@
<data name="WindowTop" xml:space="preserve">
<value>窗口置顶</value>
</data>
</root>
</root>

View File

@@ -153,6 +153,9 @@
<data name="ApplyPowerLimits" xml:space="preserve">
<value>套用功率限制</value>
</data>
<data name="ApplyWindowsPowerPlan" xml:space="preserve">
<value>Auto Adjust Windows Power Mode</value>
</data>
<data name="AuraBreathe" xml:space="preserve">
<value>呼吸</value>
</data>

View File

@@ -185,7 +185,7 @@ namespace GHelper
comboMatrixRunning.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
comboMatrixRunning.FormattingEnabled = true;
comboMatrixRunning.ItemHeight = 32;
comboMatrixRunning.Items.AddRange(new object[] { Properties.Strings.MatrixBanner, Properties.Strings.MatrixLogo, Properties.Strings.MatrixPicture, Properties.Strings.MatrixClock });
comboMatrixRunning.Items.AddRange(new object[] { Properties.Strings.MatrixBanner, Properties.Strings.MatrixLogo, Properties.Strings.MatrixPicture, Properties.Strings.MatrixClock, Properties.Strings.MatrixAudio });
comboMatrixRunning.Location = new Point(261, 10);
comboMatrixRunning.Margin = new Padding(4, 10, 4, 8);
comboMatrixRunning.Name = "comboMatrixRunning";
@@ -267,24 +267,25 @@ namespace GHelper
labelModel.Anchor = AnchorStyles.Top | AnchorStyles.Right;
labelModel.Font = new Font("Segoe UI", 9F, FontStyle.Regular, GraphicsUnit.Point);
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.Name = "labelModel";
labelModel.Size = new Size(492, 32);
labelModel.Size = new Size(400, 32);
labelModel.TabIndex = 38;
labelModel.TextAlign = ContentAlignment.TopRight;
//
// labelVersion
//
labelVersion.AutoSize = true;
labelVersion.AutoSize = false;
labelVersion.Font = new Font("Segoe UI", 9F, FontStyle.Underline, GraphicsUnit.Point);
labelVersion.ForeColor = SystemColors.ControlDark;
labelVersion.Location = new Point(25, 119);
labelVersion.Margin = new Padding(8, 0, 8, 0);
labelVersion.Name = "labelVersion";
labelVersion.Size = new Size(44, 32);
labelVersion.Size = new Size(300, 32);
labelVersion.TabIndex = 37;
labelVersion.Text = "v.0";
labelVersion.Cursor = Cursors.Hand;
//
// labelBattery
//

View File

@@ -1,8 +1,13 @@
using CustomControls;
using GHelper.AnimeMatrix;
using GHelper.Gpu;
using NAudio.CoreAudioApi;
using NAudio.Wave;
using Starlight.AnimeMatrix;
using System.Diagnostics;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Net;
using System.Reflection;
using System.Text.Json;
using System.Timers;
@@ -20,16 +25,15 @@ namespace GHelper
public static System.Timers.Timer aTimer = default!;
public static Point trayPoint;
static System.Timers.Timer matrixTimer = default!;
public string versionUrl = "http://github.com/seerge/g-helper/releases";
public string perfName = "Balanced";
public AniMatrix matrix;
public Fans fans;
public Extra keyb;
static AnimeMatrixDevice mat;
static long lastRefresh;
private bool customFans = false;
@@ -158,7 +162,7 @@ namespace GHelper
contextMenuStrip.Items.Clear();
Padding padding = new Padding(15,5,5,5);
Padding padding = new Padding(15, 5, 5, 5);
/*
TableLayoutPanel[] tables = { tablePerf, tableGPU };
@@ -294,10 +298,20 @@ namespace GHelper
var gitVersion = new Version(tag);
var appVersion = new Version(Assembly.GetExecutingAssembly().GetName().Version.ToString());
//appVersion = new Version("0.50.0.0");
if (gitVersion.CompareTo(appVersion) > 0)
{
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
{
@@ -314,6 +328,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; Remove-Item {zipLocation} -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)
{
Program.settingsForm.RefreshSensors();
@@ -419,22 +484,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)
{
@@ -456,84 +507,9 @@ namespace GHelper
if (sender is null) return;
CheckBox check = (CheckBox)sender;
Program.config.setConfig("matrix_auto", check.Checked ? 1 : 0);
matrix?.SetMatrix();
}
private static void StartMatrixTimer(int interval = 100)
{
matrixTimer.Interval = interval;
matrixTimer.Enabled = true;
}
private static void StopMatrixTimer()
{
matrixTimer.Enabled = false;
}
private static void MatrixTimer_Elapsed(object? sender, ElapsedEventArgs e)
{
if (mat is null) return;
switch (Program.config.getConfig("matrix_running"))
{
case 2:
mat.PresentNextFrame();
break;
case 3:
mat.PresentClock();
break;
}
}
void SetMatrixPicture(string fileName)
{
if (mat is null) return;
StopMatrixTimer();
Image image;
try
{
using (var fs = new FileStream(fileName, FileMode.Open))
{
var ms = new MemoryStream();
fs.CopyTo(ms);
ms.Position = 0;
image = Image.FromStream(ms);
}
}
catch
{
Debug.WriteLine("Error loading picture");
return;
}
mat.SetBuiltInAnimation(false);
mat.ClearFrames();
FrameDimension dimension = new FrameDimension(image.FrameDimensionsList[0]);
int frameCount = image.GetFrameCount(dimension);
if (frameCount > 1)
{
for (int i = 0; i < frameCount; i++)
{
image.SelectActiveFrame(dimension, i);
mat.GenerateFrame(image);
mat.AddFrame();
}
StartMatrixTimer();
Logger.WriteLine("Matrix GIF " + fileName);
}
else
{
mat.GenerateFrame(image);
mat.Present();
Logger.WriteLine("Matrix " + fileName);
}
}
private void ButtonMatrix_Click(object? sender, EventArgs e)
@@ -560,7 +536,7 @@ namespace GHelper
Program.config.setConfig("matrix_picture", fileName);
Program.config.setConfig("matrix_running", 2);
SetMatrixPicture(fileName);
matrix?.SetMatrixPicture(fileName);
BeginInvoke(delegate
{
comboMatrixRunning.SelectedIndex = 2;
@@ -573,72 +549,16 @@ namespace GHelper
private void ComboMatrixRunning_SelectedValueChanged(object? sender, EventArgs e)
{
Program.config.setConfig("matrix_running", comboMatrixRunning.SelectedIndex);
SetMatrix();
matrix?.SetMatrix();
}
private void ComboMatrix_SelectedValueChanged(object? sender, EventArgs e)
{
Program.config.setConfig("matrix_brightness", comboMatrix.SelectedIndex);
SetMatrix();
matrix?.SetMatrix();
}
public void SetMatrix()
{
if (mat is null) return;
int brightness = Program.config.getConfig("matrix_brightness");
int running = Program.config.getConfig("matrix_running");
bool auto = Program.config.getConfig("matrix_auto") == 1;
if (brightness < 0) brightness = 0;
if (running < 0) running = 0;
BuiltInAnimation animation = new BuiltInAnimation(
(BuiltInAnimation.Running)running,
BuiltInAnimation.Sleeping.Starfield,
BuiltInAnimation.Shutdown.SeeYa,
BuiltInAnimation.Startup.StaticEmergence
);
StopMatrixTimer();
mat.SetProvider();
if (brightness == 0 || (auto && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online))
{
mat.SetDisplayState(false);
Logger.WriteLine("Matrix Off");
}
else
{
mat.SetDisplayState(true);
mat.SetBrightness((BrightnessMode)brightness);
switch (running)
{
case 2:
SetMatrixPicture(Program.config.getConfigString("matrix_picture"));
break;
case 3:
mat.SetBuiltInAnimation(false);
StartMatrixTimer(1000);
Logger.WriteLine("Matrix Clock");
break;
default:
mat.SetBuiltInAnimation(true, animation);
Logger.WriteLine("Matrix builtin " + animation.AsByte);
break;
}
//mat.SetBrightness((BrightnessMode)brightness);
}
}
private void LabelCPUFan_Click(object? sender, EventArgs e)
{
@@ -737,13 +657,9 @@ namespace GHelper
public void InitMatrix()
{
try
{
mat = new AnimeMatrixDevice();
matrixTimer = new System.Timers.Timer(100);
matrixTimer.Elapsed += MatrixTimer_Elapsed;
}
catch
matrix = new AniMatrix();
if (matrix is null)
{
panelMatrix.Visible = false;
return;
@@ -1238,11 +1154,13 @@ namespace GHelper
AutoFans();
AutoPower(1000);
if (Program.config.getConfigPerfString("scheme") is not null)
NativeMethods.SetPowerScheme(Program.config.getConfigPerfString("scheme"));
else
NativeMethods.SetPowerScheme(PerformanceMode);
if (Program.config.getConfig("auto_apply_power_plan") != 0)
{
if (Program.config.getConfigPerfString("scheme") is not null)
NativeMethods.SetPowerScheme(Program.config.getConfigPerfString("scheme"));
else
NativeMethods.SetPowerScheme(PerformanceMode);
}
if (Program.config.getConfigPerf("auto_boost") != -1)
{
@@ -1695,7 +1613,8 @@ namespace GHelper
try
{
OptimizationService.SetChargeLimit(limit);
} catch (Exception ex)
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}

View File

@@ -20,7 +20,7 @@ Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix
## [:floppy_disk: Download App](https://github.com/seerge/g-helper/releases/latest/download/GHelper.zip)
If you like this app, please [star :star: it on Github](https://github.com/seerge/g-helper) and spread a word about it!
### [:euro: Donate EUR](https://www.paypal.com/donate/?hosted_button_id=4HMSHS4EBQWTA) | [💵 Donate USD](https://www.paypal.com/donate/?hosted_button_id=SRM6QUX6ACXDY)
### [:euro: Donate EUR](https://www.paypal.com/donate/?hosted_button_id=4HMSHS4EBQWTA) | [💵 Donate USD](https://www.paypal.com/donate/?hosted_button_id=SRM6QUX6ACXDY) | [:coin: Donate via Stripe](https://buy.stripe.com/00gaFJ9Lf79v7WobII)
_If you post about the app - please include a link. Thanks._
@@ -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.
- 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.
@@ -199,9 +201,13 @@ Full list of keycodes https://learn.microsoft.com/en-us/windows/win32/inputdev/v
Some people reported that on G15 model bios can be bugged and either not turn on or not turn off fans, when you set custom fan curve (in Armoury or g-helper, or any other app)
I have added a very optional workaround as it was asked, on launch app will try to disable and re-enable dGPU when external monitor is connected, that seems to wake up fans :)
To enable this custom workaround you need to add an extra line in In config.json (under ``%AppData%\GHelper``)
To enable this custom workaround you need to add an extra line in config.json (under ``%AppData%\GHelper``)
``gpu_reenable : 1,``
### Keybinding to toggle performance modes (on external keyboards)
By default app will toggle performance modes with Ctr+Shift+F5. You can change this binding by adding ``"keybind_profile": 116`` in config.json (under ``%AppData%\GHelper``), where 116 is [numerical code for desired key](https://www.oreilly.com/library/view/javascript-dhtml/9780596514082/apb.html). Put 0 to completely disable this binding.
------------
**Disclaimers**
"ROG", "TUF", and "Armoury Crate" are trademarked by and belong to AsusTek Computer, Inc. I make no claims to these or any assets belonging to AsusTek Computer and use them purely for informational purposes only.