From 451038a1a65a80999a5fc69ccd276b0d492170fb Mon Sep 17 00:00:00 2001 From: PhatPhuckDave Date: Sat, 2 Nov 2024 23:21:48 +0100 Subject: [PATCH] Delete everything --- .gitignore | 5 - DD2Switcher.sln | 16 --- DD2Switcher.sln.DotSettings.user | 5 - DD2Switcher/App.config | 6 - DD2Switcher/DD2Switcher.csproj | 88 ------------- DD2Switcher/Form1.Designer.cs | 40 ------ DD2Switcher/Form1.cs | 9 -- DD2Switcher/HotKeyManager.cs | 105 --------------- DD2Switcher/Pixel.cs | 25 ---- DD2Switcher/Program.cs | 211 ------------------------------- DD2Switcher/beep.wav | Bin 17848 -> 0 bytes 11 files changed, 510 deletions(-) delete mode 100644 .gitignore delete mode 100644 DD2Switcher.sln delete mode 100644 DD2Switcher.sln.DotSettings.user delete mode 100644 DD2Switcher/App.config delete mode 100644 DD2Switcher/DD2Switcher.csproj delete mode 100644 DD2Switcher/Form1.Designer.cs delete mode 100644 DD2Switcher/Form1.cs delete mode 100644 DD2Switcher/HotKeyManager.cs delete mode 100644 DD2Switcher/Pixel.cs delete mode 100644 DD2Switcher/Program.cs delete mode 100644 DD2Switcher/beep.wav diff --git a/.gitignore b/.gitignore deleted file mode 100644 index f450f81..0000000 --- a/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -.idea -**/Debug -**/Properties -obj -bin \ No newline at end of file diff --git a/DD2Switcher.sln b/DD2Switcher.sln deleted file mode 100644 index 6001d6b..0000000 --- a/DD2Switcher.sln +++ /dev/null @@ -1,16 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DD2Switcher", "DD2Switcher\DD2Switcher.csproj", "{2AC26899-8E27-4B96-85A9-C387186EAD27}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2AC26899-8E27-4B96-85A9-C387186EAD27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2AC26899-8E27-4B96-85A9-C387186EAD27}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2AC26899-8E27-4B96-85A9-C387186EAD27}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2AC26899-8E27-4B96-85A9-C387186EAD27}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection -EndGlobal diff --git a/DD2Switcher.sln.DotSettings.user b/DD2Switcher.sln.DotSettings.user deleted file mode 100644 index 7c3bbf1..0000000 --- a/DD2Switcher.sln.DotSettings.user +++ /dev/null @@ -1,5 +0,0 @@ - - INFO - C:\Users\Administrator\AppData\Local\JetBrains\Toolbox\apps\Rider\ch-0\231.8109.212\tools\MSBuild\Current\Bin\amd64\MSBuild.exe - - \ No newline at end of file diff --git a/DD2Switcher/App.config b/DD2Switcher/App.config deleted file mode 100644 index 69f9d64..0000000 --- a/DD2Switcher/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/DD2Switcher/DD2Switcher.csproj b/DD2Switcher/DD2Switcher.csproj deleted file mode 100644 index 1f8ff78..0000000 --- a/DD2Switcher/DD2Switcher.csproj +++ /dev/null @@ -1,88 +0,0 @@ - - - - - Debug - AnyCPU - {2AC26899-8E27-4B96-85A9-C387186EAD27} - WinExe - DD2Switcher - DD2Switcher - v4.8.1 - 512 - true - true - 10 - - - x64 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - x64 - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - - - - - - - - - - - - - - - Form - - - Form1.cs - - - - - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - - - \ No newline at end of file diff --git a/DD2Switcher/Form1.Designer.cs b/DD2Switcher/Form1.Designer.cs deleted file mode 100644 index 554befa..0000000 --- a/DD2Switcher/Form1.Designer.cs +++ /dev/null @@ -1,40 +0,0 @@ -namespace DD2Switcher -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(800, 450); - this.Text = "Form1"; - } - - #endregion - } -} \ No newline at end of file diff --git a/DD2Switcher/Form1.cs b/DD2Switcher/Form1.cs deleted file mode 100644 index 9b0bd05..0000000 --- a/DD2Switcher/Form1.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Windows.Forms; - -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 deleted file mode 100644 index b554fbe..0000000 --- a/DD2Switcher/HotKeyManager.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -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(false); - - private static int _id; - - 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 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); - } - } -} - -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 deleted file mode 100644 index 6988065..0000000 --- a/DD2Switcher/Pixel.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Diagnostics; -using System.Drawing; - -namespace DD2Switcher; - -public class Pixel { - public Pixel(int x, int y, int R, int G, int B) { - this.x = x; - this.y = y; - this.R = R; - this.G = G; - this.B = B; - } - - 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 deleted file mode 100644 index 3d57d5a..0000000 --- a/DD2Switcher/Program.cs +++ /dev/null @@ -1,211 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Runtime.InteropServices; -using System.Windows.Forms; - -namespace DD2Switcher; - -internal static class Program { - private static List processes = new(); - - private static Process activeProcess; - private static readonly IntPtr defaultAffinity = new(0xFF000000); - private static readonly IntPtr fullAffinity = new(0xFFFFFFFF); - - [DllImport("user32.dll")] - public static extern IntPtr GetForegroundWindow(); - - [DllImport("user32.dll")] - public static extern bool SetForegroundWindow(IntPtr hWnd); - - [DllImport("kernel32.dll", SetLastError = true)] - [return: MarshalAs(UnmanagedType.Bool)] - static extern bool AllocConsole(); - - private static void AdjustAffinities() { - List fuckedProcesses = new(); - - foreach (var process in processes) - if (process != activeProcess) { - try { - process.ProcessorAffinity = defaultAffinity; - } - catch (Exception e) { - fuckedProcesses.Add(process); - } - } - - try { - activeProcess.ProcessorAffinity = fullAffinity; - } - catch (Exception e) { - fuckedProcesses.Add(activeProcess); - } - - foreach (var fucked in fuckedProcesses) - processes.Remove(fucked); - } - - private static void AdjustPriorities() { - List fuckedProcesses = new(); - - foreach (var process in processes) { - try { - process.PriorityClass = ProcessPriorityClass.Idle; - } - catch (Exception e) { - fuckedProcesses.Add(process); - } - } - - try { - activeProcess.PriorityClass = ProcessPriorityClass.High; - } - catch (Exception e) { - fuckedProcesses.Add(activeProcess); - } - - foreach (var fucked in fuckedProcesses) - processes.Remove(fucked); - } - - private static void SwitchToProcess(int index) { - Console.WriteLine("Switching to process at index " + index); - if (index >= processes.Count) return; - var targetWindowHandle = processes[processes.Count - 1 - index].MainWindowHandle; - if (targetWindowHandle == IntPtr.Zero) { - processes.RemoveAt(processes.Count - 1 - index); - return; - } - SetForegroundWindow(targetWindowHandle); - activeProcess = processes[processes.Count - 1 - index]; - AdjustAffinities(); - AdjustPriorities(); - } - - private static void SwitchMainGame() { - var foregroundWindow = GetForegroundWindow(); - Process foregroundGame = null; - var foregroundGameIndex = -1; - var exists = false; - - foreach (var process in processes) - if (foregroundWindow == process.MainWindowHandle) { - exists = true; - foregroundGame = process; - foregroundGameIndex = processes.IndexOf(process); - break; - } - - if (exists) { - var tempGame = processes[0]; - processes[0] = foregroundGame; - processes[foregroundGameIndex] = tempGame; - } - } - - private static void ToggleGame() { - Console.WriteLine("Toggling foreground window as tracked..."); - var foregroundWindow = GetForegroundWindow(); - var systemProcesses = Process.GetProcesses(); - Process foregroundProcess = null; - - foreach (var process in systemProcesses) - if (foregroundWindow == process.MainWindowHandle) { - foregroundProcess = process; - break; - } - - if (foregroundProcess == null) return; - Console.WriteLine("Foreground process: " + foregroundProcess.ProcessName); - var existingProcess = processes.Find(process => process.Id == foregroundProcess.Id); - if (existingProcess != null) { - Console.WriteLine("Removing foreground process from tracked..."); - processes.Remove(existingProcess); - } - else { - Console.WriteLine("Adding foreground process to tracked..."); - processes.Add(foregroundProcess); - } - } - - [STAThread] - private static void Main() { - // AllocConsole(); - - var processes = Process.GetProcesses(); - var currentProcess = Process.GetCurrentProcess(); - - foreach (var process in processes) - if (process.Id != currentProcess.Id && process.ProcessName == currentProcess.ProcessName) { - process.Kill(); - Process.GetCurrentProcess().Kill(); - } - - - HotKeyManager.RegisterHotKey(Keys.D1, KeyModifiers.Alt); - HotKeyManager.RegisterHotKey(Keys.D2, KeyModifiers.Alt); - HotKeyManager.RegisterHotKey(Keys.D3, KeyModifiers.Alt); - HotKeyManager.RegisterHotKey(Keys.D4, KeyModifiers.Alt); - HotKeyManager.RegisterHotKey(Keys.D5, KeyModifiers.Alt); - HotKeyManager.RegisterHotKey(Keys.D6, KeyModifiers.Alt); - HotKeyManager.RegisterHotKey(Keys.D7, KeyModifiers.Alt); - HotKeyManager.RegisterHotKey(Keys.D8, KeyModifiers.Alt); - HotKeyManager.RegisterHotKey(Keys.D9, KeyModifiers.Alt); - - HotKeyManager.RegisterHotKey(Keys.Oemtilde, KeyModifiers.Alt); - - // HotKeyManager.RegisterHotKey(Keys.Q, KeyModifiers.Alt); - // HotKeyManager.RegisterHotKey(Keys.W, KeyModifiers.Alt); - // HotKeyManager.RegisterHotKey(Keys.R, KeyModifiers.Alt); - HotKeyManager.HotKeyPressed += HotKeyManager_HotKeyPressed; - - 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) { - case Keys.D1: - SwitchToProcess(0); - break; - case Keys.D2: - SwitchToProcess(1); - break; - case Keys.D3: - SwitchToProcess(2); - break; - case Keys.D4: - SwitchToProcess(3); - break; - case Keys.D5: - SwitchToProcess(4); - break; - case Keys.D6: - SwitchToProcess(5); - break; - case Keys.D7: - SwitchToProcess(6); - break; - case Keys.D8: - SwitchToProcess(7); - break; - case Keys.D9: - SwitchToProcess(8); - break; - case Keys.Oemtilde: - ToggleGame(); - break; - } - } - - - Console.CancelKeyPress += (sender, e) => { - Process.GetCurrentProcess().Kill(); - }; - while (true) - System.Threading.Thread.Sleep(100000); - - } -} diff --git a/DD2Switcher/beep.wav b/DD2Switcher/beep.wav deleted file mode 100644 index b8c19947ca3fbb64ae8abb5a24d670ee339aaca0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17848 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