mirror of
https://github.com/jkocon/g-helper.git
synced 2026-02-23 13:00:52 +01:00
Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
314d25c751 | ||
|
|
b52163949c | ||
|
|
f0ee2b8aac | ||
|
|
1603f625ed | ||
|
|
8f66006791 | ||
|
|
39387041fe | ||
|
|
400b2cd6cb | ||
|
|
b20442e61f | ||
|
|
6d219511fc | ||
|
|
2282820453 | ||
|
|
d4fcfe8895 |
@@ -60,7 +60,7 @@ public static class AppConfig
|
||||
{
|
||||
|
||||
GetModel();
|
||||
return (_model is not null && _model.Contains(contains));
|
||||
return (_model is not null && _model.ToLower().Contains(contains.ToLower()));
|
||||
|
||||
}
|
||||
private static void initConfig()
|
||||
|
||||
@@ -83,6 +83,7 @@ public class AsusACPI
|
||||
public const int TUF_KB_STATE = 0x00100057;
|
||||
|
||||
public const int TabletState = 0x00060077;
|
||||
public const int FnLock = 0x00100023;
|
||||
|
||||
public const int Tablet_Notebook = 0;
|
||||
public const int Tablet_Tablet = 1;
|
||||
|
||||
30
app/Extra.Designer.cs
generated
30
app/Extra.Designer.cs
generated
@@ -83,6 +83,7 @@ namespace GHelper
|
||||
checkSleepLid = new CheckBox();
|
||||
checkShutdownLid = new CheckBox();
|
||||
groupOther = new GroupBox();
|
||||
checkFnLock = new CheckBox();
|
||||
checkGpuApps = new CheckBox();
|
||||
checkAutoApplyWindowsPowerMode = new CheckBox();
|
||||
checkKeyboardAuto = new CheckBox();
|
||||
@@ -684,6 +685,7 @@ namespace GHelper
|
||||
//
|
||||
// groupOther
|
||||
//
|
||||
groupOther.Controls.Add(checkFnLock);
|
||||
groupOther.Controls.Add(checkGpuApps);
|
||||
groupOther.Controls.Add(checkAutoApplyWindowsPowerMode);
|
||||
groupOther.Controls.Add(checkKeyboardAuto);
|
||||
@@ -693,15 +695,26 @@ namespace GHelper
|
||||
groupOther.Dock = DockStyle.Top;
|
||||
groupOther.Location = new Point(10, 897);
|
||||
groupOther.Name = "groupOther";
|
||||
groupOther.Size = new Size(954, 310);
|
||||
groupOther.Size = new Size(954, 352);
|
||||
groupOther.TabIndex = 2;
|
||||
groupOther.TabStop = false;
|
||||
groupOther.Text = "Other";
|
||||
//
|
||||
// checkFnLock
|
||||
//
|
||||
checkFnLock.AutoSize = true;
|
||||
checkFnLock.Location = new Point(25, 89);
|
||||
checkFnLock.MaximumSize = new Size(780, 0);
|
||||
checkFnLock.Name = "checkFnLock";
|
||||
checkFnLock.Size = new Size(397, 36);
|
||||
checkFnLock.TabIndex = 49;
|
||||
checkFnLock.Text = "Process Fn+F hotkeys without Fn";
|
||||
checkFnLock.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// checkGpuApps
|
||||
//
|
||||
checkGpuApps.AutoSize = true;
|
||||
checkGpuApps.Location = new Point(25, 220);
|
||||
checkGpuApps.Location = new Point(25, 128);
|
||||
checkGpuApps.Name = "checkGpuApps";
|
||||
checkGpuApps.Size = new Size(544, 36);
|
||||
checkGpuApps.TabIndex = 48;
|
||||
@@ -711,7 +724,7 @@ namespace GHelper
|
||||
// checkAutoApplyWindowsPowerMode
|
||||
//
|
||||
checkAutoApplyWindowsPowerMode.AutoSize = true;
|
||||
checkAutoApplyWindowsPowerMode.Location = new Point(25, 268);
|
||||
checkAutoApplyWindowsPowerMode.Location = new Point(25, 296);
|
||||
checkAutoApplyWindowsPowerMode.Name = "checkAutoApplyWindowsPowerMode";
|
||||
checkAutoApplyWindowsPowerMode.Size = new Size(416, 36);
|
||||
checkAutoApplyWindowsPowerMode.TabIndex = 47;
|
||||
@@ -721,7 +734,7 @@ namespace GHelper
|
||||
// checkKeyboardAuto
|
||||
//
|
||||
checkKeyboardAuto.AutoSize = true;
|
||||
checkKeyboardAuto.Location = new Point(25, 40);
|
||||
checkKeyboardAuto.Location = new Point(25, 50);
|
||||
checkKeyboardAuto.MaximumSize = new Size(780, 0);
|
||||
checkKeyboardAuto.Name = "checkKeyboardAuto";
|
||||
checkKeyboardAuto.Size = new Size(712, 36);
|
||||
@@ -732,7 +745,7 @@ namespace GHelper
|
||||
// checkUSBC
|
||||
//
|
||||
checkUSBC.AutoSize = true;
|
||||
checkUSBC.Location = new Point(25, 85);
|
||||
checkUSBC.Location = new Point(25, 170);
|
||||
checkUSBC.Name = "checkUSBC";
|
||||
checkUSBC.Size = new Size(659, 36);
|
||||
checkUSBC.TabIndex = 4;
|
||||
@@ -742,7 +755,7 @@ namespace GHelper
|
||||
// checkNoOverdrive
|
||||
//
|
||||
checkNoOverdrive.AutoSize = true;
|
||||
checkNoOverdrive.Location = new Point(25, 130);
|
||||
checkNoOverdrive.Location = new Point(25, 212);
|
||||
checkNoOverdrive.Name = "checkNoOverdrive";
|
||||
checkNoOverdrive.Size = new Size(307, 36);
|
||||
checkNoOverdrive.TabIndex = 3;
|
||||
@@ -752,7 +765,7 @@ namespace GHelper
|
||||
// checkTopmost
|
||||
//
|
||||
checkTopmost.AutoSize = true;
|
||||
checkTopmost.Location = new Point(25, 175);
|
||||
checkTopmost.Location = new Point(25, 254);
|
||||
checkTopmost.Name = "checkTopmost";
|
||||
checkTopmost.Size = new Size(390, 36);
|
||||
checkTopmost.TabIndex = 1;
|
||||
@@ -765,7 +778,7 @@ namespace GHelper
|
||||
AutoScaleMode = AutoScaleMode.Font;
|
||||
AutoSize = true;
|
||||
AutoSizeMode = AutoSizeMode.GrowAndShrink;
|
||||
ClientSize = new Size(974, 1220);
|
||||
ClientSize = new Size(974, 1262);
|
||||
Controls.Add(groupOther);
|
||||
Controls.Add(groupLight);
|
||||
Controls.Add(groupBindings);
|
||||
@@ -859,5 +872,6 @@ namespace GHelper
|
||||
private NumericUpDown numericBacklightPluggedTime;
|
||||
private Label labelBacklightTimeoutPlugged;
|
||||
private CheckBox checkGpuApps;
|
||||
private CheckBox checkFnLock;
|
||||
}
|
||||
}
|
||||
13
app/Extra.cs
13
app/Extra.cs
@@ -1,4 +1,5 @@
|
||||
using CustomControls;
|
||||
using Microsoft.VisualBasic.Devices;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace GHelper
|
||||
@@ -93,6 +94,7 @@ namespace GHelper
|
||||
checkTopmost.Text = Properties.Strings.WindowTop;
|
||||
checkUSBC.Text = Properties.Strings.OptimizedUSBC;
|
||||
checkAutoApplyWindowsPowerMode.Text = Properties.Strings.ApplyWindowsPowerPlan;
|
||||
checkFnLock.Text = Properties.Strings.FnLock;
|
||||
|
||||
labelBacklight.Text = Properties.Strings.Keyboard;
|
||||
labelBacklightBar.Text = Properties.Strings.Lightbar;
|
||||
@@ -222,6 +224,17 @@ namespace GHelper
|
||||
checkGpuApps.Checked = AppConfig.isConfig("kill_gpu_apps");
|
||||
checkGpuApps.CheckedChanged += CheckGpuApps_CheckedChanged;
|
||||
|
||||
checkFnLock.Checked = AppConfig.isConfig("fn_lock");
|
||||
checkFnLock.CheckedChanged += CheckFnLock_CheckedChanged; ;
|
||||
}
|
||||
|
||||
private void CheckFnLock_CheckedChanged(object? sender, EventArgs e)
|
||||
{
|
||||
int fnLock = checkFnLock.Checked ? 1 : 0;
|
||||
AppConfig.setConfig("fn_lock", fnLock);
|
||||
Program.acpi.DeviceSet(AsusACPI.FnLock, (fnLock == 1) ? 0 : 1, "FnLock");
|
||||
|
||||
Program.inputDispatcher.RegisterKeys();
|
||||
}
|
||||
|
||||
private void CheckGpuApps_CheckedChanged(object? sender, EventArgs e)
|
||||
|
||||
@@ -417,7 +417,6 @@ namespace GHelper
|
||||
|
||||
powerVisible = panelPower.Visible = modeA0;
|
||||
panelB0.Visible = modeB0;
|
||||
panelC1.Visible = modeC1;
|
||||
|
||||
|
||||
// All AMD version has B0 but doesn't have C0 (Nvidia GPU) settings
|
||||
@@ -431,6 +430,7 @@ namespace GHelper
|
||||
{
|
||||
labelLeftA0.Text = "CPU Slow (SPL + sPPT)";
|
||||
labelLeftC1.Text = "CPU Fast (fPPT)";
|
||||
panelC1.Visible = modeC1;
|
||||
}
|
||||
|
||||
int limit_total;
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<ProduceReferenceAssembly>False</ProduceReferenceAssembly>
|
||||
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
|
||||
<AssemblyVersion>0.73</AssemblyVersion>
|
||||
<AssemblyVersion>0.75</AssemblyVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
using NvAPIWrapper;
|
||||
using NvAPIWrapper.GPU;
|
||||
using NvAPIWrapper.GPU;
|
||||
using NvAPIWrapper.Native;
|
||||
using NvAPIWrapper.Native.Delegates;
|
||||
using NvAPIWrapper.Native.GPU;
|
||||
using NvAPIWrapper.Native.GPU.Structures;
|
||||
using NvAPIWrapper.Native.Interfaces.GPU;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Management;
|
||||
using static NvAPIWrapper.Native.GPU.Structures.PerformanceStates20InfoV1;
|
||||
|
||||
namespace GHelper.Gpu;
|
||||
@@ -58,7 +54,7 @@ public class NvidiaGpuControl : IGpuControl
|
||||
|
||||
try
|
||||
{
|
||||
Process[] processes = internalGpu.GetActiveApplications();
|
||||
Process[] processes = internalGpu.GetActiveApplications();
|
||||
foreach (Process process in processes)
|
||||
{
|
||||
try
|
||||
@@ -98,10 +94,11 @@ public class NvidiaGpuControl : IGpuControl
|
||||
Logger.WriteLine($"GET GPU CLOCKS: {core}, {memory}");
|
||||
return 0;
|
||||
|
||||
} catch (Exception ex)
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine("GET GPU CLOCKS:" + ex.Message);
|
||||
core = memory = 0;
|
||||
core = memory = 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -155,7 +152,7 @@ public class NvidiaGpuControl : IGpuControl
|
||||
//Thread.Sleep(2000);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex )
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine(ex.ToString());
|
||||
return false;
|
||||
@@ -195,7 +192,7 @@ public class NvidiaGpuControl : IGpuControl
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine("SET GPU CLOCKS: "+ex.Message);
|
||||
Logger.WriteLine("SET GPU CLOCKS: " + ex.Message);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,9 +19,12 @@ public static class HardwareControl
|
||||
public static int GetFanMax()
|
||||
{
|
||||
int max = 58;
|
||||
int configMax = AppConfig.getConfig("fan_max");
|
||||
if (configMax > 100) configMax = 0; // skipping inadvequate settings
|
||||
|
||||
if (AppConfig.ContainsModel("401")) max = 72;
|
||||
else if (AppConfig.ContainsModel("503")) max = 68;
|
||||
return Math.Max(max, AppConfig.getConfig("fan_max"));
|
||||
return Math.Max(max, configMax);
|
||||
}
|
||||
|
||||
public static void SetFanMax(int fan)
|
||||
@@ -179,4 +182,38 @@ public static class HardwareControl
|
||||
Debug.WriteLine(ex.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static void KillGPUApps()
|
||||
{
|
||||
|
||||
List<string> tokill = new() { "EADesktop", "RadeonSoftware", "epicgameslauncher" };
|
||||
|
||||
if (AppConfig.isConfig("kill_gpu_apps"))
|
||||
{
|
||||
tokill.Add("nvdisplay.container");
|
||||
tokill.Add("nvcontainer");
|
||||
tokill.Add("nvcplui");
|
||||
}
|
||||
|
||||
foreach (string kill in tokill)
|
||||
foreach (var process in Process.GetProcessesByName(kill))
|
||||
{
|
||||
try
|
||||
{
|
||||
process.Kill();
|
||||
Logger.WriteLine($"Stopped: {process.ProcessName}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine($"Failed to stop: {process.ProcessName} {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
if (AppConfig.isConfig("kill_gpu_apps") && GpuControl is not null && GpuControl.IsNvidia)
|
||||
{
|
||||
NvidiaGpuControl nvControl = (NvidiaGpuControl)GpuControl;
|
||||
nvControl.KillGPUApps();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
using HidLibrary;
|
||||
using Microsoft.Win32;
|
||||
using NAudio.CoreAudioApi;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Management;
|
||||
using Tools;
|
||||
|
||||
namespace GHelper
|
||||
{
|
||||
@@ -57,34 +55,22 @@ namespace GHelper
|
||||
System.Timers.Timer timer = new System.Timers.Timer(1000);
|
||||
public bool backlight = true;
|
||||
|
||||
private static nint windowHandle;
|
||||
|
||||
public static Keys keyProfile = Keys.F5;
|
||||
public static Keys keyApp = Keys.F12;
|
||||
|
||||
KeyboardListener listener;
|
||||
KeyboardHook hook = new KeyboardHook();
|
||||
|
||||
KeyHandler m1, m2, handlerProfile, handlerApp;
|
||||
|
||||
public InputDispatcher(nint handle)
|
||||
public InputDispatcher()
|
||||
{
|
||||
|
||||
windowHandle = handle;
|
||||
|
||||
byte[] result = Program.acpi.DeviceInit();
|
||||
Debug.WriteLine($"Init: {BitConverter.ToString(result)}");
|
||||
|
||||
Program.acpi.SubscribeToEvents(WatcherEventArrived);
|
||||
//Task.Run(Program.acpi.RunListener);
|
||||
|
||||
// CTRL + SHIFT + F5 to cycle profiles
|
||||
if (AppConfig.getConfig("keybind_profile") != -1) keyProfile = (Keys)AppConfig.getConfig("keybind_profile");
|
||||
|
||||
handlerProfile = new KeyHandler(KeyHandler.SHIFT | KeyHandler.CTRL, keyProfile, windowHandle);
|
||||
handlerApp = new KeyHandler(KeyHandler.SHIFT | KeyHandler.CTRL, keyApp, windowHandle);
|
||||
|
||||
m1 = new KeyHandler(KeyHandler.NOMOD, Keys.VolumeDown, windowHandle);
|
||||
m2 = new KeyHandler(KeyHandler.NOMOD, Keys.VolumeUp, windowHandle);
|
||||
hook.KeyPressed += new EventHandler<KeyPressedEventArgs>(KeyPressed);
|
||||
|
||||
RegisterKeys();
|
||||
|
||||
@@ -100,7 +86,7 @@ namespace GHelper
|
||||
|
||||
if (SystemInformation.PowerStatus.PowerLineStatus == PowerLineStatus.Online)
|
||||
kb_timeout = AppConfig.getConfig("keyboard_ac_timeout", 0);
|
||||
else
|
||||
else
|
||||
kb_timeout = AppConfig.getConfig("keyboard_timeout", 60);
|
||||
|
||||
if (kb_timeout == 0) return;
|
||||
@@ -142,20 +128,26 @@ namespace GHelper
|
||||
|
||||
public void RegisterKeys()
|
||||
{
|
||||
hook.UnregisterAll();
|
||||
|
||||
// CTRL + SHIFT + F5 to cycle profiles
|
||||
if (AppConfig.getConfig("keybind_profile") != -1) keyProfile = (Keys)AppConfig.getConfig("keybind_profile");
|
||||
if (AppConfig.getConfig("keybind_app") != -1) keyApp = (Keys)AppConfig.getConfig("keybind_app");
|
||||
|
||||
string actionM1 = AppConfig.getConfigString("m1");
|
||||
string actionM2 = AppConfig.getConfigString("m2");
|
||||
|
||||
handlerProfile.Unregiser();
|
||||
m1.Unregiser();
|
||||
m2.Unregiser();
|
||||
if (keyProfile != Keys.None) hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control, keyProfile);
|
||||
if (keyApp != Keys.None) hook.RegisterHotKey(ModifierKeys.Shift | ModifierKeys.Control, keyApp);
|
||||
|
||||
if (keyProfile != Keys.None) handlerProfile.Register();
|
||||
if (keyApp != Keys.None) handlerApp.Register();
|
||||
if (!AppConfig.ContainsModel("Z13"))
|
||||
if (actionM1 is not null && actionM1.Length > 0) hook.RegisterHotKey(ModifierKeys.None, Keys.VolumeDown);
|
||||
if (actionM2 is not null && actionM2.Length > 0) hook.RegisterHotKey(ModifierKeys.None, Keys.VolumeUp);
|
||||
|
||||
if (actionM1 is not null && actionM1.Length > 0) m1.Register();
|
||||
// FN-Lock group
|
||||
|
||||
if (actionM2 is not null && actionM2.Length > 0) m2.Register();
|
||||
if (AppConfig.isConfig("fn_lock") && !AppConfig.ContainsModel("VivoBook"))
|
||||
for (Keys i = Keys.F1; i <= Keys.F11; i++) hook.RegisterHotKey(ModifierKeys.None, i);
|
||||
|
||||
}
|
||||
|
||||
@@ -175,12 +167,102 @@ namespace GHelper
|
||||
|
||||
|
||||
if (intKey > 0)
|
||||
NativeMethods.KeyPress(intKey);
|
||||
KeyboardHook.KeyPress((Keys)intKey);
|
||||
else
|
||||
LaunchProcess(command);
|
||||
|
||||
}
|
||||
|
||||
public void KeyPressed(object sender, KeyPressedEventArgs e)
|
||||
{
|
||||
|
||||
if (e.Modifier == ModifierKeys.None)
|
||||
{
|
||||
Logger.WriteLine(e.Key.ToString());
|
||||
|
||||
if (AppConfig.ContainsModel("Z13"))
|
||||
{
|
||||
switch (e.Key)
|
||||
{
|
||||
case Keys.F2:
|
||||
KeyboardHook.KeyPress(Keys.VolumeDown);
|
||||
return;
|
||||
case Keys.F3:
|
||||
KeyboardHook.KeyPress(Keys.VolumeUp);
|
||||
return;
|
||||
case Keys.F4:
|
||||
KeyProcess("m3");
|
||||
return;
|
||||
case Keys.F11:
|
||||
OptimizationEvent(199);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
switch (e.Key)
|
||||
{
|
||||
case Keys.F1:
|
||||
KeyboardHook.KeyPress(Keys.VolumeMute);
|
||||
break;
|
||||
case Keys.F2:
|
||||
OptimizationEvent(197);
|
||||
break;
|
||||
case Keys.F3:
|
||||
OptimizationEvent(196);
|
||||
break;
|
||||
case Keys.F4:
|
||||
KeyProcess("fnf4");
|
||||
break;
|
||||
case Keys.F5:
|
||||
KeyProcess("fnf5");
|
||||
break;
|
||||
case Keys.F6:
|
||||
KeyboardHook.KeyPress(Keys.Snapshot);
|
||||
break;
|
||||
case Keys.F7:
|
||||
if (AppConfig.ContainsModel("TUF"))
|
||||
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, ScreenBrightness.Adjust(-10) + "%", ToastIcon.BrightnessDown);
|
||||
OptimizationEvent(16);
|
||||
break;
|
||||
case Keys.F8:
|
||||
if (AppConfig.ContainsModel("TUF"))
|
||||
Program.settingsForm.BeginInvoke(Program.settingsForm.RunToast, ScreenBrightness.Adjust(+10) + "%", ToastIcon.BrightnessUp);
|
||||
OptimizationEvent(32);
|
||||
break;
|
||||
case Keys.F9:
|
||||
KeyboardHook.KeyWinPress(Keys.P);
|
||||
break;
|
||||
case Keys.F10:
|
||||
OptimizationEvent(107);
|
||||
break;
|
||||
case Keys.F11:
|
||||
OptimizationEvent(108);
|
||||
break;
|
||||
case Keys.F12:
|
||||
KeyboardHook.KeyWinPress(Keys.A);
|
||||
break;
|
||||
case Keys.VolumeDown:
|
||||
KeyProcess("m1");
|
||||
break;
|
||||
case Keys.VolumeUp:
|
||||
KeyProcess("m2");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (e.Modifier == (ModifierKeys.Control | ModifierKeys.Shift))
|
||||
{
|
||||
if (e.Key == keyProfile) Program.settingsForm.CyclePerformanceMode();
|
||||
if (e.Key == keyApp) Program.SettingsToggle();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void KeyProcess(string name = "m3")
|
||||
{
|
||||
string action = AppConfig.getConfigString(name);
|
||||
@@ -200,13 +282,13 @@ namespace GHelper
|
||||
switch (action)
|
||||
{
|
||||
case "mute":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_VOLUME_MUTE);
|
||||
KeyboardHook.KeyPress(Keys.VolumeMute);
|
||||
break;
|
||||
case "play":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_MEDIA_PLAY_PAUSE);
|
||||
KeyboardHook.KeyPress(Keys.MediaPlayPause);
|
||||
break;
|
||||
case "screenshot":
|
||||
NativeMethods.KeyPress(NativeMethods.VK_SNAPSHOT);
|
||||
KeyboardHook.KeyPress(Keys.Snapshot);
|
||||
break;
|
||||
case "screen":
|
||||
NativeMethods.TurnOffScreen(Program.settingsForm.Handle);
|
||||
@@ -252,6 +334,13 @@ namespace GHelper
|
||||
}
|
||||
}
|
||||
|
||||
static void ToggleFnLock()
|
||||
{
|
||||
int fnLock = AppConfig.isConfig("fn_lock") ? 0 : 1;
|
||||
AppConfig.setConfig("fn_lock", fnLock);
|
||||
Program.acpi.DeviceSet(AsusACPI.FnLock, (fnLock == 1) ? 0 : 1, "FnLock");
|
||||
}
|
||||
|
||||
static void TabletMode()
|
||||
{
|
||||
bool touchpadState = GetTouchpadState();
|
||||
@@ -283,9 +372,16 @@ namespace GHelper
|
||||
case 189: // Tablet mode
|
||||
TabletMode();
|
||||
return;
|
||||
case 78: // Fn + ESC
|
||||
ToggleFnLock();
|
||||
return;
|
||||
}
|
||||
|
||||
if (OptimizationService.IsRunning()) return;
|
||||
if (!OptimizationService.IsRunning()) OptimizationEvent(EventID);
|
||||
}
|
||||
|
||||
static void OptimizationEvent(int EventID)
|
||||
{
|
||||
|
||||
// Asus Optimization service Events
|
||||
|
||||
|
||||
173
app/KeyboardHook.cs
Normal file
173
app/KeyboardHook.cs
Normal file
@@ -0,0 +1,173 @@
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
public sealed class KeyboardHook : IDisposable
|
||||
{
|
||||
// Registers a hot key with Windows.
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
|
||||
// Unregisters the hot key with Windows.
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
|
||||
|
||||
[DllImport("user32.dll", SetLastError = true)]
|
||||
public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo);
|
||||
|
||||
public const int KEYEVENTF_EXTENDEDKEY = 1;
|
||||
public const int KEYEVENTF_KEYUP = 2;
|
||||
private const byte VK_LWIN = 0x5B;
|
||||
|
||||
public static void KeyPress(Keys key)
|
||||
{
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
}
|
||||
|
||||
public static void KeyWinPress(Keys key)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Represents the window that is used internally to get the messages.
|
||||
/// </summary>
|
||||
private class Window : NativeWindow, IDisposable
|
||||
{
|
||||
private static int WM_HOTKEY = 0x0312;
|
||||
public static Keys? fakeKey;
|
||||
|
||||
public Window()
|
||||
{
|
||||
// create the handle for the window.
|
||||
this.CreateHandle(new CreateParams());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overridden to get the notifications.
|
||||
/// </summary>
|
||||
/// <param name="m"></param>
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
base.WndProc(ref m);
|
||||
|
||||
// check if we got a hot key pressed.
|
||||
if (m.Msg == WM_HOTKEY)
|
||||
{
|
||||
// get the keys.
|
||||
Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF);
|
||||
ModifierKeys modifier = (ModifierKeys)((int)m.LParam & 0xFFFF);
|
||||
|
||||
// invoke the event to notify the parent.
|
||||
if (KeyPressed != null)
|
||||
KeyPressed(this, new KeyPressedEventArgs(modifier, key));
|
||||
}
|
||||
}
|
||||
|
||||
public event EventHandler<KeyPressedEventArgs> KeyPressed;
|
||||
|
||||
#region IDisposable Members
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
this.DestroyHandle();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
private Window _window = new Window();
|
||||
private int _currentId;
|
||||
|
||||
public KeyboardHook()
|
||||
{
|
||||
// register the event of the inner native window.
|
||||
_window.KeyPressed += delegate (object sender, KeyPressedEventArgs args)
|
||||
{
|
||||
if (KeyPressed != null)
|
||||
KeyPressed(this, args);
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registers a hot key in the system.
|
||||
/// </summary>
|
||||
/// <param name="modifier">The modifiers that are associated with the hot key.</param>
|
||||
/// <param name="key">The key itself that is associated with the hot key.</param>
|
||||
public void RegisterHotKey(ModifierKeys modifier, Keys key)
|
||||
{
|
||||
// increment the counter.
|
||||
_currentId = _currentId + 1;
|
||||
|
||||
// register the hot key.
|
||||
if (!RegisterHotKey(_window.Handle, _currentId, (uint)modifier, (uint)key))
|
||||
Logger.WriteLine("Couldn’t register " + key);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// A hot key has been pressed.
|
||||
/// </summary>
|
||||
public event EventHandler<KeyPressedEventArgs> KeyPressed;
|
||||
|
||||
#region IDisposable Members
|
||||
|
||||
public void UnregisterAll()
|
||||
{
|
||||
// unregister all the registered hot keys.
|
||||
for (int i = _currentId; i > 0; i--)
|
||||
{
|
||||
UnregisterHotKey(_window.Handle, i);
|
||||
}
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
UnregisterAll();
|
||||
// dispose the inner native window.
|
||||
_window.Dispose();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Event Args for the event that is fired after the hot key has been pressed.
|
||||
/// </summary>
|
||||
public class KeyPressedEventArgs : EventArgs
|
||||
{
|
||||
private ModifierKeys _modifier;
|
||||
private Keys _key;
|
||||
|
||||
internal KeyPressedEventArgs(ModifierKeys modifier, Keys key)
|
||||
{
|
||||
_modifier = modifier;
|
||||
_key = key;
|
||||
}
|
||||
|
||||
public ModifierKeys Modifier
|
||||
{
|
||||
get { return _modifier; }
|
||||
}
|
||||
|
||||
public Keys Key
|
||||
{
|
||||
get { return _key; }
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The enumeration of possible modifiers.
|
||||
/// </summary>
|
||||
[Flags]
|
||||
public enum ModifierKeys : uint
|
||||
{
|
||||
None = 0,
|
||||
Alt = 1,
|
||||
Control = 2,
|
||||
Shift = 4,
|
||||
Win = 8
|
||||
}
|
||||
@@ -1,54 +1,11 @@
|
||||
using GHelper;
|
||||
using System.ComponentModel;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar;
|
||||
using static Tools.ScreenInterrogatory;
|
||||
|
||||
namespace Tools
|
||||
{
|
||||
|
||||
public class KeyHandler
|
||||
{
|
||||
|
||||
public const int NOMOD = 0x0000;
|
||||
public const int ALT = 0x0001;
|
||||
public const int CTRL = 0x0002;
|
||||
public const int SHIFT = 0x0004;
|
||||
public const int WIN = 0x0008;
|
||||
|
||||
public const int WM_HOTKEY_MSG_ID = 0x0312;
|
||||
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vk);
|
||||
[DllImport("user32.dll")]
|
||||
private static extern bool UnregisterHotKey(IntPtr hWnd, int id);
|
||||
|
||||
private int modifier;
|
||||
private int key;
|
||||
private IntPtr hWnd;
|
||||
private int id;
|
||||
public KeyHandler(int modifier, Keys key, nint handle)
|
||||
{
|
||||
this.modifier = modifier;
|
||||
this.key = (int)key;
|
||||
this.hWnd = handle;
|
||||
id = this.GetHashCode();
|
||||
}
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return modifier ^ key ^ hWnd.ToInt32();
|
||||
}
|
||||
public bool Register()
|
||||
{
|
||||
return RegisterHotKey(hWnd, id, modifier, key);
|
||||
}
|
||||
public bool Unregiser()
|
||||
{
|
||||
return UnregisterHotKey(hWnd, id);
|
||||
}
|
||||
}
|
||||
|
||||
public static class ScreenInterrogatory
|
||||
{
|
||||
@@ -459,24 +416,6 @@ public class NativeMethods
|
||||
public static extern bool SetSuspendState(bool hiberate, bool forceCritical, bool disableWakeEvent);
|
||||
|
||||
|
||||
public const int KEYEVENTF_EXTENDEDKEY = 1;
|
||||
public const int KEYEVENTF_KEYUP = 2;
|
||||
|
||||
public const int VK_MEDIA_NEXT_TRACK = 0xB0;
|
||||
public const int VK_MEDIA_PLAY_PAUSE = 0xB3;
|
||||
public const int VK_MEDIA_PREV_TRACK = 0xB1;
|
||||
public const int VK_VOLUME_MUTE = 0xAD;
|
||||
public const int VK_SNAPSHOT = 0x2C;
|
||||
|
||||
[DllImport("user32.dll", SetLastError = true)]
|
||||
public static extern void keybd_event(byte virtualKey, byte scanCode, uint flags, IntPtr extraInfo);
|
||||
|
||||
public static void KeyPress(int key = VK_MEDIA_PLAY_PAUSE)
|
||||
{
|
||||
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
|
||||
}
|
||||
|
||||
|
||||
[DllImport("user32.dll")]
|
||||
public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
|
||||
public const int SW_RESTORE = 9;
|
||||
@@ -763,6 +702,8 @@ public class NativeMethods
|
||||
{
|
||||
Guid activeSchemeGuid = GetActiveScheme();
|
||||
|
||||
if (boost == GetCPUBoost()) return;
|
||||
|
||||
var hrAC = PowerWriteACValueIndex(
|
||||
IntPtr.Zero,
|
||||
activeSchemeGuid,
|
||||
|
||||
@@ -77,7 +77,7 @@ namespace GHelper
|
||||
|
||||
trayIcon.MouseClick += TrayIcon_MouseClick;
|
||||
|
||||
inputDispatcher = new InputDispatcher(ds);
|
||||
inputDispatcher = new InputDispatcher();
|
||||
|
||||
settingsForm.InitAura();
|
||||
settingsForm.InitMatrix();
|
||||
|
||||
9
app/Properties/Strings.Designer.cs
generated
9
app/Properties/Strings.Designer.cs
generated
@@ -510,6 +510,15 @@ namespace GHelper.Properties {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Process Fn+F hotkeys without Fn.
|
||||
/// </summary>
|
||||
internal static string FnLock {
|
||||
get {
|
||||
return ResourceManager.GetString("FnLock", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Dynamic Boost.
|
||||
/// </summary>
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
<value>Apagar con batería tras (segundos)</value>
|
||||
</data>
|
||||
<data name="BacklightTimeoutPlugged" xml:space="preserve">
|
||||
<value>Apagar cuando está enchufado tras (0 - siempre encendida)</value>
|
||||
<value>Apagar cuando está enchufado tras (0 - nunca)</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>Equilibrado</value>
|
||||
@@ -307,7 +307,7 @@
|
||||
<value>Bajar retroiluminación con batería</value>
|
||||
</data>
|
||||
<data name="KillGpuApps" xml:space="preserve">
|
||||
<value>Detener todas las aplicaciones que usan la GPU cuando se cambia a Eco</value>
|
||||
<value>Detener todas las aplicaciones que usan la dGPU cuando se cambia a Eco</value>
|
||||
</data>
|
||||
<data name="LaptopBacklight" xml:space="preserve">
|
||||
<value>Retroiluminación</value>
|
||||
|
||||
@@ -267,6 +267,9 @@
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>Fans + Power</value>
|
||||
</data>
|
||||
<data name="FnLock" xml:space="preserve">
|
||||
<value>Process Fn+F hotkeys without Fn</value>
|
||||
</data>
|
||||
<data name="GPUBoost" xml:space="preserve">
|
||||
<value>Dynamic Boost</value>
|
||||
</data>
|
||||
|
||||
@@ -189,6 +189,12 @@
|
||||
<data name="Awake" xml:space="preserve">
|
||||
<value>唤醒时</value>
|
||||
</data>
|
||||
<data name="BacklightTimeout" xml:space="preserve">
|
||||
<value>使用电池时的背光超时时间</value>
|
||||
</data>
|
||||
<data name="BacklightTimeoutPlugged" xml:space="preserve">
|
||||
<value>插入电源时的背光超时时间 (0 - 始终开启)</value>
|
||||
</data>
|
||||
<data name="Balanced" xml:space="preserve">
|
||||
<value>平衡模式</value>
|
||||
</data>
|
||||
@@ -258,6 +264,9 @@
|
||||
<data name="FansPower" xml:space="preserve">
|
||||
<value>风扇与电源设置</value>
|
||||
</data>
|
||||
<data name="FnLock" xml:space="preserve">
|
||||
<value>无需FN处理 Fn+F 热键</value>
|
||||
</data>
|
||||
<data name="GPUChanging" xml:space="preserve">
|
||||
<value>切换中...</value>
|
||||
</data>
|
||||
@@ -282,6 +291,9 @@
|
||||
<data name="KeyboardAuto" xml:space="preserve">
|
||||
<value>电池模式下降低键盘亮度以省电,并在插上电源时恢复</value>
|
||||
</data>
|
||||
<data name="KillGpuApps" xml:space="preserve">
|
||||
<value>当切换到集显模式时,停止所有正在使用dGPU的应用</value>
|
||||
</data>
|
||||
<data name="LaptopBacklight" xml:space="preserve">
|
||||
<value>背光</value>
|
||||
</data>
|
||||
@@ -324,6 +336,9 @@
|
||||
<data name="Multizone" xml:space="preserve">
|
||||
<value>多区域设置</value>
|
||||
</data>
|
||||
<data name="MuteMic" xml:space="preserve">
|
||||
<value>静音麦克风</value>
|
||||
</data>
|
||||
<data name="OpenGHelper" xml:space="preserve">
|
||||
<value>打开G-Helper窗口</value>
|
||||
</data>
|
||||
@@ -333,6 +348,9 @@
|
||||
<data name="OptimizedGPUTooltip" xml:space="preserve">
|
||||
<value>使用电池时切换到集显模式,并在插上电源后重新启用标准模式</value>
|
||||
</data>
|
||||
<data name="OptimizedUSBC" xml:space="preserve">
|
||||
<value>在自动切换模式下,使用USB-C充电器时禁用GPU</value>
|
||||
</data>
|
||||
<data name="Other" xml:space="preserve">
|
||||
<value>其他</value>
|
||||
</data>
|
||||
@@ -405,10 +423,16 @@
|
||||
<data name="VersionLabel" xml:space="preserve">
|
||||
<value>版本</value>
|
||||
</data>
|
||||
<data name="VolumeDown" xml:space="preserve">
|
||||
<value>音量降低</value>
|
||||
</data>
|
||||
<data name="VolumeMute" xml:space="preserve">
|
||||
<value>静音</value>
|
||||
</data>
|
||||
<data name="VolumeUp" xml:space="preserve">
|
||||
<value>音量增加</value>
|
||||
</data>
|
||||
<data name="WindowTop" xml:space="preserve">
|
||||
<value>窗口置顶</value>
|
||||
</data>
|
||||
</root>
|
||||
</root>
|
||||
@@ -209,26 +209,6 @@ namespace GHelper
|
||||
}
|
||||
m.Result = (IntPtr)1;
|
||||
break;
|
||||
|
||||
case KeyHandler.WM_HOTKEY_MSG_ID:
|
||||
|
||||
Keys key = (Keys)(((int)m.LParam >> 16) & 0xFFFF);
|
||||
|
||||
switch (key)
|
||||
{
|
||||
case Keys.VolumeDown:
|
||||
InputDispatcher.KeyProcess("m1");
|
||||
break;
|
||||
case Keys.VolumeUp:
|
||||
InputDispatcher.KeyProcess("m2");
|
||||
break;
|
||||
default:
|
||||
if (key == InputDispatcher.keyProfile) CyclePerformanceMode();
|
||||
if (key == InputDispatcher.keyApp) Program.SettingsToggle();
|
||||
break;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
try
|
||||
@@ -338,7 +318,7 @@ namespace GHelper
|
||||
|
||||
if (Program.acpi.DeviceGet(AsusACPI.GPUXG) == 1)
|
||||
{
|
||||
KillGPUApps();
|
||||
HardwareControl.KillGPUApps();
|
||||
DialogResult dialogResult = MessageBox.Show("Did you close all applications running on XG Mobile?", "Disabling XG Mobile", MessageBoxButtons.YesNo);
|
||||
if (dialogResult == DialogResult.Yes)
|
||||
{
|
||||
@@ -973,8 +953,8 @@ namespace GHelper
|
||||
labelBattery.Text = battery;
|
||||
});
|
||||
|
||||
string trayTip = "CPU" + cpuTemp + HardwareControl.cpuFan;
|
||||
if (gpuTemp.Length > 0) trayTip += "\nGPU" + gpuTemp + HardwareControl.gpuFan;
|
||||
string trayTip = "CPU" + cpuTemp + " " + HardwareControl.cpuFan;
|
||||
if (gpuTemp.Length > 0) trayTip += "\nGPU" + gpuTemp + " " + HardwareControl.gpuFan;
|
||||
if (battery.Length > 0) trayTip += "\n" + battery;
|
||||
|
||||
Program.trayIcon.Text = trayTip;
|
||||
@@ -1304,9 +1284,10 @@ namespace GHelper
|
||||
|
||||
if (AppConfig.isConfig("keyboard_auto") && SystemInformation.PowerStatus.PowerLineStatus != PowerLineStatus.Online)
|
||||
AsusUSB.ApplyBrightness(0);
|
||||
else if (backlight >= 0)
|
||||
else
|
||||
AsusUSB.ApplyBrightness(backlight);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void AutoPerformance()
|
||||
@@ -1535,29 +1516,6 @@ namespace GHelper
|
||||
|
||||
}
|
||||
|
||||
protected static void KillGPUApps()
|
||||
{
|
||||
string[] tokill = { "EADesktop", "RadeonSoftware", "epicgameslauncher", "nvdisplay.container", "nvcontainer", "nvcplui" };
|
||||
|
||||
foreach (string kill in tokill)
|
||||
foreach (var process in Process.GetProcessesByName(kill))
|
||||
{
|
||||
try
|
||||
{
|
||||
process.Kill();
|
||||
Logger.WriteLine($"Stopped: {process.ProcessName}");
|
||||
} catch (Exception ex)
|
||||
{
|
||||
Logger.WriteLine($"Failed to stop: {process.ProcessName} {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
if (AppConfig.isConfig("kill_gpu_apps") && HardwareControl.GpuControl is not null && HardwareControl.GpuControl.IsNvidia)
|
||||
{
|
||||
NvidiaGpuControl nvControl = (NvidiaGpuControl)HardwareControl.GpuControl;
|
||||
nvControl.KillGPUApps();
|
||||
}
|
||||
}
|
||||
|
||||
public void SetGPUEco(int eco, bool hardWay = false)
|
||||
{
|
||||
@@ -1575,7 +1533,7 @@ namespace GHelper
|
||||
|
||||
int status = 1;
|
||||
|
||||
if (eco == 1) KillGPUApps();
|
||||
if (eco == 1) HardwareControl.KillGPUApps();
|
||||
|
||||
Logger.WriteLine($"Running eco command {eco}");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user