static void Main() { /* Ищем процесс арчейджа, получаем его TITLE для того чтобы использовать в CaptureScreen */ Process[] processlist = Process.GetProcesses(); foreach (Process process in processlist) { if (process.ProcessName == "archeage") { Program.ArcheageWindowTitle = process.MainWindowTitle; Program.ArcheageWindowHandle = process.MainWindowHandle; } } Program.Archeage = User32.FindWindow(null, Program.ArcheageWindowTitle); /* Загружаем элементы интерфейса для распознавания */ VisionHeroLocation.LoadHeroCircle(); VisionTarget.LoadTargetBars(); VisionEnemy.LoadEnemyBars(); VisionHero.LoadHeroBars(); VisionAlliance.LoadAllianceBars(); VisionAlliance.LoadManaBars(); VisionEnemy.LoadEnemyTooltips(); VisionNumbers.LoadDistanceNumbers(); VisionGame.LoadButtonF(); VisionGame.LoadButtonG(); Route.LoadGrindRoute("D:\\CurrentRoute.txt"); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); }
static void Main() { /* Ищем процесс арчейджа, получаем его TITLE для того чтобы использовать в CaptureScreen */ Process[] processlist = Process.GetProcesses(); foreach (Process process in processlist) { if (process.ProcessName == "archeage") { Program.ArcheageWindowTitle = process.MainWindowTitle; Program.ArcheageWindowHandle = process.MainWindowHandle; } } ///////////////////////// WindowsPrincipal pricipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); bool hasAdministrativeRight = pricipal.IsInRole(WindowsBuiltInRole.Administrator); if (hasAdministrativeRight == false) { ProcessStartInfo processInfo = new ProcessStartInfo(); //создаем новый процесс processInfo.Verb = "runas"; //в данном случае указываем, что процесс должен быть запущен с правами администратора processInfo.FileName = Application.ExecutablePath; //указываем исполняемый файл (программу) для запуска try { Process.Start(processInfo); //пытаемся запустить процесс } catch (System.ComponentModel.Win32Exception) { //Ничего не делаем, потому что пользователь, возможно, нажал кнопку "Нет" в ответ на вопрос о запуске программы в окне предупреждения UAC (для Windows 7) } Application.Exit(); //закрываем текущую копию программы (в любом случае, даже если пользователь отменил запуск с правами администратора в окне UAC) } else //имеем права администратора, значит, стартуем { //////////////////////// Program.Archeage = User32.FindWindow(null, Program.ArcheageWindowTitle); /* Загружаем элементы интерфейса для распознавания */ VisionHeroLocation.LoadHeroCircle(); VisionTarget.LoadTargetBars(); VisionEnemy.LoadEnemyBars(); VisionHero.LoadHeroBars(); VisionAlliance.LoadAllianceBars(); VisionAlliance.LoadManaBars(); VisionEnemy.LoadEnemyTooltips(); VisionNumbers.LoadDistanceNumbers(); VisionGame.LoadButtonF(); VisionGame.LoadButtonG(); // Route.LoadGrindRoute("RecordRoute.txt"); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form3()); } }
private void ViewDirectionTimer_Tick(object sender, EventArgs e) { bool FastFind1 = false; bool FastFind2 = false; bool FastFind3 = false; /* Для начала попробуем найти кружочек примерно рядом с последними координатами */ if ( ((Hero.PositionX - 5 > 0) && (Hero.PositionY - 5 > 0)) && ((Hero.PositionX + 5 < ScreenCapture.LockBitmap.Screen.Width) && (Hero.PositionY + 5 < ScreenCapture.LockBitmap.Screen.Height)) ) { bool FindForm = false; for (int y = Hero.PositionY - 5; y < Hero.PositionY + 5; y++) { if (FindForm == true) { break; } for (int x = Hero.PositionX - 5; x < Hero.PositionX + 5; x++) { if (FindForm == true) { break; } int?HeroCircleForm = VisionForm.FindForm(VisionHeroLocation.HeroCircles, x, y); if (HeroCircleForm != null) { FastFind1 = true; FindForm = true; int HeroCircleFormNumber = HeroCircleForm ?? default(int); Hero.PositionX = x + VisionHeroLocation.HeroCirclesOffsetsX[HeroCircleFormNumber]; Hero.PositionY = y + VisionHeroLocation.HeroCirclesOffsetsY[HeroCircleFormNumber]; Hero.Direction = VisionHeroLocation.GetCurrentDirection(HeroCircleFormNumber, x, y); } } } } if (FastFind1 == false) { /* Для начала попробуем найти кружочек примерно рядом с последними координатами */ if ( ((Hero.PositionX - 10 > 0) && (Hero.PositionY - 10 > 0)) && ((Hero.PositionX + 10 < ScreenCapture.LockBitmap.Screen.Width) && (Hero.PositionY + 10 < ScreenCapture.LockBitmap.Screen.Height)) ) { bool FindForm = false; for (int y = Hero.PositionY - 10; y < Hero.PositionY + 10; y++) { if (FindForm == true) { break; } for (int x = Hero.PositionX - 10; x < Hero.PositionX + 10; x++) { if (FindForm == true) { break; } int?HeroCircleForm = VisionForm.FindForm(VisionHeroLocation.HeroCircles, x, y); if (HeroCircleForm != null) { FastFind2 = true; FindForm = true; int HeroCircleFormNumber = HeroCircleForm ?? default(int); Hero.PositionX = x + VisionHeroLocation.HeroCirclesOffsetsX[HeroCircleFormNumber]; Hero.PositionY = y + VisionHeroLocation.HeroCirclesOffsetsY[HeroCircleFormNumber]; Hero.Direction = VisionHeroLocation.GetCurrentDirection(HeroCircleFormNumber, x, y); } } } } } if ((FastFind1 == false) && (FastFind2 == false)) { /* Для начала попробуем найти кружочек примерно рядом с последними координатами */ if ( ((Hero.PositionX - 20 > 0) && (Hero.PositionY - 20 > 0)) && ((Hero.PositionX + 20 < ScreenCapture.LockBitmap.Screen.Width) && (Hero.PositionY + 20 < ScreenCapture.LockBitmap.Screen.Height)) ) { bool FindForm = false; for (int y = Hero.PositionY - 20; y < Hero.PositionY + 20; y++) { if (FindForm == true) { break; } for (int x = Hero.PositionX - 20; x < Hero.PositionX + 20; x++) { if (FindForm == true) { break; } int?HeroCircleForm = VisionForm.FindForm(VisionHeroLocation.HeroCircles, x, y); if (HeroCircleForm != null) { FastFind3 = true; FindForm = true; int HeroCircleFormNumber = HeroCircleForm ?? default(int); Hero.PositionX = x + VisionHeroLocation.HeroCirclesOffsetsX[HeroCircleFormNumber]; Hero.PositionY = y + VisionHeroLocation.HeroCirclesOffsetsY[HeroCircleFormNumber]; Hero.Direction = VisionHeroLocation.GetCurrentDirection(HeroCircleFormNumber, x, y); } } } } } /* Если не получилось быстро найти кружочек - ищем по всей карте */ if ((FastFind1 == false) && (FastFind2 == false) && (FastFind3 == false)) { bool FindForm = false; for (int y = 50; y < ScreenCapture.LockBitmap.Screen.Height - 300; y++) { if (FindForm == true) { break; } for (int x = 250; x < ScreenCapture.LockBitmap.Screen.Width - 50; x++) { if (FindForm == true) { break; } int?HeroCircleForm = VisionForm.FindForm(VisionHeroLocation.HeroCircles, x, y); if (HeroCircleForm != null) { FindForm = true; int HeroCircleFormNumber = HeroCircleForm ?? default(int); Hero.PositionX = x + VisionHeroLocation.HeroCirclesOffsetsX[HeroCircleFormNumber]; Hero.PositionY = y + VisionHeroLocation.HeroCirclesOffsetsY[HeroCircleFormNumber]; Hero.Direction = VisionHeroLocation.GetCurrentDirection(HeroCircleFormNumber, x, y); } } } } }