This commit is contained in:
Serge
2023-10-01 11:22:20 +02:00
parent 35355f6cb7
commit 9f836ff356
2 changed files with 54 additions and 19 deletions

View File

@@ -4,6 +4,7 @@ using GHelper.Mode;
using Microsoft.Win32; using Microsoft.Win32;
using System.Diagnostics; using System.Diagnostics;
using System.Management; using System.Management;
using System.Text.RegularExpressions;
namespace GHelper.Input namespace GHelper.Input
{ {
@@ -142,25 +143,59 @@ namespace GHelper.Input
} }
public static int[] ParseHexValues(string input)
{
string pattern = @"\b(0x[0-9A-Fa-f]{1,2}|[0-9A-Fa-f]{1,2})\b";
if (!Regex.IsMatch(input, $"^{pattern}(\\s+{pattern})*$")) return new int[0];
MatchCollection matches = Regex.Matches(input, pattern);
int[] hexValues = new int[matches.Count];
for (int i = 0; i < matches.Count; i++)
{
string hexValueStr = matches[i].Value;
int hexValue = int.Parse(hexValueStr.StartsWith("0x", StringComparison.OrdinalIgnoreCase)
? hexValueStr.Substring(2)
: hexValueStr, System.Globalization.NumberStyles.HexNumber);
hexValues[i] = hexValue;
}
return hexValues;
}
static void CustomKey(string configKey = "m3") static void CustomKey(string configKey = "m3")
{ {
string command = AppConfig.GetString(configKey + "_custom"); string command = AppConfig.GetString(configKey + "_custom");
int intKey; int[] hexKeys = new int[0];
try try
{ {
intKey = Convert.ToInt32(command, 16); hexKeys = ParseHexValues(command);
} }
catch catch
{ {
intKey = -1;
} }
switch (hexKeys.Length)
if (intKey > 0) {
KeyboardHook.KeyPress((Keys)intKey); case 1:
else KeyboardHook.KeyPress((Keys)hexKeys[0]);
LaunchProcess(command); break;
case 2:
KeyboardHook.KeyKeyPress((Keys)hexKeys[0], (Keys)hexKeys[1]);
break;
case 3:
KeyboardHook.KeyKeyKeyPress((Keys)hexKeys[0], (Keys)hexKeys[1], (Keys)hexKeys[3]);
break;
default:
LaunchProcess(command);
break;
}
} }
@@ -264,7 +299,7 @@ namespace GHelper.Input
SetBrightness(+10); SetBrightness(+10);
break; break;
case Keys.F9: case Keys.F9:
KeyboardHook.KeyWinPress(Keys.P); KeyboardHook.KeyKeyPress(Keys.LWin, Keys.P);
break; break;
case Keys.F10: case Keys.F10:
HandleOptimizationEvent(107); HandleOptimizationEvent(107);
@@ -273,7 +308,7 @@ namespace GHelper.Input
HandleOptimizationEvent(108); HandleOptimizationEvent(108);
break; break;
case Keys.F12: case Keys.F12:
KeyboardHook.KeyWinPress(Keys.A); KeyboardHook.KeyKeyPress(Keys.LWin, Keys.A);
break; break;
case Keys.VolumeDown: case Keys.VolumeDown:
KeyProcess("m1"); KeyProcess("m1");
@@ -442,7 +477,7 @@ namespace GHelper.Input
static void ToggleTouchpad() static void ToggleTouchpad()
{ {
KeyboardHook.KeyCtrlWinPress(Keys.F24); KeyboardHook.KeyKeyKeyPress(Keys.ControlKey, Keys.LWin, Keys.F24);
} }
public static void ToggleArrowLock() public static void ToggleArrowLock()

View File

@@ -26,23 +26,23 @@ public sealed class KeyboardHook : IDisposable
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero); keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
} }
public static void KeyWinPress(Keys key) public static void KeyKeyPress(Keys key, Keys key2)
{ {
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, IntPtr.Zero);
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero); keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
keybd_event(VK_LWIN, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
} }
public static void KeyCtrlWinPress(Keys key) public static void KeyKeyKeyPress(Keys key, Keys key2, Keys key3)
{ {
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, IntPtr.Zero);
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
keybd_event((byte)key3, 0, KEYEVENTF_EXTENDEDKEY, IntPtr.Zero);
keybd_event((byte)key3, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
keybd_event((byte)key2, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, IntPtr.Zero);
keybd_event((byte)key, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 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> /// <summary>