From 92dd547b0256a0fc3214872d7e71fb5fdd4338b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Majdand=C5=BEi=C4=87?= Date: Thu, 11 Apr 2024 11:04:46 +0200 Subject: [PATCH] An update --- DD2Switcher/DD2Switcher.csproj | 49 ++--- DD2Switcher/Form1.cs | 13 +- DD2Switcher/HotKeyManager.cs | 181 +++++++++--------- DD2Switcher/Pixel.cs | 22 +-- DD2Switcher/Program.cs | 109 ++++++++--- DD2Switcher/beep.wav | Bin 0 -> 17848 bytes ...amework,Version=v4.8.AssemblyAttributes.cs | 4 + 7 files changed, 216 insertions(+), 162 deletions(-) create mode 100644 DD2Switcher/beep.wav create mode 100644 DD2Switcher/obj/Release/.NETFramework,Version=v4.8.AssemblyAttributes.cs diff --git a/DD2Switcher/DD2Switcher.csproj b/DD2Switcher/DD2Switcher.csproj index a4a34ac..3db0316 100644 --- a/DD2Switcher/DD2Switcher.csproj +++ b/DD2Switcher/DD2Switcher.csproj @@ -1,6 +1,6 @@  - + Debug AnyCPU @@ -8,14 +8,14 @@ WinExe DD2Switcher DD2Switcher - v4.0 + v4.8.1 512 true true - latest + 10 - AnyCPU + x64 true full false @@ -23,28 +23,30 @@ DEBUG;TRACE prompt 4 + false - AnyCPU + x64 pdbonly true bin\Release\ TRACE prompt 4 + false - - - - - - - - - - - + + + + + + + + + + + @@ -53,10 +55,10 @@ Form1.cs - - - - + + + + ResXFileCodeGenerator Resources.Designer.cs @@ -77,7 +79,10 @@ - + - + + + + \ No newline at end of file diff --git a/DD2Switcher/Form1.cs b/DD2Switcher/Form1.cs index f53ed01..4cd1087 100644 --- a/DD2Switcher/Form1.cs +++ b/DD2Switcher/Form1.cs @@ -1,12 +1,9 @@ using System.Windows.Forms; -namespace DD2Switcher -{ - public partial class Form1 : Form - { - public Form1() - { - InitializeComponent(); - } +namespace DD2Switcher; + +public partial class Form1 : Form { + public Form1() { + InitializeComponent(); } } \ No newline at end of file diff --git a/DD2Switcher/HotKeyManager.cs b/DD2Switcher/HotKeyManager.cs index b56d733..ddf71d1 100644 --- a/DD2Switcher/HotKeyManager.cs +++ b/DD2Switcher/HotKeyManager.cs @@ -3,104 +3,103 @@ using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; -namespace DD2Switcher { - public static class HotKeyManager { - private static volatile MessageWindow _wnd; - private static volatile IntPtr _hwnd; - private static readonly ManualResetEvent _windowReadyEvent = new ManualResetEvent(false); +namespace DD2Switcher; - private static int _id; +public static class HotKeyManager { + private static volatile MessageWindow _wnd; + private static volatile IntPtr _hwnd; + private static readonly ManualResetEvent _windowReadyEvent = new(false); - static HotKeyManager() { - var messageLoop = new Thread(delegate() { Application.Run(new MessageWindow()); }); - messageLoop.Name = "MessageLoopThread"; - messageLoop.IsBackground = true; - messageLoop.Start(); - } + private static int _id; - public static event EventHandler HotKeyPressed; - - public static int RegisterHotKey(Keys key, KeyModifiers modifiers) { - _windowReadyEvent.WaitOne(); - var id = Interlocked.Increment(ref _id); - _wnd.Invoke(new RegisterHotKeyDelegate(RegisterHotKeyInternal), _hwnd, id, (uint)modifiers, (uint)key); - return id; - } - - public static void UnregisterHotKey(int id) { - _wnd.Invoke(new UnRegisterHotKeyDelegate(UnRegisterHotKeyInternal), _hwnd, id); - } - - private static void RegisterHotKeyInternal(IntPtr hwnd, int id, uint modifiers, uint key) { - RegisterHotKey(hwnd, id, modifiers, key); - } - - private static void UnRegisterHotKeyInternal(IntPtr hwnd, int id) { - UnregisterHotKey(_hwnd, id); - } - - private static void OnHotKeyPressed(HotKeyEventArgs e) { - if (HotKeyPressed != null) HotKeyPressed(null, e); - } - - [DllImport("user32", SetLastError = true)] - private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk); - - [DllImport("user32", SetLastError = true)] - private static extern bool UnregisterHotKey(IntPtr hWnd, int id); - - private delegate void RegisterHotKeyDelegate(IntPtr hwnd, int id, uint modifiers, uint key); - - private delegate void UnRegisterHotKeyDelegate(IntPtr hwnd, int id); - - private class MessageWindow : Form { - private const int WM_HOTKEY = 0x312; - - public MessageWindow() { - _wnd = this; - _hwnd = Handle; - _windowReadyEvent.Set(); - } - - protected override void WndProc(ref Message m) { - if (m.Msg == WM_HOTKEY) { - var e = new HotKeyEventArgs(m.LParam); - OnHotKeyPressed(e); - } - - base.WndProc(ref m); - } - - protected override void SetVisibleCore(bool value) { - // Ensure the window never becomes visible - base.SetVisibleCore(false); - } - } + static HotKeyManager() { + var messageLoop = new Thread(delegate() { Application.Run(new MessageWindow()); }); + messageLoop.Name = "MessageLoopThread"; + messageLoop.IsBackground = true; + messageLoop.Start(); } + public static event EventHandler HotKeyPressed; - public class HotKeyEventArgs : EventArgs { - public readonly Keys Key; - public readonly KeyModifiers Modifiers; - - public HotKeyEventArgs(Keys key, KeyModifiers modifiers) { - Key = key; - Modifiers = modifiers; - } - - public HotKeyEventArgs(IntPtr hotKeyParam) { - var param = (uint)hotKeyParam.ToInt64(); - Key = (Keys)((param & 0xffff0000) >> 16); - Modifiers = (KeyModifiers)(param & 0x0000ffff); - } + public static int RegisterHotKey(Keys key, KeyModifiers modifiers) { + _windowReadyEvent.WaitOne(); + var id = Interlocked.Increment(ref _id); + _wnd.Invoke(new RegisterHotKeyDelegate(RegisterHotKeyInternal), _hwnd, id, (uint)modifiers, (uint)key); + return id; } - [Flags] - public enum KeyModifiers { - Alt = 1, - Control = 2, - Shift = 4, - Windows = 8, - NoRepeat = 0x4000 + public static void UnregisterHotKey(int id) { + _wnd.Invoke(new UnRegisterHotKeyDelegate(UnRegisterHotKeyInternal), _hwnd, id); } + + private static void RegisterHotKeyInternal(IntPtr hwnd, int id, uint modifiers, uint key) { + RegisterHotKey(hwnd, id, modifiers, key); + } + + private static void UnRegisterHotKeyInternal(IntPtr hwnd, int id) { + UnregisterHotKey(_hwnd, id); + } + + private static void OnHotKeyPressed(HotKeyEventArgs e) { + if (HotKeyPressed != null) HotKeyPressed(null, e); + } + + [DllImport("user32", SetLastError = true)] + private static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk); + + [DllImport("user32", SetLastError = true)] + private static extern bool UnregisterHotKey(IntPtr hWnd, int id); + + private delegate void RegisterHotKeyDelegate(IntPtr hwnd, int id, uint modifiers, uint key); + + private delegate void UnRegisterHotKeyDelegate(IntPtr hwnd, int id); + + private class MessageWindow : Form { + private const int WM_HOTKEY = 0x312; + + public MessageWindow() { + _wnd = this; + _hwnd = Handle; + _windowReadyEvent.Set(); + } + + protected override void WndProc(ref Message m) { + if (m.Msg == WM_HOTKEY) { + var e = new HotKeyEventArgs(m.LParam); + OnHotKeyPressed(e); + } + + base.WndProc(ref m); + } + + protected override void SetVisibleCore(bool value) { + // Ensure the window never becomes visible + base.SetVisibleCore(false); + } + } +} + +public class HotKeyEventArgs : EventArgs { + public readonly Keys Key; + public readonly KeyModifiers Modifiers; + + public HotKeyEventArgs(Keys key, KeyModifiers modifiers) { + Key = key; + Modifiers = modifiers; + } + + public HotKeyEventArgs(IntPtr hotKeyParam) { + var param = (uint)hotKeyParam.ToInt64(); + Key = (Keys)((param & 0xffff0000) >> 16); + Modifiers = (KeyModifiers)(param & 0x0000ffff); + } +} + +[Flags] +public enum KeyModifiers { + Alt = 1, + Control = 2, + Shift = 4, + Windows = 8, + NoRepeat = 0x4000 } \ No newline at end of file diff --git a/DD2Switcher/Pixel.cs b/DD2Switcher/Pixel.cs index 7ad41ac..1cf917f 100644 --- a/DD2Switcher/Pixel.cs +++ b/DD2Switcher/Pixel.cs @@ -1,15 +1,9 @@ -using System; +using System.Diagnostics; using System.Drawing; -namespace DD2Switcher; +namespace DD2Switcher; public class Pixel { - private int x { get; set; } - private int y { get; set; } - private int R { get; set; } - private int G { get; set; } - private int B { get; set; } - public Pixel(int x, int y, int R, int G, int B) { this.x = x; this.y = y; @@ -18,8 +12,14 @@ public class Pixel { this.B = B; } - public Boolean ProcessBitmap(Bitmap bmp) { - Color tempPixel = bmp.GetPixel(x, y); - return tempPixel.R == R && tempPixel.B == B && tempPixel.G == G; + private int x { get; } + private int y { get; } + private int R { get; } + private int G { get; } + private int B { get; } + + public bool ProcessBitmap(Bitmap bmp) { + var tempPixel = bmp.GetPixel(x, y); + return tempPixel.R >= R && tempPixel.B >= B && tempPixel.G >= G; } } \ No newline at end of file diff --git a/DD2Switcher/Program.cs b/DD2Switcher/Program.cs index 88fc8c9..aa04bc2 100644 --- a/DD2Switcher/Program.cs +++ b/DD2Switcher/Program.cs @@ -2,20 +2,29 @@ using System.Collections.Generic; using System.Diagnostics; using System.Drawing; +using System.Media; using System.Runtime.InteropServices; using System.Threading; using System.Windows.Forms; -namespace DD2Switcher; +namespace DD2Switcher; internal static class Program { - private static Rectangle rect = new(0, 0, 1920, 1080); + private static Rectangle rect = new(0, 0, 2560, 1440); private static readonly Process[] games = Process.GetProcessesByName("Dundefgame"); + + private static readonly SoundPlayer beeper = + new(@"C:\Users\Administrator\RiderProjects\DD2Switcher\DD2Switcher\beep.wav"); + private static Process activeGame = games[0]; private static Bitmap screenshot; private static Graphics graphics; - private static readonly int defaultAffinity = 0b100000000000; + private static readonly IntPtr defaultAffinity = new(0xFF000000); + private static readonly IntPtr fullAffinity = new(0xFFFFFFFF); private static bool paused = true; + + private static List relevantPoints = new List(); + private static List pointsToRemove = new List(); [DllImport("user32.dll")] private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, UIntPtr dwExtraInfo); @@ -47,18 +56,10 @@ internal static class Program { } private static void AdjustAffinities() { - var fullAffinity = 0b111111111111; - var i = 0; foreach (var game in games) - if (game != activeGame) { - // var processAffinty = defaultAffinity >> i; - var processAffinty = defaultAffinity; - fullAffinity = fullAffinity & ~processAffinty; - game.ProcessorAffinity = new IntPtr(processAffinty); - i++; - } - - activeGame.ProcessorAffinity = new IntPtr(fullAffinity); + if (game != activeGame) + game.ProcessorAffinity = defaultAffinity; + activeGame.ProcessorAffinity = fullAffinity; } private static void AdjustPriorities() { @@ -67,11 +68,16 @@ internal static class Program { } private static void NerfAll() { - var i = 0; foreach (var game in games) { - game.ProcessorAffinity = new IntPtr(defaultAffinity); + game.ProcessorAffinity = defaultAffinity; game.PriorityClass = ProcessPriorityClass.Idle; - i++; + } + } + + private static void BuffAll() { + foreach (var game in games) { + game.ProcessorAffinity = fullAffinity; + game.PriorityClass = ProcessPriorityClass.Normal; } } @@ -106,6 +112,13 @@ internal static class Program { [STAThread] private static void Main() { + var processes = Process.GetProcesses(); + var currentProcess = Process.GetCurrentProcess(); + + foreach (var process in processes) + if (process.Id != currentProcess.Id && process.ProcessName == currentProcess.ProcessName) + process.Kill(); + HotKeyManager.RegisterHotKey(Keys.D1, KeyModifiers.Alt); HotKeyManager.RegisterHotKey(Keys.D2, KeyModifiers.Alt); HotKeyManager.RegisterHotKey(Keys.D3, KeyModifiers.Alt); @@ -114,11 +127,12 @@ internal static class Program { HotKeyManager.RegisterHotKey(Keys.D6, KeyModifiers.Alt); HotKeyManager.RegisterHotKey(Keys.Q, KeyModifiers.Alt); HotKeyManager.RegisterHotKey(Keys.W, KeyModifiers.Alt); + HotKeyManager.RegisterHotKey(Keys.R, KeyModifiers.Alt); HotKeyManager.HotKeyPressed += HotKeyManager_HotKeyPressed; - - List pixelList = new List(); - pixelList.Add(new Pixel(108, 108, 0, 0, 0)); - pixelList.Add(new Pixel(1062, 885, 255, 255, 255)); + + var pixelList = new System.Collections.Generic.List(); + // pixelList.Add(new Pixel(1401, 1234, 224, 224, 224)); + pixelList.Add(new Pixel(1359, 1235, 220, 220, 220)); static void HotKeyManager_HotKeyPressed(object sender, HotKeyEventArgs e) { switch (e.Key) { @@ -140,15 +154,15 @@ internal static class Program { case Keys.D6: Environment.Exit(0); break; - case Keys.Q: - NerfAll(); - break; case Keys.W: if (paused) { - Console.Beep(1500, 500); + beeper.Play(); paused = false; - } else { - Console.Beep(500, 500); + } + else { + beeper.Play(); + Thread.Sleep(150); + beeper.Play(); paused = true; } @@ -157,16 +171,51 @@ internal static class Program { } while (true) { + bool runOnce = false; + bool AAA = false; + relevantPoints.Clear(); while (!paused) { screenshot = CaptureWindow(games[0].MainWindowHandle); - foreach (Pixel p in pixelList) { + // screenshot.Save("SS.png"); + + // if (!runOnce) { + // runOnce = true; + // for (var y = 0; y < screenshot.Height; y++) + // for (var x = 0; x < screenshot.Width; x++) { + // var pixelColor = screenshot.GetPixel(x, y); + // if (pixelColor.R > 220 && pixelColor.G > 220 && pixelColor.B > 220) + // relevantPoints.Add(new Point(x, y)); + // } + // } + // + // pointsToRemove.Clear(); + // foreach (var relevantPoint in relevantPoints) { + // var pixel = screenshot.GetPixel(relevantPoint.X, relevantPoint.Y); + // if (!(pixel.R > 220) || !(pixel.G > 220) || !(pixel.B > 220)) + // pointsToRemove.Add(relevantPoint); + // } + // + // foreach (var point in pointsToRemove) { + // relevantPoints.Remove(point); + // } + // + // Debug.WriteLine(relevantPoints.Count); + + foreach (var p in pixelList) if (p.ProcessBitmap(screenshot)) { - Console.Beep(1500, 850); + beeper.Play(); break; } - } + Thread.Sleep(250); } + + // System.IO.TextWriter tw = new System.IO.StreamWriter("SavedList.txt"); + // foreach (var point in relevantPoints) { + // tw.WriteLine(point.ToString()); + // } + // tw.Close(); + Thread.Sleep(250); } } diff --git a/DD2Switcher/beep.wav b/DD2Switcher/beep.wav new file mode 100644 index 0000000000000000000000000000000000000000..b8c19947ca3fbb64ae8abb5a24d670ee339aaca0 GIT binary patch literal 17848 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 literal 0 HcmV?d00001 diff --git a/DD2Switcher/obj/Release/.NETFramework,Version=v4.8.AssemblyAttributes.cs b/DD2Switcher/obj/Release/.NETFramework,Version=v4.8.AssemblyAttributes.cs new file mode 100644 index 0000000..15efebf --- /dev/null +++ b/DD2Switcher/obj/Release/.NETFramework,Version=v4.8.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]