using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace DesertBusHelper { public partial class frmMain : Form { private const int OFFSET = -10; private bool bigCorrect; private IntPtr DesertBusWindow; private int maxLeft; public frmMain() { InitializeComponent(); bigCorrect = false; DesertBusWindow = IntPtr.Zero; maxLeft = 0; } private void tScanImage_Tick(object sender, EventArgs e) { API.ReleaseKey(API.VK_CODES.VK_UP); if (DesertBusWindow != IntPtr.Zero && ScreenCapture.ActiveWindow != DesertBusWindow) { ScreenCapture.ActiveWindow = DesertBusWindow; } Bitmap B = ScreenCapture.Capture(CaptureMode.Window, DesertBusWindow == IntPtr.Zero ? ScreenCapture.ActiveWindow : DesertBusWindow); if (B == null) { DesertBusWindow = IntPtr.Zero; return; } if (DesertBusHelper.containsDesertBus(B)) { if (DesertBusWindow == IntPtr.Zero) { DesertBusWindow = ScreenCapture.ActiveWindow; } //tScanImage.Stop(); API.SendKey(API.VK_CODES.VK_UP); DesertBusHelper.GetDiff(B); tbStats.Text = string.Format("Stats:\r\nLast min: {0}\r\nLast max: {1}\r\nDifference: {2}\r\n", DesertBusHelper.lastMin, DesertBusHelper.lastMax, DesertBusHelper.lastDiff); if (DesertBusHelper.lastDiff > 0 + OFFSET && bigCorrect) { bigCorrect = false; API.PressKey(API.VK_CODES.VK_LEFT, 500); tbStats.Text += string.Format("Steering left: ({0} ms)", 500); } else { if (DesertBusHelper.lastDiff > 90 + OFFSET) { maxLeft++; API.PressKey(API.VK_CODES.VK_LEFT, 100); tbStats.Text += string.Format("Steering left: ({0} ms; {1} times)", 100, maxLeft); } else if (DesertBusHelper.lastDiff > 50 + OFFSET) { if (maxLeft > 0) { maxLeft--; } else { API.PressKey(API.VK_CODES.VK_LEFT, 50); tbStats.Text += string.Format("Steering left: ({0} ms)", 50); } } else if (DesertBusHelper.lastDiff > 30 + OFFSET) { maxLeft = 0; API.PressKey(API.VK_CODES.VK_LEFT, 20); tbStats.Text += string.Format("Steering left: ({0} ms)", 20); } else if (DesertBusHelper.lastDiff < 0 + OFFSET) { bigCorrect = true; maxLeft = 0; } } //tScanImage.Start(); } else { tbStats.Text = "Desert Bus not detected"; DesertBusWindow = IntPtr.Zero; } B.Dispose(); } } }