Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2011, 07:56   #1
Biohazard
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 78
По умолчанию Детектор Экрана

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

Как можно сделать скриншот таких областей экрана, которые отображаются по средством diretx или через видеопроигрыватели(обычное копирование экрана в таких случаях даёт чёрный квадрат)

п.с. заранее благодарю за помощь)
Biohazard вне форума Ответить с цитированием
Старый 30.01.2011, 08:14   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

1. CreateDC('DISPLAY',NULL,NULL,NULL); + BitBlt - для снятия скриншота
2. Копируем в буфер, позже опять копируем и сравниваем, после получаем измененную часть как результат сравнения двух скриншотов
BOBAH13 вне форума Ответить с цитированием
Старый 30.01.2011, 08:24   #3
Biohazard
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 78
По умолчанию

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

Последний раз редактировалось Biohazard; 30.01.2011 в 09:02.
Biohazard вне форума Ответить с цитированием
Старый 30.01.2011, 08:28   #4
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Никакая .
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 30.01.2011, 09:16   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Biohazard Посмотреть сообщение
какая функция при сравнение памяти выдаёт координаты измнённых пикселей?
п.с. если скриншот вашим способом делать, то по прежнему с фильмов будут получаться просто чёрные квадраты
Да никакая, сами делайте, и нет, все будет работать.
BOBAH13 вне форума Ответить с цитированием
Старый 30.01.2011, 09:23   #6
Biohazard
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 78
По умолчанию

насчёт скриншота, я уже сделал по вашему совету вот так

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  HC:HDC;
  rect:Trect;
begin
  HC:=CreateDC('DISPLAY',nil,nil,nil);
  image1.Picture.Bitmap.Width:=Screen.Width;
  image1.Picture.Bitmap.Height:=Screen.Height;
  BitBlt(Image1.Canvas.Handle, 0, 0, Image1.Picture.Width,
        Image1.Picture.Height, HC, 0, 0, SRCCOPY);
  Image1.Refresh;
end;
но если на экране видео или игра, то вместо него чёрный квадрат, и курсор не отслеживается, но ведь монитор всё это перерисовывает, значит получить както можно

Последний раз редактировалось Stilet; 30.01.2011 в 10:12.
Biohazard вне форума Ответить с цитированием
Старый 30.01.2011, 10:15   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но ведь монитор всё это перерисовывает, значит получить както можно
Вся проблема в том что методы прорисовки разные. Такими ты игру не перехватишь и бота не напишешь. Тут уже обсуждались попытки написания ботов, но общий ответ - это нерентабельно. Трейнеры кстати пишутся не работая с экраном, а взламивая и влияя на процесс и потоки игрушки, так что я бы на твоем месте забыл о "хаканьи" экрана.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2011, 10:23   #8
Biohazard
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 78
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Вся проблема в том что методы прорисовки разные. Такими ты игру не перехватишь и бота не напишешь. Тут уже обсуждались попытки написания ботов, но общий ответ - это нерентабельно. Трейнеры кстати пишутся не работая с экраном, а взламивая и влияя на процесс и потоки игрушки, так что я бы на твоем месте забыл о "хаканьи" экрана.
ах) не надо искать бота там, где его нет)) я лишь хочу получать в битмап то, что сам вижу на мониторе, а не отдельные части этого, вместе с видео, вместе с игрой любой, вместе с курсором, именно так, как рисует это нам видюха!)


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

Последний раз редактировалось Biohazard; 30.01.2011 в 10:38.
Biohazard вне форума Ответить с цитированием
Старый 30.01.2011, 11:39   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
мне нужно брать скриншот поверх всех оверлеев
Скажем так - я не знаю ни одной программы даже профессиональной которая может это делать. Чесно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.01.2011, 11:47   #10
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Если хотим чтобы прям таки все было, то смотрим тщательно сеть на предмет "screenshot directx". Вроде на codeproject видел пример как получить видео вывод.
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программный детектор движения Karabash Софт 26 04.06.2017 22:56
Детектор движения, жду ваших комментарий ubun Мультимедиа в Delphi 8 14.01.2011 17:42
Детектор движения toxich Мультимедиа в Delphi 27 29.05.2010 17:56
Детектор движения LARSn Помощь студентам 4 30.01.2009 14:04
Детектор движения LARSn Помощь студентам 3 30.01.2009 08:02