Перейти к содержанию

исходник автошота c#


Рекомендуемые сообщения

а как многопоточность в моем случае сделать? не совсем понимаю.. 

В ‎20‎.‎02‎.‎2018 в 14:23, IzerodayI сказал:

2) запилить многопоточность 

 

Ссылка на комментарий
Поделиться на другие сайты

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);  
                    }
                }

        }

 

Ссылка на комментарий
Поделиться на другие сайты

Посмотрел как работает построчно, сравнение происходит но нужный цвет в сравнении с целым 0xAB3B2E не определяется, хотя он сканирует картинку залитую этим цветом....

Вот скрин:

Спойлер

8adfad6bb054t.jpg

8adfad6bb054t.jpg

Изменено пользователем ANDREY94
Ссылка на комментарий
Поделиться на другие сайты

А чего скрин-то такой "большой"? Под отладкой смотри, какое будет значение цвета, когда будет считываться нужный пиксель, и потом его в сравнение добавь. Возможно, считывается полное значение с нулевым альфа-каналом. Или считывается значение в перевернутом виде. 

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, Xipho сказал:

А чего скрин-то такой "большой"? Под отладкой смотри, какое будет значение цвета, когда будет считываться нужный пиксель, и потом его в сравнение добавь. Возможно, считывается полное значение с нулевым альфа-каналом. Или считывается значение в перевернутом виде. 

Спойлер

5a8159c8df4b.png

 

Ссылка на комментарий
Поделиться на другие сайты

41 минуту назад, Xipho сказал:

А чего скрин-то такой "большой"? Под отладкой смотри, какое будет значение цвета, когда будет считываться нужный пиксель, и потом его в сравнение добавь. Возможно, считывается полное значение с нулевым альфа-каналом. Или считывается значение в перевернутом виде. 

Вот так вот начал искать

 

if (pixels[i, j] == 0x002e3bab) //        [0x00000000, 0x00000000]    0x002e3bab    uint

 

Изменено пользователем ANDREY94
Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, ANDREY94 сказал:

Вот так вот начал искать

В момент выполнения сравнения, когда сравнивается пиксел с нужным цветом, в pixels[i, j] что лежит?

Ссылка на комментарий
Поделиться на другие сайты

7 минут назад, Xipho сказал:

В момент выполнения сравнения, когда сравнивается пиксел с нужным цветом, в pixels[i, j] что лежит?

конкретно pixels[i, j] нет, есть по отдельности pixels и там лежит -         [0x00000000, 0x00000000]    0x002e3bab    uint

есть еще по отдельности I и J но они все по нулям -         j    0x00000000    int

 

 

 0x002e3bab это синий вроде как, но реагирует на тот который нужен мне... не знаю почему...

Изменено пользователем ANDREY94
Ссылка на комментарий
Поделиться на другие сайты

Извини, конечно, но у меня складывается ощущение, что в программировании ты совершенно не разбираешься. В твоем коде I и J - счетчики из циклов for. Разумеется, в первый момент срабатывания они равны нулю. А pixels - это массив.

pixels[i , j] - это доступ к определенной ячейке массива. Вот именно из нее значение тебе нужно смотреть, а не значение счетчиков. Обучать тебя как отлаживать код, ставить точки останова и наблюдаемые переменные я не буду.

Ссылка на комментарий
Поделиться на другие сайты

8 минут назад, Xipho сказал:

Извини, конечно, но у меня складывается ощущение, что в программировании ты совершенно не разбираешься. В твоем коде I и J - счетчики из циклов for. Разумеется, в первый момент срабатывания они равны нулю. А pixels - это массив.

pixels[i , j] - это доступ к определенной ячейке массива. Вот именно из нее значение тебе нужно смотреть, а не значение счетчиков. Обучать тебя как отлаживать код, ставить точки останова и наблюдаемые переменные я не буду.

Ну всё правильно я делаю, в i,j во время пробежки по коду добавляются эти цифры в конце 1-2-0 (чередуются) в конечном счете в pixels записывается этот цвет - 0x002e3bab

 

Я так же попробовал на белом фоне просканировать пиксели на цвет, все тоже самое но в конечном pixels выдал -  0x00fffff (белый цвет)

Ссылка на комментарий
Поделиться на другие сайты

7 минут назад, ANDREY94 сказал:

в конечном счете в pixels записывается этот цвет - 0x002e3bab

Ну так если это и есть нужный тебе цвет, его и вставь в сравнение, в чем проблема? Я же писал, что, возможно, пиксель считывается с нулевым альфа-каналом. Так и есть -  0x002e3bab 

А ты подставил перевернутое значение, прочитав, что и такое может быть, и ждешь, что у тебя сравнение прокатит. Я ведь писал, что нужно смотреть под отладкой, как цвет считывается, и нужное значение в сравнении прописывать.

 

Добавлено:

Собственно, оно перевернутое и есть. То есть, в формате RGB оно должно быть как AB3B2E. Но в пиксел оно при считывании записывается как ABGR - 002E3BAB. И это разные числа. 

Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, Xipho сказал:

Ну так если это и есть нужный тебе цвет, его и вставь в сравнение, в чем проблема? Я же писал, что, возможно, пиксель считывается с нулевым альфа-каналом. Так и есть -  0x002e3bab 

А ты подставил перевернутое значение, прочитав, что и такое может быть, и ждешь, что у тебя сравнение прокатит. Я ведь писал, что нужно смотреть под отладкой, как цвет считывается, и нужное значение в сравнении прописывать.

 

Добавлено:

Собственно, оно перевернутое и есть. То есть, в формате RGB оно должно быть как AB3B2E. Но в пиксел оно при считывании записывается как ABGR - 002E3BAB. И это разные числа. 

Так я давно так уже и сделал!

Я же написал, что с таким цветом сравнение заработало!

 

if (pixels[i, j] == 0x002e3bab) //        [0x00000000, 0x00000000]    0x002e3bab    uint

Ссылка на комментарий
Поделиться на другие сайты

Автор, привет! Давай разбираться по порядку. Ты хочешь сделать программу, которая будет способна определять цвет определенных пикселей в окне игры и производить какое-нибудь действие. Вот тебе список задач:

 

0. Найти каким-то образом положение и размер окна игры в пикселях. Пока задачу можно упростить и игру запускать в полноэкранном режиме.

 

Сделай, покажи код (можно в лс) и поставим следующую задачу. Не стоит торопиться.

Ссылка на комментарий
Поделиться на другие сайты

Теперь проблема со сканируемой областью, я в игре сделал скриншот наведя прицел на врага, далее открыл этот скрин на весь экран и определил нужные координаты, где высвечивается ник... определил это всё в пикселях и пошёл проверять... На скрине эта область определяется а вот в игре уже нет... в чем проблема?

Ссылка на комментарий
Поделиться на другие сайты

В 16.02.2018 в 12:35, ANDREY94 сказал:

Сегодня Михаил помог мне сделать алгоритм работы

Блин, только сейчас заметил ))) В общем, в группе тебе помогал не Михаил а я ))

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, Xipho сказал:

Блин, только сейчас заметил ))) В общем, в группе тебе помогал не Михаил а я ))

Он занят был, сейчас вот вроде тоже подключился... Но вообще благодарен всем, кто помогал, всем спасибо кто уделил время!

Ссылка на комментарий
Поделиться на другие сайты

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;
            {
               
            }
        }

 

Ссылка на комментарий
Поделиться на другие сайты

В 23.02.2018 в 08:43, keng сказал:

Отлично! Теперь снимай с этого окна скриншот и сохраняй в файл. Можно в bmp или tga - они самые простые.

PtrSc в игре и готово, скрин в bmp

Что далее?

Ссылка на комментарий
Поделиться на другие сайты

В 24.02.2018 в 12:21, ANDREY94 сказал:

PtrSc в игре и готово, скрин в bmp

Что далее?

Ты это ручками 60 раз в секунду будешь делать? Не говоря уж о том, что принтскрин в игре чаще всего даст черный экран

Ссылка на комментарий
Поделиться на другие сайты

В 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);

скрин делает, размер верно определяет но не определяет положение окна.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, ANDREY94 сказал:

скрин делает, размер верно определяет но не определяет положение окна.

А расскажи, пожалуйста, что делает каждая строчка в приведенном тобой коде. Я подозреваю, что этот код ты нашел на просторах интернетов, но вникнуть в него даже не попробовал. Потому и не определяет положение окна.

Ссылка на комментарий
Поделиться на другие сайты

20 часов назад, Xipho сказал:

А расскажи, пожалуйста, что делает каждая строчка в приведенном тобой коде. Я подозреваю, что этот код ты нашел на просторах интернетов, но вникнуть в него даже не попробовал. Потому и не определяет положение окна.

1. определяет область

2. делает снимок этой области

3. создает изображение или копирует

4. сохраняет по указанному пути, с определенным заданным именем и форматом как картинку.

 

наверное, между первым и вторым еще должна быть строчка(как минимум) определяющая положение окна на экране т.к. размер у нас уже есть.

просто происходит так, что вместо заданного окна скринит часть рабочего стола с заданными размерами нужного окна.

 

 

Изменено пользователем ANDREY94
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, ANDREY94 сказал:

1. определяет область

2. делает снимок этой области

3. создает изображение или копирует

4. сохраняет по указанному пути, с определенным заданным именем и форматом как картинку.

Неверно. Копипаста без понимания не приведет к знаниям, которые мы стараемся дать. 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.