Compare commits

...

10 Commits

Author SHA1 Message Date
Serge
ba0bac11b5 Exception wrapping 2024-05-02 12:35:36 +02:00
Serge
8241700fe7 Merge branch 'main' of https://github.com/seerge/g-helper 2024-05-02 11:05:50 +02:00
Serge
2ff1a59ff9 ASUS Rog Keris Wired #2517 2024-05-02 11:05:48 +02:00
Serge
18d6f694a0 New Crowdin updates (#2525)
* New translations strings.resx (Korean)

* New translations strings.resx (Korean)
2024-05-02 00:44:00 +02:00
Serge
9fe283b620 Multizone toggle improvements https://github.com/seerge/g-helper/issues/1957 2024-05-01 21:27:31 +02:00
Serge
b7e4ec50a6 Version bump 2024-05-01 21:09:05 +02:00
Serge
927fc382a5 Miniled toggle tweaks 2024-05-01 21:08:39 +02:00
Serge
ed728de661 UI fix https://github.com/seerge/g-helper/issues/2515 2024-05-01 21:05:08 +02:00
Serge
a1a317d952 Added S540 to the Oled list #2519 2024-04-30 12:31:41 +02:00
Serge
123fbc414f Overdrive UI Tweaks https://github.com/seerge/g-helper/issues/2497 2024-04-28 10:39:21 +02:00
13 changed files with 131 additions and 80 deletions

View File

@@ -411,12 +411,12 @@ public static class AppConfig
public static bool IsOLED()
{
return ContainsModel("OLED") || IsSlash() || ContainsModel("M7600") || ContainsModel("UX64") || ContainsModel("UX34") || ContainsModel("UX53") || ContainsModel("K360") || ContainsModel("X150") || ContainsModel("M350") || ContainsModel("K650") || ContainsModel("UM53") || ContainsModel("K660") || ContainsModel("UX84") || ContainsModel("M650") || ContainsModel("K340") || ContainsModel("K350") || ContainsModel("M140") || ContainsModel("UM340");
return ContainsModel("OLED") || IsSlash() || ContainsModel("M7600") || ContainsModel("UX64") || ContainsModel("UX34") || ContainsModel("UX53") || ContainsModel("K360") || ContainsModel("X150") || ContainsModel("M350") || ContainsModel("K650") || ContainsModel("UM53") || ContainsModel("K660") || ContainsModel("UX84") || ContainsModel("M650") || ContainsModel("K340") || ContainsModel("K350") || ContainsModel("M140") || ContainsModel("UM340") || ContainsModel("S540");
}
public static bool IsNoOverdrive()
{
return Is("no_overdrive") || IsOLED();
return Is("no_overdrive");
}
public static bool IsNoSleepEvent()

View File

@@ -167,6 +167,9 @@ public class AsusACPI
public const int PCoreMax = 16;
public const int ECoreMax = 16;
private bool? _allAMD = null;
private bool? _overdrive = null;
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern IntPtr CreateFile(
@@ -636,8 +639,14 @@ public class AsusACPI
public bool IsAllAmdPPT()
{
//return false;
return DeviceGet(PPT_CPUB0) >= 0 && DeviceGet(PPT_GPUC0) < 0;
if (_allAMD is null) _allAMD = DeviceGet(PPT_CPUB0) >= 0 && DeviceGet(PPT_GPUC0) < 0;
return (bool)_allAMD;
}
public bool IsOverdriveSupported()
{
if (_overdrive is null) _overdrive = DeviceGet(ScreenOverdrive) >= 0;
return (bool)_overdrive;
}
public bool IsNVidiaGPU()

View File

@@ -51,10 +51,10 @@ namespace GHelper.Display
ScreenNative.SetRefreshRate(laptopScreen, frequency);
}
if (overdrive >= 0)
if (Program.acpi.IsOverdriveSupported() && overdrive >= 0)
{
if (AppConfig.IsNoOverdrive()) overdrive = 0;
if (!AppConfig.IsOLED() && overdrive != Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive))
if (overdrive != Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive))
{
Program.acpi.DeviceSet(AsusACPI.ScreenOverdrive, overdrive, "ScreenOverdrive");
}
@@ -65,7 +65,10 @@ namespace GHelper.Display
if (Program.acpi.DeviceGet(AsusACPI.ScreenMiniled1) >= 0)
Program.acpi.DeviceSet(AsusACPI.ScreenMiniled1, miniled, "Miniled1");
else
{
Program.acpi.DeviceSet(AsusACPI.ScreenMiniled2, miniled, "Miniled2");
Thread.Sleep(100);
}
}
InitScreen();
@@ -84,7 +87,7 @@ namespace GHelper.Display
}
}
public int ToogleMiniled()
public string ToogleMiniled()
{
int miniled1 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled1);
int miniled2 = Program.acpi.DeviceGet(AsusACPI.ScreenMiniled2);
@@ -92,24 +95,45 @@ namespace GHelper.Display
Logger.WriteLine($"MiniledToggle: {miniled1} {miniled2}");
int miniled;
string name;
if (miniled1 >= 0)
{
miniled = (miniled1 == 1) ? 0 : 1;
switch (miniled1)
{
case 1:
miniled = 0;
name = Properties.Strings.OneZone;
break;
default:
miniled = 1;
name = Properties.Strings.Multizone;
break;
}
}
else
{
switch (miniled2)
{
case 1: miniled = 2; break;
case 2: miniled = 0; break;
default: miniled = 1; break;
case 1:
miniled = 2;
name = Properties.Strings.OneZone;
break;
case 2:
miniled = 0;
name = Properties.Strings.Multizone;
break;
default:
miniled = 1;
name = Properties.Strings.MultizoneStrong;
break;
}
}
AppConfig.Set("miniled", miniled);
SetScreen(miniled: miniled);
return miniled;
return name;
}
public void InitScreen()
@@ -119,7 +143,7 @@ namespace GHelper.Display
int maxFrequency = ScreenNative.GetMaxRefreshRate(laptopScreen);
bool screenAuto = AppConfig.Is("screen_auto");
bool overdriveSetting = !AppConfig.IsNoOverdrive();
bool overdriveSetting = Program.acpi.IsOverdriveSupported() && !AppConfig.IsNoOverdrive();
int overdrive = AppConfig.IsNoOverdrive() ? 0 : Program.acpi.DeviceGet(AsusACPI.ScreenOverdrive);

View File

@@ -166,7 +166,8 @@ namespace GHelper.Display
{
try
{
var devices = GetAllDevices().ToArray();
var devicesList = GetAllDevices();
var devices = devicesList.ToArray();
string internalName = AppConfig.GetString("internal_display");
foreach (var device in devices)

View File

@@ -223,10 +223,7 @@ namespace GHelper
checkUSBC.Visible = false;
}
if (AppConfig.IsOLED())
{
checkNoOverdrive.Visible = false;
}
checkNoOverdrive.Visible = Program.acpi.IsOverdriveSupported();
// Change text and hide irrelevant options on the ROG Ally,
// which is a bit of a special case piece of hardware.
@@ -256,7 +253,6 @@ namespace GHelper
checkGpuApps.Visible = false;
checkUSBC.Visible = false;
checkAutoToggleClamshellMode.Visible = false;
checkNoOverdrive.Visible = false;
int apuMem = Program.acpi.GetAPUMem();
if (apuMem >= 0)

View File

@@ -674,7 +674,7 @@ namespace GHelper
private void trackGPUClockLimit_Scroll(object? sender, EventArgs e)
{
int maxClock = (int)Math.Round((float)trackGPUClockLimit.Value / 50) * 50;
int maxClock = (int)Math.Round((float)trackGPUClockLimit.Value / 5) * 5;
trackGPUClockLimit.Value = maxClock;
AppConfig.SetMode("gpu_clock_limit", maxClock);

View File

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

View File

@@ -15,22 +15,29 @@ namespace GHelper.Helpers
public bool IsExternalDisplayConnected()
{
var devices = ScreenInterrogatory.GetAllDevices().ToArray();
string internalName = AppConfig.GetString("internal_display");
foreach (var device in devices)
try
{
if (device.outputTechnology != ScreenInterrogatory.DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL &&
device.outputTechnology != ScreenInterrogatory.DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED
&& device.monitorFriendlyDeviceName != internalName)
var devicesList = ScreenInterrogatory.GetAllDevices();
var devices = devicesList.ToArray();
string internalName = AppConfig.GetString("internal_display");
foreach (var device in devices)
{
Logger.WriteLine("Found external screen: " + device.monitorFriendlyDeviceName + ":" + device.outputTechnology.ToString());
if (device.outputTechnology != ScreenInterrogatory.DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_INTERNAL &&
device.outputTechnology != ScreenInterrogatory.DISPLAYCONFIG_VIDEO_OUTPUT_TECHNOLOGY.DISPLAYCONFIG_OUTPUT_TECHNOLOGY_DISPLAYPORT_EMBEDDED
&& device.monitorFriendlyDeviceName != internalName)
{
Logger.WriteLine("Found external screen: " + device.monitorFriendlyDeviceName + ":" + device.outputTechnology.ToString());
//Already found one, we do not have to check whether there are more
return true;
}
//Already found one, we do not have to check whether there are more
return true;
}
} catch (Exception ex)
{
Logger.WriteLine(ex.ToString());
}
return false;

View File

@@ -490,8 +490,8 @@ namespace GHelper.Input
break;
case "miniled":
if (ScreenCCD.GetHDRStatus()) return;
int miniled = screenControl.ToogleMiniled();
Program.toast.RunToast(miniled == 1 ? "Multi-Zone" : "Single-Zone", miniled == 1 ? ToastIcon.BrightnessUp : ToastIcon.BrightnessDown);
string miniledName = screenControl.ToogleMiniled();
Program.toast.RunToast(miniledName, miniledName == Properties.Strings.OneZone ? ToastIcon.BrightnessDown : ToastIcon.BrightnessUp);
break;
case "aura":
Program.settingsForm.BeginInvoke(Program.settingsForm.CycleAuraMode);

View File

@@ -159,6 +159,18 @@
}
}
public class ROGKerisWirelessWiredC : ROGKerisWireless
{
public ROGKerisWirelessWiredC() : base(0x195C, false)
{
}
public override string GetDisplayName()
{
return "ROG Keris (Wired)";
}
}
public class ROGKerisWirelessWired : ROGKerisWireless
{
public ROGKerisWirelessWired() : base(0x195E, false)

View File

@@ -191,6 +191,7 @@ namespace GHelper.Peripherals
DetectMouse(new GladiusII());
DetectMouse(new ROGKerisWireless());
DetectMouse(new ROGKerisWirelessWired());
DetectMouse(new ROGKerisWirelessWiredC());
DetectMouse(new ROGKerisWirelessEvaEdition());
DetectMouse(new ROGKerisWirelessEvaEditionWired());
DetectMouse(new TUFM4Wirelss());

View File

@@ -118,16 +118,16 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Acceleration" xml:space="preserve">
<value>Acceleration</value>
<value>가속</value>
</data>
<data name="ACPIError" xml:space="preserve">
<value>ASUS ACPI에 연결할 수 없어 응용 프로그램이 작동하지 않습니다. Asus System Control Interface를 먼저 설치하십시오.</value>
</data>
<data name="AlertAPUMemoryRestart" xml:space="preserve">
<value>Restart your device to apply changes</value>
<value>변경사항을 적용하려면 기기를 다시 시작하십시오.</value>
</data>
<data name="AlertAPUMemoryRestartTitle" xml:space="preserve">
<value>Restart now?</value>
<value>지금 다시 시작하시겠습니까?</value>
</data>
<data name="AlertDGPU" xml:space="preserve">
<value>GPU 사용량이 높습니다. 비활성화 하시겠습니까?</value>
@@ -142,10 +142,10 @@
<value>Ultimate 모드를 켜기 위해서는 다시 시작해야 합니다.</value>
</data>
<data name="AlertUltimateTitle" xml:space="preserve">
<value>다시 시작하시겠습니까?</value>
<value>지금 다시 시작하시겠습니까?</value>
</data>
<data name="AllyController" xml:space="preserve">
<value>Ally Controller</value>
<value>Ally 컨트롤러</value>
</data>
<data name="AnimationSpeed" xml:space="preserve">
<value>애니메이션 속도</value>
@@ -250,25 +250,25 @@
<value>절전 모드 해제</value>
</data>
<data name="BacklightLow" xml:space="preserve">
<value>Low</value>
<value>낮음</value>
</data>
<data name="BacklightMax" xml:space="preserve">
<value>Max</value>
<value>최대</value>
</data>
<data name="BacklightMid" xml:space="preserve">
<value>Mid</value>
<value>중간</value>
</data>
<data name="BacklightOff" xml:space="preserve">
<value>Off</value>
<value>꺼짐</value>
</data>
<data name="BacklightTimeout" xml:space="preserve">
<value>전원 / 배터리 사용 중 자동 꺼짐 시간 (0 - 항상 켜짐)</value>
</data>
<data name="BacklightTimeoutBattery" xml:space="preserve">
<value>Backlight Timeout when on battery</value>
<value>배터리 사용 중 백라이트 자동 꺼짐</value>
</data>
<data name="BacklightTimeoutPlugged" xml:space="preserve">
<value>Backlight Timeout when plugged</value>
<value>전원 사용 중 백라이트 자동 꺼짐</value>
</data>
<data name="Balanced" xml:space="preserve">
<value>균형</value>
@@ -283,7 +283,7 @@
<value>배터리 수명</value>
</data>
<data name="BatteryLimitFull" xml:space="preserve">
<value>One time charge to 100%</value>
<value>이번만 100%까지 충전</value>
</data>
<data name="Binding" xml:space="preserve">
<value>Binding</value>
@@ -301,7 +301,7 @@
<value>부팅</value>
</data>
<data name="BootSound" xml:space="preserve">
<value>Boot Sound</value>
<value>부팅 사운드</value>
</data>
<data name="Brightness" xml:space="preserve">
<value>밝기</value>
@@ -313,10 +313,10 @@
<value>밝기 증가</value>
</data>
<data name="BWTrayIcon" xml:space="preserve">
<value>Black and white tray icon</value>
<value>흑백 트레이 아이콘</value>
</data>
<data name="Calibrate" xml:space="preserve">
<value>Calibrate</value>
<value>보정</value>
</data>
<data name="Charging" xml:space="preserve">
<value>충전 중</value>
@@ -325,10 +325,10 @@
<value>색상</value>
</data>
<data name="Contrast" xml:space="preserve">
<value>Contrast</value>
<value>대비</value>
</data>
<data name="Controller" xml:space="preserve">
<value>Controller</value>
<value>컨트롤러</value>
</data>
<data name="CPUBoost" xml:space="preserve">
<value>CPU 부스트</value>
@@ -337,16 +337,16 @@
<value>사용자 설정</value>
</data>
<data name="Deceleration" xml:space="preserve">
<value>Deceleration</value>
<value>감속</value>
</data>
<data name="Default" xml:space="preserve">
<value>기본</value>
</data>
<data name="DisableController" xml:space="preserve">
<value>Disable Controller</value>
<value>컨트롤러 비활성화</value>
</data>
<data name="DisableOnLidClose" xml:space="preserve">
<value>Disable on lid close</value>
<value>덮개를 닫을 시 비활성화</value>
</data>
<data name="DisableOverdrive" xml:space="preserve">
<value>화면 OD 끄기</value>
@@ -355,7 +355,7 @@
<value>방전 중</value>
</data>
<data name="DownloadColorProfiles" xml:space="preserve">
<value>Download Color Profiles</value>
<value>색 프로필 다운로드</value>
</data>
<data name="DownloadUpdate" xml:space="preserve">
<value>다운로드</value>
@@ -384,7 +384,7 @@
<value>Energy Settings</value>
</data>
<data name="Export" xml:space="preserve">
<value>Export Profile</value>
<value>프로필 내보내기</value>
</data>
<data name="Extra" xml:space="preserve">
<value>추가 설정</value>
@@ -426,16 +426,16 @@
<value>Fn 키를 누르지 않고 Fn+F 핫키 작동</value>
</data>
<data name="FnLockOff" xml:space="preserve">
<value>FN-Lock Off</value>
<value>FN-Lock 꺼짐</value>
</data>
<data name="FnLockOn" xml:space="preserve">
<value>FN-Lock On</value>
<value>FN-Lock 켜짐</value>
</data>
<data name="GPUBoost" xml:space="preserve">
<value>다이나믹 부스트</value>
</data>
<data name="GPUChanging" xml:space="preserve">
<value>충전 중</value>
<value>바꾸는 중</value>
</data>
<data name="GPUCoreClockOffset" xml:space="preserve">
<value>코어 클럭 오프셋</value>
@@ -471,10 +471,10 @@
<value>높게</value>
</data>
<data name="ImageRotation" xml:space="preserve">
<value>Image Rotation</value>
<value>이미지 방향</value>
</data>
<data name="Import" xml:space="preserve">
<value>Import Profile</value>
<value>프로필 가져오기</value>
</data>
<data name="KeyBindings" xml:space="preserve">
<value>키 설정</value>
@@ -495,7 +495,7 @@
<value>화면</value>
</data>
<data name="LEDStatusIndicators" xml:space="preserve">
<value>LED Status Indicators</value>
<value>LED 상태 표시등</value>
</data>
<data name="Lid" xml:space="preserve">
<value>덮개</value>
@@ -507,7 +507,7 @@
<value>조명</value>
</data>
<data name="LockScreen" xml:space="preserve">
<value>Lock Screen</value>
<value>잠금화면</value>
</data>
<data name="Logo" xml:space="preserve">
<value>로고</value>
@@ -516,10 +516,10 @@
<value>낮게</value>
</data>
<data name="LSDeadzones" xml:space="preserve">
<value>Left Stick Deadzones</value>
<value>왼쪽 스틱 데드존</value>
</data>
<data name="LTDeadzones" xml:space="preserve">
<value>Left Trigger Deadzones</value>
<value>왼쪽 트리거 데드존</value>
</data>
<data name="MatrixAudio" xml:space="preserve">
<value>오디오 비주얼라이저</value>
@@ -591,7 +591,7 @@
<value>Multi Zone Strong</value>
</data>
<data name="Muted" xml:space="preserve">
<value>Muted</value>
<value>음소거</value>
</data>
<data name="MuteMic" xml:space="preserve">
<value>마이크 음소거</value>
@@ -609,10 +609,10 @@
<value>연결되지 않음</value>
</data>
<data name="Off" xml:space="preserve">
<value>Off</value>
<value>꺼짐</value>
</data>
<data name="On" xml:space="preserve">
<value>On</value>
<value>켜짐</value>
</data>
<data name="OneZone" xml:space="preserve">
<value>One Zone</value>
@@ -666,7 +666,7 @@
<value>종료</value>
</data>
<data name="Reset" xml:space="preserve">
<value>Reset</value>
<value>초기화</value>
</data>
<data name="RestartGPU" xml:space="preserve">
<value>dGPU가 사용중이기 때문에 Eco 모드로 전환할 수 없습니다. 장치 관리자에서 dGPU를 재시작하시겠습니까?</value>
@@ -675,10 +675,10 @@
<value>RPM</value>
</data>
<data name="RSDeadzones" xml:space="preserve">
<value>Right Stick Deadzones</value>
<value>오른쪽 스틱 데드존</value>
</data>
<data name="RTDeadzones" xml:space="preserve">
<value>Right Trigger Deadzones</value>
<value>오른쪽 트리거 데드존</value>
</data>
<data name="RunOnStartup" xml:space="preserve">
<value>시스템 시작 시 실행</value>
@@ -759,7 +759,7 @@
<value>언더볼팅은 실험적이며 위험한 기능입니다. 적용 값이 너무 낮은 경우 시스템이 불안정해지고, 강제 종료되거나 데이터 손상을 유발할 수 있습니다. 낮은 값부터 적용하여 잘 작동하는지 확인해 보십시오.</value>
</data>
<data name="Unmuted" xml:space="preserve">
<value>Unmuted</value>
<value>음소거 해제</value>
</data>
<data name="Updates" xml:space="preserve">
<value>업데이트</value>
@@ -768,16 +768,16 @@
<value>버전</value>
</data>
<data name="VibrationStrength" xml:space="preserve">
<value>Vibration Strength</value>
<value>진동 세기</value>
</data>
<data name="VisualMode" xml:space="preserve">
<value>Visual Mode</value>
<value>비주얼 모드</value>
</data>
<data name="VisualModesHDR" xml:space="preserve">
<value>Visual Modes are not available when HDR is active</value>
<value>HDR이 켜져 있을 때에는 비주얼 모드를 사용할 수 없습니다.</value>
</data>
<data name="VisualModesScreen" xml:space="preserve">
<value>Visual Modes are not available when laptop screen is off</value>
<value>노트북의 화면이 꺼져 있을 때에는 비주얼 모드를 사용할 수 없습니다.</value>
</data>
<data name="VolumeDown" xml:space="preserve">
<value>볼륨 작게</value>
@@ -792,6 +792,6 @@
<value>창을 항상 맨 위로 유지</value>
</data>
<data name="Zoom" xml:space="preserve">
<value>Zoom</value>
<value>확대/축소</value>
</data>
</root>

View File

@@ -1231,6 +1231,7 @@ namespace GHelper
else if (miniled2 >= 0)
{
buttonMiniled.Enabled = !hdr;
if (hdr) miniled2 = 1; // Show HDR as Multizone Strong
switch (miniled2)
{
@@ -1248,9 +1249,9 @@ namespace GHelper
break;
// Multizone Off
case 2:
buttonMiniled.Text = hdr ? Properties.Strings.Multizone : Properties.Strings.OneZone;
buttonMiniled.Text = Properties.Strings.OneZone;
buttonMiniled.BorderColor = colorStandard;
buttonMiniled.Activated = hdr;
buttonMiniled.Activated = false;
break;
}
}