ANDREY94 Опубликовано 21 февраля, 2018 Автор Поделиться Опубликовано 21 февраля, 2018 а как многопоточность в моем случае сделать? не совсем понимаю.. В 20.02.2018 в 14:23, IzerodayI сказал: 2) запилить многопоточность Ссылка на комментарий Поделиться на другие сайты Поделиться
ANDREY94 Опубликовано 21 февраля, 2018 Автор Поделиться Опубликовано 21 февраля, 2018 6 часов назад, Xipho сказал: А говоришь, что точно знаешь, что делает каждая строчка кода. Так вот, эта функция не определяет цвет пикселя. Эта функция разбивает уже определенный цвет на составляющие. Для сравнения полученного цвета пикселя с эталонным данная операция не нужна. Достаточно заранее перевести эталонный цвет в целое число. Это умеет любой графический редактор (кроме пейнта виндового). Впрочем, хоть я и не вижу код этой функции, могу предположить, что как раз она выполняется быстро, ведь скорее всего там задействованы побитовые сдвиги. В любом случае, тройное сравнение будет медленнее, чем единственное. Не ищет он так цвет Спойлер [DllImport("gdi32.dll")] private static extern uint GetPixel(IntPtr hDC, int x, int y); public static void GetPixelsColor(int x, int y, out uint[,] pixels) { IntPtr hDC = GetDC(IntPtr.Zero); pixels = new uint[3, 2]; for (int i = 0; i < 3; i++) for (int j = 0; j < 2; j++) pixels[i, j] = GetPixel(hDC, x + i, y + j); ReleaseDC(IntPtr.Zero, hDC); } private void timer2_Tick(object sender, EventArgs e) { uint[,] pixels = null; GetPixelsColor(937, 585, out pixels); GetPixelsColor(938, 585, out pixels); GetPixelsColor(939, 585, out pixels); GetPixelsColor(940, 585, out pixels); GetPixelsColor(941, 585, out pixels); GetPixelsColor(942, 585, out pixels); GetPixelsColor(943, 585, out pixels); GetPixelsColor(944, 585, out pixels); GetPixelsColor(945, 585, out pixels); GetPixelsColor(946, 585, out pixels); GetPixelsColor(947, 593, out pixels); GetPixelsColor(948, 594, out pixels); GetPixelsColor(949, 595, out pixels); GetPixelsColor(950, 595, out pixels); GetPixelsColor(951, 595, out pixels); GetPixelsColor(952, 595, out pixels); GetPixelsColor(953, 595, out pixels); GetPixelsColor(954, 595, out pixels); GetPixelsColor(955, 595, out pixels); GetPixelsColor(956, 595, out pixels); GetPixelsColor(957, 595, out pixels); GetPixelsColor(958, 595, out pixels); GetPixelsColor(959, 595, out pixels); GetPixelsColor(960, 595, out pixels); GetPixelsColor(937, 586, out pixels); GetPixelsColor(938, 586, out pixels); GetPixelsColor(939, 586, out pixels); GetPixelsColor(940, 586, out pixels); GetPixelsColor(941, 586, out pixels); GetPixelsColor(942, 586, out pixels); GetPixelsColor(943, 586, out pixels); GetPixelsColor(944, 586, out pixels); GetPixelsColor(945, 586, out pixels); GetPixelsColor(946, 586, out pixels); GetPixelsColor(947, 593, out pixels); GetPixelsColor(948, 594, out pixels); GetPixelsColor(949, 595, out pixels); GetPixelsColor(950, 595, out pixels); GetPixelsColor(951, 595, out pixels); GetPixelsColor(952, 595, out pixels); GetPixelsColor(953, 595, out pixels); GetPixelsColor(954, 595, out pixels); GetPixelsColor(955, 595, out pixels); GetPixelsColor(956, 595, out pixels); GetPixelsColor(957, 595, out pixels); GetPixelsColor(958, 595, out pixels); GetPixelsColor(959, 595, out pixels); GetPixelsColor(960, 595, out pixels); GetPixelsColor(937, 587, out pixels); GetPixelsColor(938, 587, out pixels); GetPixelsColor(939, 587, out pixels); GetPixelsColor(940, 587, out pixels); GetPixelsColor(941, 587, out pixels); GetPixelsColor(942, 587, out pixels); GetPixelsColor(943, 587, out pixels); GetPixelsColor(944, 587, out pixels); GetPixelsColor(945, 587, out pixels); GetPixelsColor(946, 587, out pixels); GetPixelsColor(947, 593, out pixels); GetPixelsColor(948, 594, out pixels); GetPixelsColor(949, 595, out pixels); GetPixelsColor(950, 595, out pixels); GetPixelsColor(951, 595, out pixels); GetPixelsColor(952, 595, out pixels); GetPixelsColor(953, 595, out pixels); GetPixelsColor(954, 595, out pixels); GetPixelsColor(955, 595, out pixels); GetPixelsColor(956, 595, out pixels); GetPixelsColor(957, 595, out pixels); GetPixelsColor(958, 595, out pixels); GetPixelsColor(959, 595, out pixels); GetPixelsColor(960, 595, out pixels); GetPixelsColor(937, 588, out pixels); GetPixelsColor(938, 588, out pixels); GetPixelsColor(939, 588, out pixels); GetPixelsColor(940, 588, out pixels); GetPixelsColor(941, 588, out pixels); GetPixelsColor(942, 588, out pixels); GetPixelsColor(943, 588, out pixels); GetPixelsColor(944, 588, out pixels); GetPixelsColor(945, 588, out pixels); GetPixelsColor(946, 588, out pixels); GetPixelsColor(947, 593, out pixels); GetPixelsColor(948, 594, out pixels); GetPixelsColor(949, 595, out pixels); GetPixelsColor(950, 595, out pixels); GetPixelsColor(951, 595, out pixels); GetPixelsColor(952, 595, out pixels); GetPixelsColor(953, 595, out pixels); GetPixelsColor(954, 595, out pixels); GetPixelsColor(955, 595, out pixels); GetPixelsColor(956, 595, out pixels); GetPixelsColor(957, 595, out pixels); GetPixelsColor(958, 595, out pixels); GetPixelsColor(959, 595, out pixels); GetPixelsColor(960, 595, out pixels); GetPixelsColor(937, 589, out pixels); GetPixelsColor(938, 589, out pixels); GetPixelsColor(939, 589, out pixels); GetPixelsColor(940, 589, out pixels); GetPixelsColor(941, 589, out pixels); GetPixelsColor(942, 589, out pixels); GetPixelsColor(943, 589, out pixels); GetPixelsColor(944, 589, out pixels); GetPixelsColor(945, 589, out pixels); GetPixelsColor(946, 589, out pixels); GetPixelsColor(947, 593, out pixels); GetPixelsColor(948, 594, out pixels); GetPixelsColor(949, 595, out pixels); GetPixelsColor(950, 595, out pixels); GetPixelsColor(951, 595, out pixels); GetPixelsColor(952, 595, out pixels); GetPixelsColor(953, 595, out pixels); GetPixelsColor(954, 595, out pixels); GetPixelsColor(955, 595, out pixels); GetPixelsColor(956, 595, out pixels); GetPixelsColor(957, 595, out pixels); GetPixelsColor(958, 595, out pixels); GetPixelsColor(959, 595, out pixels); GetPixelsColor(960, 595, out pixels); for (int i = 0; i < 3; i++) for (int j = 0; j < 2; j++) { if (pixels[i, j] == 0xAB3B2E) { Console.Beep(500, 500); } } } Ссылка на комментарий Поделиться на другие сайты Поделиться
ANDREY94 Опубликовано 22 февраля, 2018 Автор Поделиться Опубликовано 22 февраля, 2018 (изменено) Посмотрел как работает построчно, сравнение происходит но нужный цвет в сравнении с целым 0xAB3B2E не определяется, хотя он сканирует картинку залитую этим цветом.... Вот скрин: Спойлер Изменено 22 февраля, 2018 пользователем ANDREY94 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 22 февраля, 2018 Поделиться Опубликовано 22 февраля, 2018 А чего скрин-то такой "большой"? Под отладкой смотри, какое будет значение цвета, когда будет считываться нужный пиксель, и потом его в сравнение добавь. Возможно, считывается полное значение с нулевым альфа-каналом. Или считывается значение в перевернутом виде. Ссылка на комментарий Поделиться на другие сайты Поделиться
ANDREY94 Опубликовано 22 февраля, 2018 Автор Поделиться Опубликовано 22 февраля, 2018 1 минуту назад, Xipho сказал: А чего скрин-то такой "большой"? Под отладкой смотри, какое будет значение цвета, когда будет считываться нужный пиксель, и потом его в сравнение добавь. Возможно, считывается полное значение с нулевым альфа-каналом. Или считывается значение в перевернутом виде. Спойлер Ссылка на комментарий Поделиться на другие сайты Поделиться
ANDREY94 Опубликовано 22 февраля, 2018 Автор Поделиться Опубликовано 22 февраля, 2018 (изменено) 41 минуту назад, Xipho сказал: А чего скрин-то такой "большой"? Под отладкой смотри, какое будет значение цвета, когда будет считываться нужный пиксель, и потом его в сравнение добавь. Возможно, считывается полное значение с нулевым альфа-каналом. Или считывается значение в перевернутом виде. Вот так вот начал искать if (pixels[i, j] == 0x002e3bab) // [0x00000000, 0x00000000] 0x002e3bab uint Изменено 22 февраля, 2018 пользователем ANDREY94 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 22 февраля, 2018 Поделиться Опубликовано 22 февраля, 2018 2 минуты назад, ANDREY94 сказал: Вот так вот начал искать В момент выполнения сравнения, когда сравнивается пиксел с нужным цветом, в pixels[i, j] что лежит? Ссылка на комментарий Поделиться на другие сайты Поделиться
ANDREY94 Опубликовано 22 февраля, 2018 Автор Поделиться Опубликовано 22 февраля, 2018 (изменено) 7 минут назад, Xipho сказал: В момент выполнения сравнения, когда сравнивается пиксел с нужным цветом, в pixels[i, j] что лежит? конкретно pixels[i, j] нет, есть по отдельности pixels и там лежит - [0x00000000, 0x00000000] 0x002e3bab uint есть еще по отдельности I и J но они все по нулям - j 0x00000000 int 0x002e3bab это синий вроде как, но реагирует на тот который нужен мне... не знаю почему... Изменено 22 февраля, 2018 пользователем ANDREY94 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 22 февраля, 2018 Поделиться Опубликовано 22 февраля, 2018 Извини, конечно, но у меня складывается ощущение, что в программировании ты совершенно не разбираешься. В твоем коде I и J - счетчики из циклов for. Разумеется, в первый момент срабатывания они равны нулю. А pixels - это массив. pixels[i , j] - это доступ к определенной ячейке массива. Вот именно из нее значение тебе нужно смотреть, а не значение счетчиков. Обучать тебя как отлаживать код, ставить точки останова и наблюдаемые переменные я не буду. Ссылка на комментарий Поделиться на другие сайты Поделиться
ANDREY94 Опубликовано 22 февраля, 2018 Автор Поделиться Опубликовано 22 февраля, 2018 8 минут назад, Xipho сказал: Извини, конечно, но у меня складывается ощущение, что в программировании ты совершенно не разбираешься. В твоем коде I и J - счетчики из циклов for. Разумеется, в первый момент срабатывания они равны нулю. А pixels - это массив. pixels[i , j] - это доступ к определенной ячейке массива. Вот именно из нее значение тебе нужно смотреть, а не значение счетчиков. Обучать тебя как отлаживать код, ставить точки останова и наблюдаемые переменные я не буду. Ну всё правильно я делаю, в i,j во время пробежки по коду добавляются эти цифры в конце 1-2-0 (чередуются) в конечном счете в pixels записывается этот цвет - 0x002e3bab Я так же попробовал на белом фоне просканировать пиксели на цвет, все тоже самое но в конечном pixels выдал - 0x00fffff (белый цвет) Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 22 февраля, 2018 Поделиться Опубликовано 22 февраля, 2018 7 минут назад, ANDREY94 сказал: в конечном счете в pixels записывается этот цвет - 0x002e3bab Ну так если это и есть нужный тебе цвет, его и вставь в сравнение, в чем проблема? Я же писал, что, возможно, пиксель считывается с нулевым альфа-каналом. Так и есть - 0x002e3bab А ты подставил перевернутое значение, прочитав, что и такое может быть, и ждешь, что у тебя сравнение прокатит. Я ведь писал, что нужно смотреть под отладкой, как цвет считывается, и нужное значение в сравнении прописывать. Добавлено: Собственно, оно перевернутое и есть. То есть, в формате RGB оно должно быть как AB3B2E. Но в пиксел оно при считывании записывается как ABGR - 002E3BAB. И это разные числа. Ссылка на комментарий Поделиться на другие сайты Поделиться
ANDREY94 Опубликовано 22 февраля, 2018 Автор Поделиться Опубликовано 22 февраля, 2018 9 минут назад, Xipho сказал: Ну так если это и есть нужный тебе цвет, его и вставь в сравнение, в чем проблема? Я же писал, что, возможно, пиксель считывается с нулевым альфа-каналом. Так и есть - 0x002e3bab А ты подставил перевернутое значение, прочитав, что и такое может быть, и ждешь, что у тебя сравнение прокатит. Я ведь писал, что нужно смотреть под отладкой, как цвет считывается, и нужное значение в сравнении прописывать. Добавлено: Собственно, оно перевернутое и есть. То есть, в формате RGB оно должно быть как AB3B2E. Но в пиксел оно при считывании записывается как ABGR - 002E3BAB. И это разные числа. Так я давно так уже и сделал! Я же написал, что с таким цветом сравнение заработало! if (pixels[i, j] == 0x002e3bab) // [0x00000000, 0x00000000] 0x002e3bab uint Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 22 февраля, 2018 Поделиться Опубликовано 22 февраля, 2018 Автор, привет! Давай разбираться по порядку. Ты хочешь сделать программу, которая будет способна определять цвет определенных пикселей в окне игры и производить какое-нибудь действие. Вот тебе список задач: 0. Найти каким-то образом положение и размер окна игры в пикселях. Пока задачу можно упростить и игру запускать в полноэкранном режиме. Сделай, покажи код (можно в лс) и поставим следующую задачу. Не стоит торопиться. Ссылка на комментарий Поделиться на другие сайты Поделиться
ANDREY94 Опубликовано 22 февраля, 2018 Автор Поделиться Опубликовано 22 февраля, 2018 Теперь проблема со сканируемой областью, я в игре сделал скриншот наведя прицел на врага, далее открыл этот скрин на весь экран и определил нужные координаты, где высвечивается ник... определил это всё в пикселях и пошёл проверять... На скрине эта область определяется а вот в игре уже нет... в чем проблема? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 22 февраля, 2018 Поделиться Опубликовано 22 февраля, 2018 В 16.02.2018 в 12:35, ANDREY94 сказал: Сегодня Михаил помог мне сделать алгоритм работы Блин, только сейчас заметил ))) В общем, в группе тебе помогал не Михаил а я )) Ссылка на комментарий Поделиться на другие сайты Поделиться
ANDREY94 Опубликовано 22 февраля, 2018 Автор Поделиться Опубликовано 22 февраля, 2018 2 минуты назад, Xipho сказал: Блин, только сейчас заметил ))) В общем, в группе тебе помогал не Михаил а я )) Он занят был, сейчас вот вроде тоже подключился... Но вообще благодарен всем, кто помогал, всем спасибо кто уделил время! Ссылка на комментарий Поделиться на другие сайты Поделиться
ANDREY94 Опубликовано 22 февраля, 2018 Автор Поделиться Опубликовано 22 февраля, 2018 6 часов назад, keng сказал: Автор, привет! Давай разбираться по порядку. Ты хочешь сделать программу, которая будет способна определять цвет определенных пикселей в окне игры и производить какое-нибудь действие. Вот тебе список задач: 0. Найти каким-то образом положение и размер окна игры в пикселях. Пока задачу можно упростить и игру запускать в полноэкранном режиме. Сделай, покажи код (можно в лс) и поставим следующую задачу. Не стоит торопиться. Спойлер void CheckStrGame() { IntPtr hwnd = FindWindow(null, "CROSSFIRE"); RECT rect; GetWindowRect(hwnd, out rect); int Width = rect.Right - rect.Left; int Height = rect.Bottom - rect.Top; { } } Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 23 февраля, 2018 Поделиться Опубликовано 23 февраля, 2018 Отлично! Теперь снимай с этого окна скриншот и сохраняй в файл. Можно в bmp или tga - они самые простые. Ссылка на комментарий Поделиться на другие сайты Поделиться
ANDREY94 Опубликовано 24 февраля, 2018 Автор Поделиться Опубликовано 24 февраля, 2018 В 23.02.2018 в 08:43, keng сказал: Отлично! Теперь снимай с этого окна скриншот и сохраняй в файл. Можно в bmp или tga - они самые простые. PtrSc в игре и готово, скрин в bmp Что далее? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 26 февраля, 2018 Поделиться Опубликовано 26 февраля, 2018 В 24.02.2018 в 12:21, ANDREY94 сказал: PtrSc в игре и готово, скрин в bmp Что далее? Ты это ручками 60 раз в секунду будешь делать? Не говоря уж о том, что принтскрин в игре чаще всего даст черный экран Ссылка на комментарий Поделиться на другие сайты Поделиться
ANDREY94 Опубликовано 27 февраля, 2018 Автор Поделиться Опубликовано 27 февраля, 2018 В 23.02.2018 в 08:43, keng сказал: Отлично! Теперь снимай с этого окна скриншот и сохраняй в файл. Можно в bmp или tga - они самые простые. Спойлер Bitmap printscreen = new Bitmap(Width, Height); Graphics graphics = Graphics.FromImage(printscreen as Image); graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size); printscreen.Save(@"D:\printscreen.bmp", System.Drawing.Imaging.ImageFormat.Bmp); скрин делает, размер верно определяет но не определяет положение окна. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 27 февраля, 2018 Поделиться Опубликовано 27 февраля, 2018 1 час назад, ANDREY94 сказал: скрин делает, размер верно определяет но не определяет положение окна. А расскажи, пожалуйста, что делает каждая строчка в приведенном тобой коде. Я подозреваю, что этот код ты нашел на просторах интернетов, но вникнуть в него даже не попробовал. Потому и не определяет положение окна. Ссылка на комментарий Поделиться на другие сайты Поделиться
ANDREY94 Опубликовано 28 февраля, 2018 Автор Поделиться Опубликовано 28 февраля, 2018 (изменено) 20 часов назад, Xipho сказал: А расскажи, пожалуйста, что делает каждая строчка в приведенном тобой коде. Я подозреваю, что этот код ты нашел на просторах интернетов, но вникнуть в него даже не попробовал. Потому и не определяет положение окна. 1. определяет область 2. делает снимок этой области 3. создает изображение или копирует 4. сохраняет по указанному пути, с определенным заданным именем и форматом как картинку. наверное, между первым и вторым еще должна быть строчка(как минимум) определяющая положение окна на экране т.к. размер у нас уже есть. просто происходит так, что вместо заданного окна скринит часть рабочего стола с заданными размерами нужного окна. Изменено 28 февраля, 2018 пользователем ANDREY94 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 28 февраля, 2018 Поделиться Опубликовано 28 февраля, 2018 2 часа назад, ANDREY94 сказал: 1. определяет область 2. делает снимок этой области 3. создает изображение или копирует 4. сохраняет по указанному пути, с определенным заданным именем и форматом как картинку. Неверно. Копипаста без понимания не приведет к знаниям, которые мы стараемся дать. Ссылка на комментарий Поделиться на другие сайты Поделиться
JustHack Опубликовано 28 февраля, 2018 Поделиться Опубликовано 28 февраля, 2018 (изменено) [censored] Изменено 11 апреля, 2020 пользователем JustHack Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения