diff --git a/DD2Switcher/DD2Switcher.csproj b/DD2Switcher/DD2Switcher.csproj
index 03cf883..a4a34ac 100644
--- a/DD2Switcher/DD2Switcher.csproj
+++ b/DD2Switcher/DD2Switcher.csproj
@@ -54,6 +54,7 @@
Form1.cs
+
diff --git a/DD2Switcher/Pixel.cs b/DD2Switcher/Pixel.cs
new file mode 100644
index 0000000..ea6c3c6
--- /dev/null
+++ b/DD2Switcher/Pixel.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Drawing;
+
+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;
+ this.R = R;
+ this.G = G;
+ this.B = B;
+ }
+
+ public Boolean ProcessBitmap(Bitmap bmp) {
+ Color 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 1bb0265..c5ce764 100644
--- a/DD2Switcher/Program.cs
+++ b/DD2Switcher/Program.cs
@@ -1,130 +1,165 @@
using System;
-using System.Windows.Forms;
-using System.Runtime.InteropServices;
+using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
+using System.Runtime.InteropServices;
using System.Threading;
+using System.Windows.Forms;
-namespace DD2Switcher {
- internal static class Program {
- [DllImport("user32.dll")]
- static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, UIntPtr dwExtraInfo);
+namespace DD2Switcher;
- [DllImport("user32.dll")]
- public static extern IntPtr GetForegroundWindow();
+internal static class Program {
+ private static Rectangle rect = new(0, 0, 1920, 1080);
+ private static readonly Process[] games = Process.GetProcessesByName("Dundefgame");
+ private static Process activeGame = games[0];
+ private static Bitmap screenshot;
+ private static Graphics graphics;
+ private static readonly int defaultAffinity = 0b100000000000;
+ private static bool paused = true;
- [DllImport("user32.dll")]
- public static extern bool SetForegroundWindow(IntPtr hWnd);
+ [DllImport("user32.dll")]
+ private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint dwData, UIntPtr dwExtraInfo);
- [DllImport("User32.dll", SetLastError = true)]
- [return: MarshalAs(UnmanagedType.Bool)]
- static extern bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags);
+ [DllImport("user32.dll")]
+ public static extern IntPtr GetForegroundWindow();
- [DllImport("user32.dll")]
- static extern bool GetWindowRect(IntPtr handle, ref Rectangle rect);
+ [DllImport("user32.dll")]
+ public static extern bool SetForegroundWindow(IntPtr hWnd);
- [DllImport("user32.dll", SetLastError = true)]
- static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
+ [DllImport("User32.dll", SetLastError = true)]
+ [return: MarshalAs(UnmanagedType.Bool)]
+ private static extern bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags);
- static Process[] games = Process.GetProcessesByName("Dundefgame");
- static Process activeGame = games[0];
- static int defaultAffinity = 0b100000000000;
+ [DllImport("user32.dll")]
+ private static extern bool GetWindowRect(IntPtr handle, ref Rectangle rect);
- private static void AdjustAffinities() {
- int fullAffinity = 0b111111111111;
- int i = 0;
- foreach (Process game in games) {
- if (game != activeGame) {
- var processAffinty = defaultAffinity >> i;
- fullAffinity = fullAffinity & ~processAffinty;
- game.ProcessorAffinity = new IntPtr(processAffinty);
- i++;
- }
- }
- activeGame.ProcessorAffinity = new IntPtr(fullAffinity);
- }
+ [DllImport("user32.dll", SetLastError = true)]
+ private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
- private static void AdjustPriorities() {
- foreach (Process game in games) {
- game.PriorityClass = ProcessPriorityClass.Idle;
- }
- activeGame.PriorityClass = ProcessPriorityClass.High;
- }
+ public static Bitmap CaptureWindow(IntPtr handle) {
+ if (screenshot == null)
+ screenshot = new Bitmap(rect.Width, rect.Height);
+ graphics = Graphics.FromImage(screenshot);
+ var hdc = graphics.GetHdc();
+ PrintWindow(handle, hdc, 0);
+ graphics.ReleaseHdc(hdc);
+ return screenshot;
+ }
- private static void NerfAll() {
- int i = 0;
- foreach (Process game in games) {
- game.ProcessorAffinity = new IntPtr(defaultAffinity >> i);
- game.PriorityClass = ProcessPriorityClass.Idle;
+ private static void AdjustAffinities() {
+ var fullAffinity = 0b111111111111;
+ var i = 0;
+ foreach (var game in games)
+ if (game != activeGame) {
+ var processAffinty = defaultAffinity >> i;
+ fullAffinity = fullAffinity & ~processAffinty;
+ game.ProcessorAffinity = new IntPtr(processAffinty);
i++;
}
- }
- private static void SwitchToGame(int index) {
- SetForegroundWindow(games[index].MainWindowHandle);
- activeGame = games[index];
- AdjustAffinities();
- AdjustPriorities();
- }
+ activeGame.ProcessorAffinity = new IntPtr(fullAffinity);
+ }
- private static void SwitchMainGame() {
- IntPtr foregroundWindow = GetForegroundWindow();
- Process foregroundGame = null;
- int foregroundGameIndex = -1;
- bool exists = false;
-
- foreach (Process game in games) {
- if (foregroundWindow == game.MainWindowHandle) {
- exists = true;
- foregroundGame = game;
- foregroundGameIndex = Array.IndexOf(games, game);
+ private static void AdjustPriorities() {
+ foreach (var game in games) game.PriorityClass = ProcessPriorityClass.Idle;
+ activeGame.PriorityClass = ProcessPriorityClass.High;
+ }
+
+ private static void NerfAll() {
+ var i = 0;
+ foreach (var game in games) {
+ game.ProcessorAffinity = new IntPtr(defaultAffinity >> i);
+ game.PriorityClass = ProcessPriorityClass.Idle;
+ i++;
+ }
+ }
+
+ private static void SwitchToGame(int index) {
+ SetForegroundWindow(games[index].MainWindowHandle);
+ activeGame = games[index];
+ AdjustAffinities();
+ AdjustPriorities();
+ }
+
+ private static void SwitchMainGame() {
+ var foregroundWindow = GetForegroundWindow();
+ Process foregroundGame = null;
+ var foregroundGameIndex = -1;
+ var exists = false;
+
+ foreach (var game in games)
+ if (foregroundWindow == game.MainWindowHandle) {
+ exists = true;
+ foregroundGame = game;
+ foregroundGameIndex = Array.IndexOf(games, game);
+ break;
+ }
+
+ if (exists) {
+ var tempGame = games[0];
+ games[0] = foregroundGame;
+ games[foregroundGameIndex] = tempGame;
+ }
+ }
+
+ [STAThread]
+ private static void Main() {
+ 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.Q, KeyModifiers.Alt);
+ HotKeyManager.RegisterHotKey(Keys.W, KeyModifiers.Alt);
+ HotKeyManager.HotKeyPressed += HotKeyManager_HotKeyPressed;
+
+ List pixelList = new List();
+ pixelList.Add(new Pixel(1062, 885, 240, 240, 240));
+
+ static void HotKeyManager_HotKeyPressed(object sender, HotKeyEventArgs e) {
+ switch (e.Key) {
+ case Keys.D1:
+ SwitchToGame(0);
break;
- }
- }
+ case Keys.D2:
+ SwitchToGame(1);
+ break;
+ case Keys.D3:
+ SwitchToGame(2);
+ break;
+ case Keys.D4:
+ SwitchToGame(3);
+ break;
+ case Keys.D5:
+ SwitchMainGame();
+ break;
+ case Keys.Q:
+ NerfAll();
+ break;
+ case Keys.W:
+ if (paused) {
+ Console.Beep(1500, 500);
+ paused = false;
+ } else {
+ Console.Beep(500, 500);
+ paused = true;
+ }
- if (exists) {
- Process tempGame = games[0];
- games[0] = foregroundGame;
- games[foregroundGameIndex] = tempGame;
+ break;
}
}
- [STAThread]
- private static void Main() {
- 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.Q, KeyModifiers.Alt);
- HotKeyManager.HotKeyPressed += HotKeyManager_HotKeyPressed;
-
- static void HotKeyManager_HotKeyPressed(object sender, HotKeyEventArgs e) {
- switch (e.Key) {
- case Keys.D1:
- SwitchToGame(0);
- break;
- case Keys.D2:
- SwitchToGame(1);
- break;
- case Keys.D3:
- SwitchToGame(2);
- break;
- case Keys.D4:
- SwitchToGame(3);
- break;
- case Keys.D5:
- SwitchMainGame();
- break;
- case Keys.Q:
- NerfAll();
- break;
+ while (true) {
+ while (!paused) {
+ screenshot = CaptureWindow(games[0].MainWindowHandle);
+ foreach (Pixel p in pixelList) {
+ if (p.ProcessBitmap(screenshot)) {
+ Console.Beep(1500, 850);
+ }
}
+ Thread.Sleep(1000);
}
-
- while (true) {
- Thread.Sleep(2000);
- }
+ Thread.Sleep(1000);
}
}
}
\ No newline at end of file