mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
75 Commits
Fan-Calibr
...
v0.125
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8773e26219 | ||
|
|
45cce72af5 | ||
|
|
4a43710d50 | ||
|
|
8c12a230a8 | ||
|
|
50fed1ba2a | ||
|
|
63ba5dc9e8 | ||
|
|
b75d24b4ca | ||
|
|
9488a12dc2 | ||
|
|
701b3a126e | ||
|
|
e3335ef803 | ||
|
|
f16a6248cb | ||
|
|
9c0cd15115 | ||
|
|
524b84fc38 | ||
|
|
3bd59a4c4d | ||
|
|
96f07606f5 | ||
|
|
ea96af51b8 | ||
|
|
0669bcb2d1 | ||
|
|
67a42c4a21 | ||
|
|
de98588235 | ||
|
|
dffb239ea7 | ||
|
|
6a6c1f1455 | ||
|
|
bd3b2647b4 | ||
|
|
cebc42126a | ||
|
|
2985b2f31c | ||
|
|
335f5b38a5 | ||
|
|
4dd9daa95c | ||
|
|
10db075ece | ||
|
|
a800eae020 | ||
|
|
eb21fb2020 | ||
|
|
600e6a9404 | ||
|
|
4b0fbcbf10 | ||
|
|
215aec34b9 | ||
|
|
9cba686a3c | ||
|
|
43a7eb8b32 | ||
|
|
08eb867ae7 | ||
|
|
5c59c34a6c | ||
|
|
ae2dae8a97 | ||
|
|
c06969ba8f | ||
|
|
496d55f88b | ||
|
|
2b16372ec4 | ||
|
|
041aa40a6d | ||
|
|
55c1dd7e16 | ||
|
|
2ec2f669fb | ||
|
|
17ea6157a6 | ||
|
|
d5bdf180a8 | ||
|
|
a7d5ac5de9 | ||
|
|
b103623099 | ||
|
|
751f4d0331 | ||
|
|
1f536d8d84 | ||
|
|
c900121644 | ||
|
|
9ce038fe19 | ||
|
|
1f66038ab9 | ||
|
|
04d2eb53a2 | ||
|
|
f55a3c0824 | ||
|
|
5c5b4f297c | ||
|
|
6f1c2ce7c1 | ||
|
|
e26feb7025 | ||
|
|
fef0042870 | ||
|
|
5a1a303ce7 | ||
|
|
5849dc0ce9 | ||
|
|
31ca13692b | ||
|
|
49cfbc6235 | ||
|
|
b577e5ed90 | ||
|
|
3c9dca0c62 | ||
|
|
818b87fe87 | ||
|
|
e177207799 | ||
|
|
df4cf40a5b | ||
|
|
23082d59ba | ||
|
|
708170b1ef | ||
|
|
3a0131a577 | ||
|
|
d1f4da5473 | ||
|
|
91967638af | ||
|
|
d9a972f6a9 | ||
|
|
ce4c9bb48c | ||
|
|
26c74fa1df |
@@ -271,7 +271,7 @@ public static class AppConfig
|
||||
|
||||
public static bool NoMKeys()
|
||||
{
|
||||
return ContainsModel("Z13") ||
|
||||
return (ContainsModel("Z13") && !IsARCNM()) ||
|
||||
ContainsModel("FX706") ||
|
||||
ContainsModel("FA506") ||
|
||||
ContainsModel("FX506") ||
|
||||
@@ -279,6 +279,11 @@ public static class AppConfig
|
||||
ContainsModel("FX505");
|
||||
}
|
||||
|
||||
public static bool IsARCNM()
|
||||
{
|
||||
return ContainsModel("GZ301VIC");
|
||||
}
|
||||
|
||||
public static bool IsTUF()
|
||||
{
|
||||
return ContainsModel("TUF");
|
||||
@@ -356,6 +361,11 @@ public static class AppConfig
|
||||
ContainsModel("FX507Z");
|
||||
}
|
||||
|
||||
public static bool IsFanScale()
|
||||
{
|
||||
return ContainsModel("GU604");
|
||||
}
|
||||
|
||||
public static bool IsFanRequired()
|
||||
{
|
||||
return ContainsModel("GA402X") || ContainsModel("G513") || ContainsModel("G713R");
|
||||
@@ -368,7 +378,7 @@ public static class AppConfig
|
||||
|
||||
public static bool IsGPUFixNeeded()
|
||||
{
|
||||
return ContainsModel("GA402X") || ContainsModel("GV302") || ContainsModel("FX506") || ContainsModel("GU603V");
|
||||
return ContainsModel("GA402X") || ContainsModel("GV302") || ContainsModel("GZ301") || ContainsModel("FX506") || ContainsModel("GU603V");
|
||||
}
|
||||
|
||||
public static bool IsGPUFix()
|
||||
|
||||
@@ -65,6 +65,7 @@ public class AsusACPI
|
||||
public const uint GPUXG = 0x00090019;
|
||||
|
||||
public const uint GPUMux = 0x00090016;
|
||||
public const uint GPUMuxVivo = 0x00090026;
|
||||
|
||||
public const uint BatteryLimit = 0x00120057;
|
||||
public const uint ScreenOverdrive = 0x00050019;
|
||||
@@ -400,7 +401,9 @@ public class AsusACPI
|
||||
if (curve.All(singleByte => singleByte == 0)) return -1;
|
||||
|
||||
int result;
|
||||
int fanScale = AppConfig.Get("fan_scale", 100);
|
||||
|
||||
int defaultScale = (AppConfig.IsFanScale() && (device == AsusFan.CPU || device == AsusFan.GPU)) ? 130 : 100;
|
||||
int fanScale = AppConfig.Get("fan_scale", defaultScale);
|
||||
|
||||
if (fanScale != 100 && device == AsusFan.CPU) Logger.WriteLine("Custom fan scale: " + fanScale);
|
||||
|
||||
|
||||
@@ -333,13 +333,15 @@ namespace GHelper
|
||||
}
|
||||
|
||||
|
||||
public static void ApplyBrightness(int brightness, string log = "Backlight")
|
||||
public static void ApplyBrightness(int brightness, string log = "Backlight", bool delay = false)
|
||||
{
|
||||
|
||||
|
||||
Task.Run(async () =>
|
||||
{
|
||||
|
||||
if (delay) await Task.Delay(TimeSpan.FromSeconds(1));
|
||||
|
||||
if (isTuf) Program.acpi.TUFKeyboardBrightness(brightness);
|
||||
|
||||
byte[] msg = { AURA_HID_ID, 0xba, 0xc5, 0xc4, (byte)brightness };
|
||||
|
||||
388
app/Display/ScreenCCD.cs
Normal file
388
app/Display/ScreenCCD.cs
Normal file
@@ -0,0 +1,388 @@
|
||||
using System.ComponentModel;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace GHelper.Display
|
||||
{
|
||||
public class ScreenCCD
|
||||
{
|
||||
|
||||
public static bool GetHDRStatus()
|
||||
{
|
||||
var err = GetDisplayConfigBufferSizes(QDC.QDC_ONLY_ACTIVE_PATHS, out var pathCount, out var modeCount);
|
||||
if (err != 0)
|
||||
throw new Win32Exception(err);
|
||||
|
||||
var paths = new DISPLAYCONFIG_PATH_INFO[pathCount];
|
||||
var modes = new DISPLAYCONFIG_MODE_INFO[modeCount];
|
||||
err = QueryDisplayConfig(QDC.QDC_ONLY_ACTIVE_PATHS, ref pathCount, paths, ref modeCount, modes, IntPtr.Zero);
|
||||
if (err != 0)
|
||||
throw new Win32Exception(err);
|
||||
|
||||
string internalName = AppConfig.GetString("internal_display");
|
||||
|
||||
foreach (var path in paths)
|
||||
{
|
||||
// get display name
|
||||
var info = new DISPLAYCONFIG_TARGET_DEVICE_NAME();
|
||||
info.header.type = DISPLAYCONFIG_DEVICE_INFO_TYPE.DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME;
|
||||
info.header.size = Marshal.SizeOf<DISPLAYCONFIG_TARGET_DEVICE_NAME>();
|
||||
info.header.adapterId = path.targetInfo.adapterId;
|
||||
info.header.id = path.targetInfo.id;
|
||||
err = DisplayConfigGetDeviceInfo(ref info);
|
||||
if (err != 0)
|
||||
throw new Win32Exception(err);
|
||||
|
||||
var colorInfo = new DISPLAYCONFIG_GET_ADVANCED_COLOR_INFO();
|
||||
colorInfo.header.type = DISPLAYCONFIG_DEVICE_INFO_TYPE.DISPLAYCONFIG_DEVICE_INFO_GET_ADVANCED_COLOR_INFO;
|
||||
colorInfo.header.size = Marshal.SizeOf<DISPLAYCONFIG_GET_ADVANCED_COLOR_INFO>();
|
||||
colorInfo.header.adapterId = path.targetInfo.adapterId;
|
||||
colorInfo.header.id = path.targetInfo.id;
|
||||
err = DisplayConfigGetDeviceInfo(ref colorInfo);
|
||||
if (err != 0)
|
||||
throw new Win32Exception(err);
|
||||
|
||||
|
||||
if (info.outputTechnology == DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL ||
|
||||
info.outputTechnology == DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED ||
|
||||
info.monitorFriendlyDeviceName == internalName)
|
||||
{
|
||||
Logger.WriteLine(info.monitorFriendlyDeviceName + " HDR: " + colorInfo.advancedColorEnabled);
|
||||
return colorInfo.advancedColorEnabled;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
private enum DISPLAYCONFIG_DEVICE_INFO_TYPE
|
||||
{
|
||||
DISPLAYCONFIG_DEVICE_INFO_GET_SOURCE_NAME = 1,
|
||||
DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_NAME = 2,
|
||||
DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_PREFERRED_MODE = 3,
|
||||
DISPLAYCONFIG_DEVICE_INFO_GET_ADAPTER_NAME = 4,
|
||||
DISPLAYCONFIG_DEVICE_INFO_SET_TARGET_PERSISTENCE = 5,
|
||||
DISPLAYCONFIG_DEVICE_INFO_GET_TARGET_BASE_TYPE = 6,
|
||||
DISPLAYCONFIG_DEVICE_INFO_GET_SUPPORT_VIRTUAL_RESOLUTION = 7,
|
||||
DISPLAYCONFIG_DEVICE_INFO_SET_SUPPORT_VIRTUAL_RESOLUTION = 8,
|
||||
DISPLAYCONFIG_DEVICE_INFO_GET_ADVANCED_COLOR_INFO = 9,
|
||||
DISPLAYCONFIG_DEVICE_INFO_SET_ADVANCED_COLOR_STATE = 10,
|
||||
DISPLAYCONFIG_DEVICE_INFO_GET_SDR_WHITE_LEVEL = 11,
|
||||
}
|
||||
|
||||
private enum DISPLAYCONFIG_COLOR_ENCODING
|
||||
{
|
||||
DISPLAYCONFIG_COLOR_ENCODING_RGB = 0,
|
||||
DISPLAYCONFIG_COLOR_ENCODING_YCBCR444 = 1,
|
||||
DISPLAYCONFIG_COLOR_ENCODING_YCBCR422 = 2,
|
||||
DISPLAYCONFIG_COLOR_ENCODING_YCBCR420 = 3,
|
||||
DISPLAYCONFIG_COLOR_ENCODING_INTENSITY = 4,
|
||||
}
|
||||
|
||||
private enum DISPLAYCONFIG_SCALING
|
||||
{
|
||||
DISPLAYCONFIG_SCALING_IDENTITY = 1,
|
||||
DISPLAYCONFIG_SCALING_CENTERED = 2,
|
||||
DISPLAYCONFIG_SCALING_STRETCHED = 3,
|
||||
DISPLAYCONFIG_SCALING_ASPECTRATIOCENTEREDMAX = 4,
|
||||
DISPLAYCONFIG_SCALING_CUSTOM = 5,
|
||||
DISPLAYCONFIG_SCALING_PREFERRED = 128,
|
||||
}
|
||||
|
||||
private enum DISPLAYCONFIG_ROTATION
|
||||
{
|
||||
DISPLAYCONFIG_ROTATION_IDENTITY = 1,
|
||||
DISPLAYCONFIG_ROTATION_ROTATE90 = 2,
|
||||
DISPLAYCONFIG_ROTATION_ROTATE180 = 3,
|
||||
}
|
||||
|
||||
private enum DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY
|
||||
{
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_OTHER = -1,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HD15 = 0,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SVIDEO = 1,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPOSITE_VIDEO = 2,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_COMPONENT_VIDEO = 3,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DVI = 4,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_HDMI = 5,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_LVDS = 6,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_D_JPN = 8,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDI = 9,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EXTERNAL = 10,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED = 11,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EXTERNAL = 12,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_UDI_EMBEDDED = 13,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_SDTVDONGLE = 14,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_MIRACAST = 15,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INDIRECT_WIRED = 16,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INDIRECT_VIRTUAL = 17,
|
||||
DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL = unchecked((int)0x80000000),
|
||||
}
|
||||
|
||||
private enum DISPLAYCONFIG_TOPOLOGY_ID
|
||||
{
|
||||
DISPLAYCONFIG_TOPOLOGY_INTERNAL = 0x00000001,
|
||||
DISPLAYCONFIG_TOPOLOGY_CLONE = 0x00000002,
|
||||
DISPLAYCONFIG_TOPOLOGY_EXTEND = 0x00000004,
|
||||
DISPLAYCONFIG_TOPOLOGY_EXTERNAL = 0x00000008,
|
||||
}
|
||||
|
||||
private enum DISPLAYCONFIG_PATH
|
||||
{
|
||||
DISPLAYCONFIG_PATH_ACTIVE = 0x00000001,
|
||||
DISPLAYCONFIG_PATH_PREFERRED_UNSCALED = 0x00000004,
|
||||
DISPLAYCONFIG_PATH_SUPPORT_VIRTUAL_MODE = 0x00000008,
|
||||
}
|
||||
|
||||
private enum DISPLAYCONFIG_SOURCE_FLAGS
|
||||
{
|
||||
DISPLAYCONFIG_SOURCE_IN_USE = 0x00000001,
|
||||
}
|
||||
|
||||
private enum DISPLAYCONFIG_TARGET_FLAGS
|
||||
{
|
||||
DISPLAYCONFIG_TARGET_IN_USE = 0x00000001,
|
||||
DISPLAYCONFIG_TARGET_FORCIBLE = 0x00000002,
|
||||
DISPLAYCONFIG_TARGET_FORCED_AVAILABILITY_BOOT = 0x00000004,
|
||||
DISPLAYCONFIG_TARGET_FORCED_AVAILABILITY_PATH = 0x00000008,
|
||||
DISPLAYCONFIG_TARGET_FORCED_AVAILABILITY_SYSTEM = 0x00000010,
|
||||
DISPLAYCONFIG_TARGET_IS_HMD = 0x00000020,
|
||||
}
|
||||
|
||||
private enum QDC
|
||||
{
|
||||
QDC_ALL_PATHS = 0x00000001,
|
||||
QDC_ONLY_ACTIVE_PATHS = 0x00000002,
|
||||
QDC_DATABASE_CURRENT = 0x00000004,
|
||||
QDC_VIRTUAL_MODE_AWARE = 0x00000010,
|
||||
QDC_INCLUDE_HMD = 0x00000020,
|
||||
}
|
||||
|
||||
private enum DISPLAYCONFIG_SCANLINE_ORDERING
|
||||
{
|
||||
DISPLAYCONFIG_SCANLINE_ORDERING_UNSPECIFIED = 0,
|
||||
DISPLAYCONFIG_SCANLINE_ORDERING_PROGRESSIVE = 1,
|
||||
DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED = 2,
|
||||
DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_UPPERFIELDFIRST = DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED,
|
||||
DISPLAYCONFIG_SCANLINE_ORDERING_INTERLACED_LOWERFIELDFIRST = 3,
|
||||
}
|
||||
|
||||
private enum DISPLAYCONFIG_PIXELFORMAT
|
||||
{
|
||||
DISPLAYCONFIG_PIXELFORMAT_8BPP = 1,
|
||||
DISPLAYCONFIG_PIXELFORMAT_16BPP = 2,
|
||||
DISPLAYCONFIG_PIXELFORMAT_24BPP = 3,
|
||||
DISPLAYCONFIG_PIXELFORMAT_32BPP = 4,
|
||||
DISPLAYCONFIG_PIXELFORMAT_NONGDI = 5,
|
||||
}
|
||||
|
||||
private enum DISPLAYCONFIG_MODE_INFO_TYPE
|
||||
{
|
||||
DISPLAYCONFIG_MODE_INFO_TYPE_SOURCE = 1,
|
||||
DISPLAYCONFIG_MODE_INFO_TYPE_TARGET = 2,
|
||||
DISPLAYCONFIG_MODE_INFO_TYPE_DESKTOP_IMAGE = 3,
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct DISPLAYCONFIG_DEVICE_INFO_HEADER
|
||||
{
|
||||
public DISPLAYCONFIG_DEVICE_INFO_TYPE type;
|
||||
public int size;
|
||||
public LUID adapterId;
|
||||
public uint id;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct DISPLAYCONFIG_GET_ADVANCED_COLOR_INFO
|
||||
{
|
||||
public DISPLAYCONFIG_DEVICE_INFO_HEADER header;
|
||||
public uint value;
|
||||
public DISPLAYCONFIG_COLOR_ENCODING colorEncoding;
|
||||
public int bitsPerColorChannel;
|
||||
|
||||
public bool advancedColorSupported => (value & 0x1) == 0x1;
|
||||
public bool advancedColorEnabled => (value & 0x2) == 0x2;
|
||||
public bool wideColorEnforced => (value & 0x4) == 0x4;
|
||||
public bool advancedColorForceDisabled => (value & 0x8) == 0x8;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct POINTL
|
||||
{
|
||||
public int x;
|
||||
public int y;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct LUID
|
||||
{
|
||||
public uint LowPart;
|
||||
public int HighPart;
|
||||
|
||||
public long Value => ((long)HighPart << 32) | LowPart;
|
||||
public override string ToString() => Value.ToString();
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct DISPLAYCONFIG_SOURCE_MODE
|
||||
{
|
||||
public uint width;
|
||||
public uint height;
|
||||
public DISPLAYCONFIG_PIXELFORMAT pixelFormat;
|
||||
public POINTL position;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct DISPLAYCONFIG_RATIONAL
|
||||
{
|
||||
public uint Numerator;
|
||||
public uint Denominator;
|
||||
|
||||
public override string ToString() => Numerator + " / " + Denominator;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct DISPLAYCONFIG_2DREGION
|
||||
{
|
||||
public uint cx;
|
||||
public uint cy;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct DISPLAYCONFIG_DESKTOP_IMAGE_INFO
|
||||
{
|
||||
public POINTL PathSourceSize;
|
||||
public RECT DesktopImageRegion;
|
||||
public RECT DesktopImageClip;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct DISPLAYCONFIG_VIDEO_SIGNAL_INFO
|
||||
{
|
||||
public ulong pixelRate;
|
||||
public DISPLAYCONFIG_RATIONAL hSyncFreq;
|
||||
public DISPLAYCONFIG_RATIONAL vSyncFreq;
|
||||
public DISPLAYCONFIG_2DREGION activeSize;
|
||||
public DISPLAYCONFIG_2DREGION totalSize;
|
||||
public uint videoStandard;
|
||||
public DISPLAYCONFIG_SCANLINE_ORDERING scanLineOrdering;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct DISPLAYCONFIG_TARGET_MODE
|
||||
{
|
||||
public DISPLAYCONFIG_VIDEO_SIGNAL_INFO targetVideoSignalInfo;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Explicit)]
|
||||
private struct DISPLAYCONFIG_MODE_INFO_union
|
||||
{
|
||||
[FieldOffset(0)]
|
||||
public DISPLAYCONFIG_TARGET_MODE targetMode;
|
||||
|
||||
[FieldOffset(0)]
|
||||
public DISPLAYCONFIG_SOURCE_MODE sourceMode;
|
||||
|
||||
[FieldOffset(0)]
|
||||
public DISPLAYCONFIG_DESKTOP_IMAGE_INFO desktopImageInfo;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct DISPLAYCONFIG_PATH_SOURCE_INFO
|
||||
{
|
||||
public LUID adapterId;
|
||||
public uint id;
|
||||
public uint modeInfoIdx;
|
||||
public DISPLAYCONFIG_SOURCE_FLAGS statusFlags;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct DISPLAYCONFIG_PATH_TARGET_INFO
|
||||
{
|
||||
public LUID adapterId;
|
||||
public uint id;
|
||||
public uint modeInfoIdx;
|
||||
public DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY outputTechnology;
|
||||
public DISPLAYCONFIG_ROTATION rotation;
|
||||
public DISPLAYCONFIG_SCALING scaling;
|
||||
public DISPLAYCONFIG_RATIONAL refreshRate;
|
||||
public DISPLAYCONFIG_SCANLINE_ORDERING scanLineOrdering;
|
||||
public bool targetAvailable;
|
||||
public DISPLAYCONFIG_TARGET_FLAGS statusFlags;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct DISPLAYCONFIG_PATH_INFO
|
||||
{
|
||||
public DISPLAYCONFIG_PATH_SOURCE_INFO sourceInfo;
|
||||
public DISPLAYCONFIG_PATH_TARGET_INFO targetInfo;
|
||||
public DISPLAYCONFIG_PATH flags;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct DISPLAYCONFIG_MODE_INFO
|
||||
{
|
||||
public DISPLAYCONFIG_MODE_INFO_TYPE infoType;
|
||||
public uint id;
|
||||
public LUID adapterId;
|
||||
public DISPLAYCONFIG_MODE_INFO_union info;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
||||
private struct DISPLAYCONFIG_SOURCE_DEVICE_NAME
|
||||
{
|
||||
public DISPLAYCONFIG_DEVICE_INFO_HEADER header;
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
|
||||
public string viewGdiDeviceName;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
||||
private struct DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS
|
||||
{
|
||||
public uint value;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
|
||||
private struct DISPLAYCONFIG_TARGET_DEVICE_NAME
|
||||
{
|
||||
public DISPLAYCONFIG_DEVICE_INFO_HEADER header;
|
||||
public DISPLAYCONFIG_TARGET_DEVICE_NAME_FLAGS flags;
|
||||
public DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY outputTechnology;
|
||||
public ushort edidManufactureId;
|
||||
public ushort edidProductCodeId;
|
||||
public uint connectorInstance;
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)]
|
||||
public string monitorFriendlyDeviceName;
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
|
||||
public string monitorDevicePat;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private struct RECT
|
||||
{
|
||||
public int left;
|
||||
public int top;
|
||||
public int right;
|
||||
public int bottom;
|
||||
}
|
||||
|
||||
[DllImport("user32")]
|
||||
private static extern int GetDisplayConfigBufferSizes(QDC flags, out int numPathArrayElements, out int numModeInfoArrayElements);
|
||||
|
||||
[DllImport("user32")]
|
||||
private static extern int QueryDisplayConfig(QDC flags, ref int numPathArrayElements, [In, Out] DISPLAYCONFIG_PATH_INFO[] pathArray, ref int numModeInfoArrayElements, [In, Out] DISPLAYCONFIG_MODE_INFO[] modeInfoArray, out DISPLAYCONFIG_TOPOLOGY_ID currentTopologyId);
|
||||
|
||||
[DllImport("user32")]
|
||||
private static extern int QueryDisplayConfig(QDC flags, ref int numPathArrayElements, [In, Out] DISPLAYCONFIG_PATH_INFO[] pathArray, ref int numModeInfoArrayElements, [In, Out] DISPLAYCONFIG_MODE_INFO[] modeInfoArray, IntPtr currentTopologyId);
|
||||
|
||||
[DllImport("user32")]
|
||||
private static extern int DisplayConfigGetDeviceInfo(ref DISPLAYCONFIG_GET_ADVANCED_COLOR_INFO requestPacket);
|
||||
|
||||
[DllImport("user32")]
|
||||
private static extern int DisplayConfigGetDeviceInfo(ref DISPLAYCONFIG_SOURCE_DEVICE_NAME requestPacket);
|
||||
|
||||
[DllImport("user32")]
|
||||
private static extern int DisplayConfigGetDeviceInfo(ref DISPLAYCONFIG_TARGET_DEVICE_NAME requestPacket);
|
||||
}
|
||||
}
|
||||
@@ -59,7 +59,7 @@ namespace GHelper.Display
|
||||
|
||||
public void ToogleMiniled()
|
||||
{
|
||||
int miniled = (AppConfig.Get("miniled") == 1) ? 0 : 1;
|
||||
int miniled = (Program.acpi.DeviceGet(AsusACPI.ScreenMiniled) == 1) ? 0 : 1;
|
||||
AppConfig.Set("miniled", miniled);
|
||||
SetScreen(-1, -1, miniled);
|
||||
}
|
||||
@@ -77,8 +77,13 @@ namespace GHelper.Display
|
||||
int overdrive = Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive);
|
||||
int miniled = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled);
|
||||
|
||||
bool hdr = false;
|
||||
|
||||
if (miniled >= 0)
|
||||
{
|
||||
AppConfig.Set("miniled", miniled);
|
||||
hdr = ScreenCCD.GetHDRStatus();
|
||||
}
|
||||
|
||||
bool screenEnabled = (frequency >= 0);
|
||||
|
||||
@@ -94,7 +99,8 @@ namespace GHelper.Display
|
||||
maxFrequency: maxFrequency,
|
||||
overdrive: overdrive,
|
||||
overdriveSetting: overdriveSetting,
|
||||
miniled: miniled
|
||||
miniled: miniled,
|
||||
hdr: hdr
|
||||
);
|
||||
});
|
||||
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
using Microsoft.VisualBasic.Logging;
|
||||
using System.Collections;
|
||||
using System.Diagnostics.Metrics;
|
||||
using System.Collections;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows.Forms;
|
||||
using static GHelper.Display.ScreenInterrogatory;
|
||||
|
||||
namespace GHelper.Display
|
||||
|
||||
@@ -137,6 +137,15 @@ namespace GHelper
|
||||
customActions.Add("screenpad_up", Properties.Strings.ScreenPadUp);
|
||||
}
|
||||
|
||||
if (AppConfig.IsARCNM())
|
||||
{
|
||||
labelM3.Text = "FN+F6";
|
||||
labelM1.Visible = comboM1.Visible = textM1.Visible = false;
|
||||
labelM2.Visible = comboM2.Visible = textM2.Visible = false;
|
||||
labelM4.Visible = comboM4.Visible = textM4.Visible = false;
|
||||
labelFNF4.Visible = comboFNF4.Visible = textFNF4.Visible = false;
|
||||
}
|
||||
|
||||
if (AppConfig.NoMKeys())
|
||||
{
|
||||
labelM1.Text = "FN+F2";
|
||||
|
||||
185
app/Fan/FanSensorControl.cs
Normal file
185
app/Fan/FanSensorControl.cs
Normal file
@@ -0,0 +1,185 @@
|
||||
using GHelper.Mode;
|
||||
|
||||
namespace GHelper.Fan
|
||||
{
|
||||
public class FanSensorControl
|
||||
{
|
||||
public const int DEFAULT_FAN_MIN = 18;
|
||||
public const int DEFAULT_FAN_MAX = 58;
|
||||
|
||||
public const int XGM_FAN_MAX = 72;
|
||||
|
||||
public const int INADEQUATE_MAX = 92;
|
||||
|
||||
const int FAN_COUNT = 3;
|
||||
|
||||
Fans fansForm;
|
||||
ModeControl modeControl = Program.modeControl;
|
||||
|
||||
static int[] measuredMax;
|
||||
static int sameCount = 0;
|
||||
|
||||
static System.Timers.Timer timer = default!;
|
||||
|
||||
static int[] _fanMax = InitFanMax();
|
||||
static bool _fanRpm = AppConfig.IsNotFalse("fan_rpm");
|
||||
|
||||
public FanSensorControl(Fans fansForm)
|
||||
{
|
||||
this.fansForm = fansForm;
|
||||
timer = new System.Timers.Timer(1000);
|
||||
timer.Elapsed += Timer_Elapsed;
|
||||
}
|
||||
|
||||
static int[] InitFanMax()
|
||||
{
|
||||
int[] defaultMax = GetDefaultMax();
|
||||
|
||||
return new int[3] {
|
||||
AppConfig.Get("fan_max_" + (int)AsusFan.CPU, defaultMax[(int)AsusFan.CPU]),
|
||||
AppConfig.Get("fan_max_" + (int)AsusFan.GPU, defaultMax[(int)AsusFan.GPU]),
|
||||
AppConfig.Get("fan_max_" + (int)AsusFan.Mid, defaultMax[(int)AsusFan.Mid])
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
static int[] GetDefaultMax()
|
||||
{
|
||||
if (AppConfig.ContainsModel("GA401I")) return new int[3] { 78, 76, DEFAULT_FAN_MAX };
|
||||
if (AppConfig.ContainsModel("GA401")) return new int[3] { 71, 73, DEFAULT_FAN_MAX };
|
||||
if (AppConfig.ContainsModel("GA402")) return new int[3] { 55, 56, DEFAULT_FAN_MAX };
|
||||
|
||||
if (AppConfig.ContainsModel("G513R")) return new int[3] { 58, 60, DEFAULT_FAN_MAX };
|
||||
if (AppConfig.ContainsModel("G513Q")) return new int[3] { 69, 69, DEFAULT_FAN_MAX };
|
||||
if (AppConfig.ContainsModel("GA503")) return new int[3] { 64, 64, DEFAULT_FAN_MAX };
|
||||
|
||||
if (AppConfig.ContainsModel("GU603")) return new int[3] { 62, 64, DEFAULT_FAN_MAX };
|
||||
|
||||
if (AppConfig.ContainsModel("FA507R")) return new int[3] { 63, 57, DEFAULT_FAN_MAX };
|
||||
if (AppConfig.ContainsModel("FA507X")) return new int[3] { 63, 68, DEFAULT_FAN_MAX };
|
||||
|
||||
if (AppConfig.ContainsModel("GX650")) return new int[3] { 62, 62, DEFAULT_FAN_MAX };
|
||||
|
||||
if (AppConfig.ContainsModel("G732")) return new int[3] { 61, 60, DEFAULT_FAN_MAX };
|
||||
if (AppConfig.ContainsModel("G713")) return new int[3] { 56, 60, DEFAULT_FAN_MAX };
|
||||
|
||||
if (AppConfig.ContainsModel("Z301")) return new int[3] { 72, 64, DEFAULT_FAN_MAX };
|
||||
|
||||
if (AppConfig.ContainsModel("GV601")) return new int[3] { 78, 59, 85 };
|
||||
|
||||
return new int[3] { DEFAULT_FAN_MAX, DEFAULT_FAN_MAX, DEFAULT_FAN_MAX };
|
||||
}
|
||||
|
||||
public static int GetFanMax(AsusFan device)
|
||||
{
|
||||
if (device == AsusFan.XGM) return XGM_FAN_MAX;
|
||||
|
||||
if (_fanMax[(int)device] < 0 || _fanMax[(int)device] > INADEQUATE_MAX)
|
||||
SetFanMax(device, DEFAULT_FAN_MAX);
|
||||
|
||||
return _fanMax[(int)device];
|
||||
}
|
||||
|
||||
public static void SetFanMax(AsusFan device, int value)
|
||||
{
|
||||
_fanMax[(int)device] = value;
|
||||
AppConfig.Set("fan_max_" + (int)device, value);
|
||||
}
|
||||
|
||||
public static bool fanRpm
|
||||
{
|
||||
get
|
||||
{
|
||||
return _fanRpm;
|
||||
}
|
||||
set
|
||||
{
|
||||
AppConfig.Set("fan_rpm", value ? 1 : 0);
|
||||
_fanRpm = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static string FormatFan(AsusFan device, int value)
|
||||
{
|
||||
if (value < 0) return null;
|
||||
|
||||
if (value > GetFanMax(device) && value <= INADEQUATE_MAX) SetFanMax(device, value);
|
||||
|
||||
if (fanRpm)
|
||||
return Properties.Strings.FanSpeed + ": " + (value * 100).ToString() + "RPM";
|
||||
else
|
||||
return Properties.Strings.FanSpeed + ": " + Math.Min(Math.Round((float)value / GetFanMax(device) * 100), 100).ToString() + "%"; // relatively to max RPM
|
||||
}
|
||||
|
||||
public void StartCalibration()
|
||||
{
|
||||
|
||||
measuredMax = new int[] { 0, 0, 0 };
|
||||
timer.Enabled = true;
|
||||
|
||||
for (int i = 0; i < FAN_COUNT; i++)
|
||||
AppConfig.Remove("fan_max_" + i);
|
||||
|
||||
Program.acpi.DeviceSet(AsusACPI.PerformanceMode, AsusACPI.PerformanceTurbo, "ModeCalibration");
|
||||
|
||||
for (int i = 0; i < FAN_COUNT; i++)
|
||||
Program.acpi.SetFanCurve((AsusFan)i, new byte[] { 20, 30, 40, 50, 60, 70, 80, 90, 100, 100, 100, 100, 100, 100, 100, 100 });
|
||||
|
||||
}
|
||||
|
||||
private void Timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
|
||||
{
|
||||
int fan;
|
||||
bool same = true;
|
||||
|
||||
for (int i = 0; i < FAN_COUNT; i++)
|
||||
{
|
||||
fan = Program.acpi.GetFan((AsusFan)i);
|
||||
if (fan > measuredMax[i])
|
||||
{
|
||||
measuredMax[i] = fan;
|
||||
same = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (same) sameCount++;
|
||||
else sameCount = 0;
|
||||
|
||||
string label = "Measuring Max Speed - CPU: " + measuredMax[(int)AsusFan.CPU] * 100 + ", GPU: " + measuredMax[(int)AsusFan.GPU] * 100;
|
||||
if (measuredMax[(int)AsusFan.Mid] > 10) label = label + ", Mid: " + measuredMax[(int)AsusFan.Mid] * 100;
|
||||
label = label + " (" + sameCount + "s)";
|
||||
|
||||
fansForm.LabelFansResult(label);
|
||||
|
||||
if (sameCount >= 15)
|
||||
{
|
||||
for (int i = 0; i < FAN_COUNT; i++)
|
||||
{
|
||||
if (measuredMax[i] > 30 && measuredMax[i] < INADEQUATE_MAX) SetFanMax((AsusFan)i, measuredMax[i]);
|
||||
}
|
||||
|
||||
sameCount = 0;
|
||||
FinishCalibration();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void FinishCalibration()
|
||||
{
|
||||
|
||||
timer.Enabled = false;
|
||||
modeControl.SetPerformanceMode();
|
||||
|
||||
string label = "Measured - CPU: " + AppConfig.Get("fan_max_" + (int)AsusFan.CPU) * 100;
|
||||
|
||||
if (AppConfig.Get("fan_max_" + (int)AsusFan.GPU) > 0)
|
||||
label = label + ", GPU: " + AppConfig.Get("fan_max_" + (int)AsusFan.GPU) * 100;
|
||||
|
||||
if (AppConfig.Get("fan_max_" + (int)AsusFan.Mid) > 0)
|
||||
label = label + ", Mid: " + AppConfig.Get("fan_max_" + (int)AsusFan.Mid) * 100;
|
||||
|
||||
fansForm.LabelFansResult(label);
|
||||
fansForm.InitAxis();
|
||||
}
|
||||
}
|
||||
}
|
||||
4
app/Fans.Designer.cs
generated
4
app/Fans.Designer.cs
generated
@@ -430,7 +430,7 @@ namespace GHelper
|
||||
buttonCalibrate.BorderColor = Color.Transparent;
|
||||
buttonCalibrate.BorderRadius = 2;
|
||||
buttonCalibrate.FlatStyle = FlatStyle.Flat;
|
||||
buttonCalibrate.Location = new Point(239, 40);
|
||||
buttonCalibrate.Location = new Point(275, 40);
|
||||
buttonCalibrate.Margin = new Padding(4, 2, 4, 2);
|
||||
buttonCalibrate.Name = "buttonCalibrate";
|
||||
buttonCalibrate.Secondary = true;
|
||||
@@ -476,7 +476,7 @@ namespace GHelper
|
||||
buttonReset.Margin = new Padding(4, 2, 4, 2);
|
||||
buttonReset.Name = "buttonReset";
|
||||
buttonReset.Secondary = true;
|
||||
buttonReset.Size = new Size(216, 50);
|
||||
buttonReset.Size = new Size(252, 50);
|
||||
buttonReset.TabIndex = 18;
|
||||
buttonReset.Text = Properties.Strings.FactoryDefaults;
|
||||
buttonReset.UseVisualStyleBackColor = false;
|
||||
|
||||
119
app/Fans.cs
119
app/Fans.cs
@@ -1,4 +1,5 @@
|
||||
using GHelper.Gpu.NVidia;
|
||||
using GHelper.Fan;
|
||||
using GHelper.Gpu.NVidia;
|
||||
using GHelper.Mode;
|
||||
using GHelper.UI;
|
||||
using Ryzen;
|
||||
@@ -26,13 +27,15 @@ namespace GHelper
|
||||
NvidiaGpuControl? nvControl = null;
|
||||
ModeControl modeControl = Program.modeControl;
|
||||
|
||||
public static System.Timers.Timer timer = default!;
|
||||
FanSensorControl fanSensorControl;
|
||||
|
||||
public Fans()
|
||||
{
|
||||
|
||||
InitializeComponent();
|
||||
|
||||
fanSensorControl = new FanSensorControl(this);
|
||||
|
||||
//float dpi = ControlHelper.GetDpiScale(this).Value;
|
||||
//comboModes.Size = new Size(comboModes.Width, (int)dpi * 18);
|
||||
comboModes.ClientSize = new Size(comboModes.Width, comboModes.Height - 4);
|
||||
@@ -200,96 +203,22 @@ namespace GHelper
|
||||
|
||||
checkApplyUV.Click += CheckApplyUV_Click;
|
||||
|
||||
timer = new System.Timers.Timer(1000);
|
||||
timer.Elapsed += Timer_Elapsed;
|
||||
buttonCalibrate.Click += ButtonCalibrate_Click;
|
||||
|
||||
ToggleNavigation(0);
|
||||
|
||||
if (Program.acpi.DeviceGet(AsusACPI.DevsCPUFanCurve) < 0) buttonCalibrate.Visible = false;
|
||||
|
||||
FormClosed += Fans_FormClosed;
|
||||
|
||||
}
|
||||
|
||||
const int FAN_COUNT = 3;
|
||||
static int[] fanMax;
|
||||
static int sameCount = 0;
|
||||
|
||||
private void Timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
|
||||
{
|
||||
int fan;
|
||||
bool same = true;
|
||||
|
||||
for (int i = 0; i < FAN_COUNT; i++)
|
||||
{
|
||||
fan = Program.acpi.GetFan((AsusFan)i);
|
||||
if (fan > fanMax[i])
|
||||
{
|
||||
fanMax[i] = fan;
|
||||
same = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (same) sameCount++;
|
||||
else sameCount = 0;
|
||||
|
||||
LabelFansResult("Max Speed - CPU: " + fanMax[(int)AsusFan.CPU] * 100 + ", GPU: " + fanMax[(int)AsusFan.GPU] * 100 + " (" + sameCount + "s)");
|
||||
|
||||
if (sameCount >= 15)
|
||||
{
|
||||
for (int i = 0; i < FAN_COUNT; i++)
|
||||
{
|
||||
if (fanMax[i] > 30 && fanMax[i] < 80) AppConfig.Set("fan_max_" + i, fanMax[i]);
|
||||
}
|
||||
|
||||
sameCount = 0;
|
||||
CalibrateNext();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void CalibrateNext()
|
||||
{
|
||||
|
||||
timer.Enabled = false;
|
||||
modeControl.SetPerformanceMode();
|
||||
|
||||
string label = "Measured - CPU: " + AppConfig.Get("fan_max_" + (int)AsusFan.CPU) * 100;
|
||||
|
||||
if (AppConfig.Get("fan_max_" + (int)AsusFan.GPU) > 0)
|
||||
label = label + ", GPU: " + AppConfig.Get("fan_max_" + (int)AsusFan.GPU) * 100;
|
||||
|
||||
if (AppConfig.Get("fan_max_" + (int)AsusFan.Mid) > 0)
|
||||
label = label + ", Mid: " + AppConfig.Get("fan_max_" + (int)AsusFan.Mid) * 100;
|
||||
|
||||
LabelFansResult(label);
|
||||
|
||||
Invoke(delegate
|
||||
{
|
||||
buttonCalibrate.Enabled = true;
|
||||
SetAxis(chartCPU, AsusFan.CPU);
|
||||
SetAxis(chartGPU, AsusFan.GPU);
|
||||
if (chartMid.Visible) SetAxis(chartMid, AsusFan.Mid);
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void ButtonCalibrate_Click(object? sender, EventArgs e)
|
||||
{
|
||||
fanMax = new int[] { 0, 0, 0 };
|
||||
|
||||
buttonCalibrate.Enabled = false;
|
||||
timer.Enabled = true;
|
||||
|
||||
for (int i = 0; i < FAN_COUNT; i++)
|
||||
{
|
||||
AppConfig.Remove("fan_max_" + i);
|
||||
}
|
||||
|
||||
Program.acpi.DeviceSet(AsusACPI.PerformanceMode, AsusACPI.PerformanceTurbo, "ModeCalibration");
|
||||
|
||||
for (int i = 0; i < FAN_COUNT; i++)
|
||||
Program.acpi.SetFanCurve((AsusFan)i, new byte[] { 20, 30, 40, 50, 60, 70, 80, 90, 100, 100, 100, 100, 100, 100, 100, 100 });
|
||||
fanSensorControl.StartCalibration();
|
||||
}
|
||||
|
||||
private void ChartCPU_MouseClick(object? sender, MouseEventArgs e)
|
||||
@@ -660,10 +589,8 @@ namespace GHelper
|
||||
{
|
||||
if (percentage == 0) return "OFF";
|
||||
|
||||
int Min = HardwareControl.DEFAULT_FAN_MIN;
|
||||
int Max = AppConfig.Get("fan_max_" + (int)device, HardwareControl.DEFAULT_FAN_MAX);
|
||||
|
||||
if (device == AsusFan.XGM) Max = 72;
|
||||
int Min = FanSensorControl.DEFAULT_FAN_MIN;
|
||||
int Max = FanSensorControl.GetFanMax(device);
|
||||
|
||||
if (fanRpm)
|
||||
return (200 * Math.Round((float)(Min * 100 + (Max - Min) * percentage) / 200)).ToString() + unit;
|
||||
@@ -765,7 +692,14 @@ namespace GHelper
|
||||
comboBoost.SelectedIndex = Math.Min(boost, comboBoost.Items.Count - 1);
|
||||
|
||||
string powerMode = PowerNative.GetPowerMode();
|
||||
comboPowerMode.SelectedValue = powerMode;
|
||||
bool batterySaver = PowerNative.GetBatterySaverStatus();
|
||||
|
||||
comboPowerMode.Enabled = !batterySaver;
|
||||
|
||||
if (batterySaver)
|
||||
comboPowerMode.SelectedIndex = 0;
|
||||
else
|
||||
comboPowerMode.SelectedValue = powerMode;
|
||||
|
||||
}
|
||||
|
||||
@@ -809,9 +743,25 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
public void InitAxis()
|
||||
{
|
||||
if (this == null || this.Text == "") return;
|
||||
|
||||
Invoke(delegate
|
||||
{
|
||||
buttonCalibrate.Enabled = true;
|
||||
SetAxis(chartCPU, AsusFan.CPU);
|
||||
SetAxis(chartGPU, AsusFan.GPU);
|
||||
if (chartMid.Visible) SetAxis(chartMid, AsusFan.Mid);
|
||||
});
|
||||
}
|
||||
|
||||
public void LabelFansResult(string text)
|
||||
{
|
||||
if (text.Length > 0) Logger.WriteLine(text);
|
||||
|
||||
if (this == null || this.Text == "") return;
|
||||
|
||||
Invoke(delegate
|
||||
{
|
||||
labelFansResult.Text = text;
|
||||
@@ -821,7 +771,6 @@ namespace GHelper
|
||||
|
||||
private void Fans_FormClosing(object? sender, FormClosingEventArgs e)
|
||||
{
|
||||
|
||||
/*
|
||||
if (e.CloseReason == CloseReason.UserClosing)
|
||||
{
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
<AssemblyVersion>0.120</AssemblyVersion>
|
||||
<AssemblyVersion>0.125</AssemblyVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
||||
@@ -24,9 +24,13 @@ namespace GHelper.Gpu
|
||||
int eco = Program.acpi.DeviceGet(AsusACPI.GPUEco);
|
||||
int mux = Program.acpi.DeviceGet(AsusACPI.GPUMux);
|
||||
|
||||
if (mux < 0) mux = Program.acpi.DeviceGet(AsusACPI.GPUMuxVivo);
|
||||
|
||||
Logger.WriteLine("Eco flag : " + eco);
|
||||
Logger.WriteLine("Mux flag : " + mux);
|
||||
|
||||
settings.VisualiseGPUButtons(eco >= 0, mux >= 0);
|
||||
|
||||
if (mux == 0)
|
||||
{
|
||||
gpuMode = AsusACPI.GPUModeUltimate;
|
||||
@@ -38,9 +42,6 @@ namespace GHelper.Gpu
|
||||
else
|
||||
gpuMode = AsusACPI.GPUModeStandard;
|
||||
|
||||
// Ultimate mode not supported
|
||||
if (mux != 1) settings.HideUltimateMode();
|
||||
|
||||
// GPU mode not supported
|
||||
if (eco < 0 && mux < 0)
|
||||
{
|
||||
@@ -73,12 +74,15 @@ namespace GHelper.Gpu
|
||||
var restart = false;
|
||||
var changed = false;
|
||||
|
||||
int status;
|
||||
|
||||
if (CurrentGPU == AsusACPI.GPUModeUltimate)
|
||||
{
|
||||
DialogResult dialogResult = MessageBox.Show(Properties.Strings.AlertUltimateOff, Properties.Strings.AlertUltimateTitle, MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
Program.acpi.DeviceSet(AsusACPI.GPUMux, 1, "GPUMux");
|
||||
status = Program.acpi.DeviceSet(AsusACPI.GPUMux, 1, "GPUMux");
|
||||
if (status != 1) Program.acpi.DeviceSet(AsusACPI.GPUMuxVivo, 1, "GPUMuxVivo");
|
||||
restart = true;
|
||||
changed = true;
|
||||
}
|
||||
@@ -93,7 +97,8 @@ namespace GHelper.Gpu
|
||||
Program.acpi.SetGPUEco(0);
|
||||
Thread.Sleep(100);
|
||||
}
|
||||
Program.acpi.DeviceSet(AsusACPI.GPUMux, 0, "GPUMux");
|
||||
status = Program.acpi.DeviceSet(AsusACPI.GPUMux, 0, "GPUMux");
|
||||
if (status != 1) Program.acpi.DeviceSet(AsusACPI.GPUMuxVivo, 0, "GPUMuxVivo");
|
||||
restart = true;
|
||||
changed = true;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using GHelper;
|
||||
using GHelper.Fan;
|
||||
using GHelper.Gpu;
|
||||
using GHelper.Gpu.NVidia;
|
||||
using GHelper.Gpu.AMD;
|
||||
@@ -10,11 +11,6 @@ using System.Management;
|
||||
public static class HardwareControl
|
||||
{
|
||||
|
||||
public const int DEFAULT_FAN_MIN = 18;
|
||||
public const int DEFAULT_FAN_MAX = 58;
|
||||
|
||||
const int INADEQUATE_MAX = 72;
|
||||
|
||||
public static IGpuControl? GpuControl;
|
||||
|
||||
public static float? cpuTemp = -1;
|
||||
@@ -37,62 +33,6 @@ public static class HardwareControl
|
||||
|
||||
static long lastUpdate;
|
||||
|
||||
static int[] _fanMax = new int[3] { DEFAULT_FAN_MAX, DEFAULT_FAN_MAX, DEFAULT_FAN_MAX };
|
||||
static bool _fanRpm = false;
|
||||
|
||||
public static int GetFanMax(AsusFan device)
|
||||
{
|
||||
return _fanMax[(int)device];
|
||||
}
|
||||
|
||||
public static void SetFanMax(AsusFan device, int value)
|
||||
{
|
||||
AppConfig.Set("fan_max_" + (int)device, value);
|
||||
}
|
||||
|
||||
public static bool fanRpm
|
||||
{
|
||||
get
|
||||
{
|
||||
return _fanRpm;
|
||||
}
|
||||
set
|
||||
{
|
||||
AppConfig.Set("fan_rpm", value ? 1 : 0);
|
||||
_fanRpm = value;
|
||||
}
|
||||
}
|
||||
|
||||
static HardwareControl()
|
||||
{
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
_fanMax[i] = AppConfig.Get("fan_max_" + i);
|
||||
|
||||
if (_fanMax[i] > INADEQUATE_MAX) _fanMax[i] = -1; // skipping inadvequate settings
|
||||
|
||||
if (_fanMax[i] < 0 && AppConfig.ContainsModel("401")) _fanMax[i] = 72;
|
||||
if (_fanMax[i] < 0 && AppConfig.ContainsModel("503")) _fanMax[i] = 68;
|
||||
if (_fanMax[i] < 0) _fanMax[i] = DEFAULT_FAN_MAX;
|
||||
}
|
||||
|
||||
|
||||
_fanRpm = AppConfig.IsNotFalse("fan_rpm");
|
||||
|
||||
}
|
||||
|
||||
public static string FormatFan(AsusFan device, int value)
|
||||
{
|
||||
if (value < 0) return null;
|
||||
|
||||
if (value > GetFanMax(device) && value <= INADEQUATE_MAX) SetFanMax(device, value);
|
||||
|
||||
if (fanRpm)
|
||||
return GHelper.Properties.Strings.FanSpeed + ": " + (value * 100).ToString() + "RPM";
|
||||
else
|
||||
return GHelper.Properties.Strings.FanSpeed + ": " + Math.Min(Math.Round((float)value / GetFanMax(device) * 100), 100).ToString() + "%"; // relatively to 6000 rpm
|
||||
}
|
||||
|
||||
private static int GetGpuUse()
|
||||
{
|
||||
try
|
||||
@@ -245,9 +185,9 @@ public static class HardwareControl
|
||||
gpuTemp = -1;
|
||||
gpuUse = -1;
|
||||
|
||||
cpuFan = FormatFan(AsusFan.CPU, Program.acpi.GetFan(AsusFan.CPU));
|
||||
gpuFan = FormatFan(AsusFan.GPU, Program.acpi.GetFan(AsusFan.GPU));
|
||||
midFan = FormatFan(AsusFan.Mid, Program.acpi.GetFan(AsusFan.Mid));
|
||||
cpuFan = FanSensorControl.FormatFan(AsusFan.CPU, Program.acpi.GetFan(AsusFan.CPU));
|
||||
gpuFan = FanSensorControl.FormatFan(AsusFan.GPU, Program.acpi.GetFan(AsusFan.GPU));
|
||||
midFan = FanSensorControl.FormatFan(AsusFan.Mid, Program.acpi.GetFan(AsusFan.Mid));
|
||||
|
||||
cpuTemp = GetCPUTemp();
|
||||
|
||||
@@ -327,6 +267,7 @@ public static class HardwareControl
|
||||
if (_gpuControl.IsValid)
|
||||
{
|
||||
GpuControl = _gpuControl;
|
||||
if (GpuControl.FullName.Contains("6850M")) AppConfig.Set("xgm_special", 1);
|
||||
Logger.WriteLine(GpuControl.FullName);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -95,6 +95,10 @@ namespace GHelper.Helpers
|
||||
|
||||
if (IsClamshellEnabled())
|
||||
ToggleLidAction();
|
||||
|
||||
if (Program.settingsForm.Visible)
|
||||
Program.screenControl.InitScreen();
|
||||
|
||||
}
|
||||
|
||||
private static int CheckAndSaveLidAction()
|
||||
|
||||
@@ -168,7 +168,7 @@ namespace GHelper.Input
|
||||
static void SetBrightness(int delta)
|
||||
{
|
||||
int brightness = -1;
|
||||
|
||||
|
||||
if (isTUF) brightness = ScreenBrightness.Get();
|
||||
if (AppConfig.SwappedBrightness()) delta = -delta;
|
||||
|
||||
@@ -182,7 +182,7 @@ namespace GHelper.Input
|
||||
|
||||
Thread.Sleep(100);
|
||||
if (brightness == ScreenBrightness.Get())
|
||||
Program.toast.RunToast(ScreenBrightness.Adjust(delta) + "%", (delta < 0 ) ? ToastIcon.BrightnessDown : ToastIcon.BrightnessUp);
|
||||
Program.toast.RunToast(ScreenBrightness.Adjust(delta) + "%", (delta < 0) ? ToastIcon.BrightnessDown : ToastIcon.BrightnessUp);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -388,10 +388,17 @@ namespace GHelper.Input
|
||||
modeControl.CyclePerformanceMode(Control.ModifierKeys == Keys.Shift);
|
||||
break;
|
||||
case "ghelper":
|
||||
Program.settingsForm.BeginInvoke(delegate
|
||||
try
|
||||
{
|
||||
Program.SettingsToggle();
|
||||
});
|
||||
Program.settingsForm.BeginInvoke(delegate
|
||||
{
|
||||
Program.SettingsToggle();
|
||||
});
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.WriteLine(ex);
|
||||
}
|
||||
break;
|
||||
case "fnlock":
|
||||
ToggleFnLock();
|
||||
@@ -433,6 +440,11 @@ namespace GHelper.Input
|
||||
}
|
||||
}
|
||||
|
||||
static void ToggleTouchpad()
|
||||
{
|
||||
KeyboardHook.KeyCtrlWinPress(Keys.F24);
|
||||
}
|
||||
|
||||
public static void ToggleArrowLock()
|
||||
{
|
||||
int arLock = AppConfig.Is("arrow_lock") ? 0 : 1;
|
||||
@@ -476,7 +488,7 @@ namespace GHelper.Input
|
||||
// We'll special-case the translation of those.
|
||||
if (AppConfig.IsAlly())
|
||||
{
|
||||
switch(EventID)
|
||||
switch (EventID)
|
||||
{
|
||||
|
||||
// This is both the M1 and M2 keys.
|
||||
@@ -566,7 +578,7 @@ namespace GHelper.Input
|
||||
Program.acpi.DeviceSet(AsusACPI.UniversalControl, AsusACPI.Brightness_Up, "Brightness");
|
||||
break;
|
||||
case 107: // FN+F10
|
||||
AsusUSB.TouchpadToggle();
|
||||
ToggleTouchpad();
|
||||
Thread.Sleep(200);
|
||||
Program.toast.RunToast(GetTouchpadState() ? "On" : "Off", ToastIcon.Touchpad);
|
||||
break;
|
||||
@@ -599,9 +611,7 @@ namespace GHelper.Input
|
||||
public static void SetBacklightAuto(bool init = false)
|
||||
{
|
||||
if (init) AsusUSB.Init();
|
||||
|
||||
//if (!OptimizationService.IsRunning())
|
||||
AsusUSB.ApplyBrightness(GetBacklight(), "Auto");
|
||||
AsusUSB.ApplyBrightness(GetBacklight(), "Auto", init);
|
||||
}
|
||||
|
||||
public static void SetBacklight(int delta, bool force = false)
|
||||
@@ -645,7 +655,8 @@ namespace GHelper.Input
|
||||
else if (brightness >= 100) brightness = 0;
|
||||
else brightness = -10;
|
||||
|
||||
} else
|
||||
}
|
||||
else
|
||||
{
|
||||
brightness = Math.Max(Math.Min(100, brightness + delta), -10);
|
||||
}
|
||||
@@ -654,9 +665,9 @@ namespace GHelper.Input
|
||||
|
||||
if (brightness >= 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, 1, "ScreenpadOn");
|
||||
|
||||
Program.acpi.DeviceSet(AsusACPI.ScreenPadBrightness, Math.Max(brightness * 255 / 100, 0 ), "Screenpad");
|
||||
Program.acpi.DeviceSet(AsusACPI.ScreenPadBrightness, Math.Max(brightness * 255 / 100, 0), "Screenpad");
|
||||
|
||||
if (brightness < 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, 0, "ScreenpadOff");
|
||||
if (brightness < 0) Program.acpi.DeviceSet(AsusACPI.ScreenPadToggle, 0, "ScreenpadOff");
|
||||
|
||||
string toast;
|
||||
|
||||
@@ -677,11 +688,14 @@ namespace GHelper.Input
|
||||
|
||||
//string executable = command.Split(' ')[0];
|
||||
//string arguments = command.Substring(executable.Length).Trim();
|
||||
ProcessStartInfo startInfo = new ProcessStartInfo("cmd", "/C " + command);
|
||||
|
||||
startInfo.RedirectStandardOutput = true;
|
||||
startInfo.RedirectStandardError = true;
|
||||
startInfo.UseShellExecute = false;
|
||||
startInfo.CreateNoWindow = true;
|
||||
|
||||
ProcessStartInfo startInfo = new ProcessStartInfo();
|
||||
startInfo.UseShellExecute = true;
|
||||
startInfo.WorkingDirectory = Environment.CurrentDirectory;
|
||||
startInfo.FileName = command;
|
||||
//startInfo.Arguments = arguments;
|
||||
Process proc = Process.Start(startInfo);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,9 @@ public sealed class KeyboardHook : IDisposable
|
||||
|
||||
public const int KEYEVENTF_EXTENDEDKEY = 1;
|
||||
public const int KEYEVENTF_KEYUP = 2;
|
||||
|
||||
private const byte VK_LWIN = 0x5B;
|
||||
private const byte VK_LCONTROL = 0xA2;
|
||||
|
||||
public static void KeyPress(Keys key)
|
||||
{
|
||||
@@ -32,6 +34,16 @@ public sealed class KeyboardHook : IDisposable
|
||||
keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
}
|
||||
|
||||
public static void KeyCtrlWinPress(Keys key)
|
||||
{
|
||||
keybd_event(VK_LCONTROL, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
keybd_event(VK_LCONTROL, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Represents the window that is used internally to get the messages.
|
||||
|
||||
@@ -153,6 +153,13 @@ namespace GHelper.Mode
|
||||
Guid guidScheme = new Guid(scheme);
|
||||
|
||||
uint status = PowerGetEffectiveOverlayScheme(out Guid activeScheme);
|
||||
|
||||
if (GetBatterySaverStatus())
|
||||
{
|
||||
Logger.WriteLine("Battery Saver detected");
|
||||
return;
|
||||
}
|
||||
|
||||
if (status != 0 || activeScheme != guidScheme)
|
||||
{
|
||||
status = PowerSetActiveOverlayScheme(guidScheme);
|
||||
@@ -288,6 +295,48 @@ namespace GHelper.Mode
|
||||
Logger.WriteLine("Setting Hibernate after " + seconds + ": " + (hrAC == 0 ? "OK" : hrAC));
|
||||
}
|
||||
|
||||
[DllImport("Kernel32")]
|
||||
private static extern bool GetSystemPowerStatus(SystemPowerStatus sps);
|
||||
public enum ACLineStatus : byte
|
||||
{
|
||||
Offline = 0, Online = 1, Unknown = 255
|
||||
}
|
||||
|
||||
public enum BatteryFlag : byte
|
||||
{
|
||||
High = 1,
|
||||
Low = 2,
|
||||
Critical = 4,
|
||||
Charging = 8,
|
||||
NoSystemBattery = 128,
|
||||
Unknown = 255
|
||||
}
|
||||
|
||||
// Fields must mirror their unmanaged counterparts, in order
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public class SystemPowerStatus
|
||||
{
|
||||
public ACLineStatus ACLineStatus;
|
||||
public BatteryFlag BatteryFlag;
|
||||
public Byte BatteryLifePercent;
|
||||
public Byte SystemStatusFlag;
|
||||
public Int32 BatteryLifeTime;
|
||||
public Int32 BatteryFullLifeTime;
|
||||
}
|
||||
|
||||
public static bool GetBatterySaverStatus()
|
||||
{
|
||||
SystemPowerStatus sps = new SystemPowerStatus();
|
||||
try
|
||||
{
|
||||
GetSystemPowerStatus(sps);
|
||||
return (sps.SystemStatusFlag > 0);
|
||||
} catch (Exception ex)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,9 +29,9 @@ namespace GHelper
|
||||
public static SettingsForm settingsForm = new SettingsForm();
|
||||
|
||||
public static ModeControl modeControl = new ModeControl();
|
||||
static GPUModeControl gpuControl = new GPUModeControl(settingsForm);
|
||||
static ScreenControl screenControl = new ScreenControl();
|
||||
static ClamshellModeControl clamshellControl = new ClamshellModeControl();
|
||||
public static GPUModeControl gpuControl = new GPUModeControl(settingsForm);
|
||||
public static ScreenControl screenControl = new ScreenControl();
|
||||
public static ClamshellModeControl clamshellControl = new ClamshellModeControl();
|
||||
|
||||
public static ToastForm toast = new ToastForm();
|
||||
|
||||
|
||||
@@ -130,10 +130,10 @@
|
||||
<value>Eco Modus</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOff" xml:space="preserve">
|
||||
<value>Wechseln in den Ultimate Modus benötigt einen Neustart. Jetzt neustarten?</value>
|
||||
<value>Deaktivieren des Ultimate Modus benötigt einen Neustart.</value>
|
||||
</data>
|
||||
<data name="AlertUltimateOn" xml:space="preserve">
|
||||
<value>Ultimate Modus benötigt einen Neustart</value>
|
||||
<value>Aktivieren des Ultimate Modus benötigt einen Neustart.</value>
|
||||
</data>
|
||||
<data name="AlertUltimateTitle" xml:space="preserve">
|
||||
<value>Jetzt neu starten?</value>
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Hochfahren</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Boot Sound</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Helligkeit</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>Helligkeit erhöhen</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Kalibrieren</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>Lädt</value>
|
||||
</data>
|
||||
@@ -286,7 +292,7 @@
|
||||
<value>Standard</value>
|
||||
</data>
|
||||
<data name="DisableOverdrive" xml:space="preserve">
|
||||
<value>Overdrive abschalten</value>
|
||||
<value>Bildschirm: Overdrive abschalten</value>
|
||||
</data>
|
||||
<data name="Discharging" xml:space="preserve">
|
||||
<value>Entlädt</value>
|
||||
@@ -304,7 +310,7 @@
|
||||
<value>Eco</value>
|
||||
</data>
|
||||
<data name="EnableOptimusText" xml:space="preserve">
|
||||
<value>Wenn Sie die dGPU deaktivieren, indem Sie in den Eco-Modus wechseln, kann zu Problemen mit der Helligkeitseinstellung führen, wenn der Anzeigemodus nicht auf Optimus eingestellt ist.
|
||||
<value>Die dGPU zu deaktivieren, indem Sie in den Eco-Modus wechseln während der Anzeigemodus nicht auf Optimus eingestellt ist, kann zu Problemen mit der Helligkeitseinstellung führen.
|
||||
|
||||
Trotzdem fortfahren?</value>
|
||||
</data>
|
||||
@@ -396,7 +402,7 @@ Trotzdem fortfahren?</value>
|
||||
<value>Alle Anwendungen auf der dGPU beim Wechsel in den Eco Modus beenden.</value>
|
||||
</data>
|
||||
<data name="LaptopBacklight" xml:space="preserve">
|
||||
<value>Laptopbelechtung</value>
|
||||
<value>Laptopbeleuchtung</value>
|
||||
</data>
|
||||
<data name="LaptopKeyboard" xml:space="preserve">
|
||||
<value>Laptoptastatur</value>
|
||||
@@ -492,7 +498,7 @@ Trotzdem fortfahren?</value>
|
||||
<value>Neue Updates:</value>
|
||||
</data>
|
||||
<data name="NoNewUpdates" xml:space="preserve">
|
||||
<value>Keine Updates verfügbar</value>
|
||||
<value>Keine Updates</value>
|
||||
</data>
|
||||
<data name="NotConnected" xml:space="preserve">
|
||||
<value>Nicht verbunden</value>
|
||||
@@ -624,7 +630,7 @@ Trotzdem fortfahren?</value>
|
||||
<value>Ultimativ</value>
|
||||
</data>
|
||||
<data name="UndervoltingRisky" xml:space="preserve">
|
||||
<value>Die Spannungsabsenkung (Undervolting) ist experimentell und birgt u.U. ein Risik. Wenn die Spannung zu weit abgesenkt wird, wird der Computer instabil und kann abstürzen, was zu Datenverlust führen kann. Es empfiehlt sich mit kleinen Werten anzufangen und es ausgiebig zu testen, um den idealen Wert zu finden.</value>
|
||||
<value>Die Spannungsabsenkung (Undervolting) ist experimentell und birgt Risiken. Wenn die Spannung zu weit abgesenkt wird, wird der Computer instabil und kann abstürzen, was zu Datenverlust führen kann. Es empfiehlt sich mit kleinen Werten anzufangen und ausgiebig zu testen, um den idealen Wert zu finden.</value>
|
||||
</data>
|
||||
<data name="Updates" xml:space="preserve">
|
||||
<value>Aktualisierungen</value>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Al arrancar</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Sonido al arranque</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Brillo</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>Subir brillo</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Calibrar</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>Cargando</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Au démarrage</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Boot Sound</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Luminosité</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>Augmenter la luminosité</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Calibrate</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>Chargement en cours</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Rendszerbetöltés</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Boot Sound</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Fényerő</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>Fényerő növelése</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Calibrate</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>Charging</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Avvio</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Boot Sound</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Luminosità</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>Aumenta Luminosità</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Calibrate</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>In carica</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>부팅</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Boot Sound</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>밝기</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>밝기 증가</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Calibrate</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>충전 중</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Paleidimas</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Paleidimo garsas</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Ryškumas</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>Ryškumo didinimas</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Kalibruoti</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>Įkrovimas</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Uruchamianie</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Dźwięk podczas rozruchu</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Jasność</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>Zwiększ jasność</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Kalibruj</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>Ładowanie</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Ao ligar</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Boot Sound</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Nível do brilho</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>Brightness Up</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Calibrate</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>Charging</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Ao ligar</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Boot Sound</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Nível do brilho</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>Aumentar o brilho</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Calibrate</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>Carregando</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Pornire</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Boot Sound</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Luminozitate</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>Mărirea luminozității</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Calibrate</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>Se încarcă</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Önyükleme</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Boot Sound</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Parlaklığı</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>Brightness Up</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Calibrate</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>Charging</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Старт</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Boot Sound</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Яскравість</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>Підвищити яскравість</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Calibrate</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>Зарядка</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>Khởi động</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>Boot Sound</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>Độ sáng</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>Tăng độ sáng</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Calibrate</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>Đang sạc</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>开机时</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>开机音效</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>亮度</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>提高亮度</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>Calibrate</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>充电中</value>
|
||||
</data>
|
||||
|
||||
@@ -258,6 +258,9 @@
|
||||
<data name="Boot" xml:space="preserve">
|
||||
<value>開機時</value>
|
||||
</data>
|
||||
<data name="BootSound" xml:space="preserve">
|
||||
<value>開機音效</value>
|
||||
</data>
|
||||
<data name="Brightness" xml:space="preserve">
|
||||
<value>亮度</value>
|
||||
</data>
|
||||
@@ -267,6 +270,9 @@
|
||||
<data name="BrightnessUp" xml:space="preserve">
|
||||
<value>螢幕亮度提高</value>
|
||||
</data>
|
||||
<data name="Calibrate" xml:space="preserve">
|
||||
<value>校準</value>
|
||||
</data>
|
||||
<data name="Charging" xml:space="preserve">
|
||||
<value>充電中</value>
|
||||
</data>
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using GHelper.AutoUpdate;
|
||||
using GHelper.Battery;
|
||||
using GHelper.Display;
|
||||
using GHelper.Fan;
|
||||
using GHelper.Gpu;
|
||||
using GHelper.Helpers;
|
||||
using GHelper.Input;
|
||||
@@ -563,7 +564,7 @@ namespace GHelper
|
||||
|
||||
private void LabelCPUFan_Click(object? sender, EventArgs e)
|
||||
{
|
||||
HardwareControl.fanRpm = !HardwareControl.fanRpm;
|
||||
FanSensorControl.fanRpm = !FanSensorControl.fanRpm;
|
||||
RefreshSensors(true);
|
||||
}
|
||||
|
||||
@@ -757,7 +758,7 @@ namespace GHelper
|
||||
|
||||
|
||||
|
||||
public void VisualiseScreen(bool screenEnabled, bool screenAuto, int frequency, int maxFrequency, int overdrive, bool overdriveSetting, int miniled)
|
||||
public void VisualiseScreen(bool screenEnabled, bool screenAuto, int frequency, int maxFrequency, int overdrive, bool overdriveSetting, int miniled, bool hdr)
|
||||
{
|
||||
|
||||
ButtonEnabled(button60Hz, screenEnabled);
|
||||
@@ -798,7 +799,8 @@ namespace GHelper
|
||||
|
||||
if (miniled >= 0)
|
||||
{
|
||||
buttonMiniled.Activated = (miniled == 1);
|
||||
buttonMiniled.Activated = (miniled == 1) || hdr;
|
||||
buttonMiniled.Enabled = !hdr;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1024,13 +1026,26 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
public void HideUltimateMode()
|
||||
public void VisualiseGPUButtons(bool eco = true, bool ultimate = true)
|
||||
{
|
||||
tableGPU.Controls.Remove(buttonUltimate);
|
||||
tablePerf.ColumnCount = 0;
|
||||
tableGPU.ColumnCount = 0;
|
||||
tableScreen.ColumnCount = 0;
|
||||
menuUltimate.Visible = false;
|
||||
if (!eco)
|
||||
{
|
||||
menuEco.Visible = buttonEco.Visible = false;
|
||||
menuOptimized.Visible = buttonOptimized.Visible = false;
|
||||
buttonStopGPU.Visible = true;
|
||||
tableGPU.ColumnCount = 3;
|
||||
tableScreen.ColumnCount = 3;
|
||||
} else
|
||||
{
|
||||
buttonStopGPU.Visible = false;
|
||||
}
|
||||
|
||||
if (!ultimate)
|
||||
{
|
||||
menuUltimate.Visible = buttonUltimate.Visible = false;
|
||||
tableGPU.ColumnCount = 3;
|
||||
tableScreen.ColumnCount = 3;
|
||||
}
|
||||
}
|
||||
|
||||
public void HideGPUModes(bool gpuExists)
|
||||
@@ -1041,15 +1056,17 @@ namespace GHelper
|
||||
buttonStandard.Visible = false;
|
||||
buttonUltimate.Visible = false;
|
||||
buttonOptimized.Visible = false;
|
||||
|
||||
buttonStopGPU.Visible = true;
|
||||
|
||||
tableGPU.ColumnCount = 0;
|
||||
|
||||
SetContextMenu();
|
||||
|
||||
panelGPU.Visible = gpuExists;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void LockGPUModes(string text = null)
|
||||
{
|
||||
Invoke(delegate
|
||||
|
||||
@@ -10,7 +10,7 @@ Small and lightweight Armoury Crate alternative for Asus laptops offering almost
|
||||
- Don't forget to [**Check Requirements**](#requirements-mandatory) and [**Read FAQ**](#question-faq)
|
||||
- If you like this app, please give it a star :star: and spread the word about it!
|
||||
|
||||
#### Support project in [:euro: EUR](https://www.paypal.com/donate/?hosted_button_id=4HMSHS4EBQWTA) | [💵 USD](https://www.paypal.com/donate/?hosted_button_id=SRM6QUX6ACXDY) | [:credit_card: Stripe](https://buy.stripe.com/00gaFJ9Lf79v7WobII)
|
||||
#### Support project in [:euro: EUR](https://www.paypal.com/donate/?hosted_button_id=4HMSHS4EBQWTA) | [💵 USD](https://www.paypal.com/donate/?hosted_button_id=SRM6QUX6ACXDY)
|
||||
|
||||

|
||||
|
||||
@@ -279,6 +279,12 @@ Disable app's OSD (for performance modes, keyboard backlight, etc.)
|
||||
"disable_osd": 1,
|
||||
```
|
||||
|
||||
### Disable "Tablet mode" on X13/X16
|
||||
To disable automatic touchpad toggling when laptop enteres / leaves tablet mode
|
||||
```
|
||||
"disable_tablet": 1,
|
||||
```
|
||||
|
||||
### Extra Keybindings
|
||||
- ``Ctrl + Shift + F5`` - Toggle Performance Modes
|
||||
- ``Ctrl + Shift + F12`` - Open G-Helper window
|
||||
|
||||
Reference in New Issue
Block a user