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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2008, 00:56   #1
pecson
 
Регистрация: 10.12.2008
Сообщений: 4
Плохо Сканирование экрана

Суть проблемы:
Надо средствами делфи или winapi реализовать просмотр экрана (снимка экрана) с сравнением небольшой области с эталоном. Помогите пожалуйста, не дайте засыпаться...
pecson вне форума Ответить с цитированием
Старый 12.12.2008, 10:12   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

юзай RAdmin
fbus вне форума Ответить с цитированием
Старый 12.12.2008, 12:22   #3
Vedrus
ИСККОНный хакер
Форумчанин
 
Аватар для Vedrus
 
Регистрация: 08.11.2007
Сообщений: 195
По умолчанию

Как вариант, можно создать окно сос стилем WS_EX_TRANSPARENT. Если развернуть его во весь экран, то то, что под этим окном находится копируется в него и уже внутри этого окна через HDC можно разгребать содержимое.
#define QUESTION bb || !bb
Vedrus вне форума Ответить с цитированием
Старый 12.12.2008, 13:52   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Код:
DC := GetDC (0);
Будет указывать на весь экран. Далее можно получить содержимое. Как-то делал что-то подобное. Вот кусок кода, который снимает экран:
Код:
  Width  := GetSystemMetrics (SM_CXSCREEN);
  Height := GetSystemMetrics (SM_CYSCREEN);

  // НАЧАЛО: Делаем снимок экрана
  with DIB.bmiHeader do
  begin
    biSize          := SizeOf (DIB.bmiHeader);
    biWidth         := Width;
    biHeight        := Height;
    biPlanes        := 1;
    biBitCount      := 32;
    biCompression   := BI_RGB;
    biSizeImage     := Width * Height * 4;
    biXPelsPerMeter := 0;
    biYPelsPerMeter := 0;
    biClrUsed       := 0;
    biClrImportant  := 0;
  end; {with}
  GetMem (Buff32, DIB.bmiHeader.biSizeImage);
  DC := GetDC (0);
  HDC1 := CreateCompatibleDC (DC);
  hBitMap := CreateDIBSection (HDC1, DIB, DIB_PAL_COLORS, Adr, 0, 0);
  SelectObject (HDC1, hBitMap);
  BitBlt (HDC1, 0, 0, Width, Height, DC, 0, 0, SRCCOPY);
  GetDIBits (HDC1, hBitMap, 1, Height, Buff32, DIB, DIB_PAL_COLORS);
  DeleteObject (HDC1);
  DeleteObject (hBitMap);
  DeleteDC (DC);
  DeleteDC (hBitMap);
  // КОНЕЦ: Делаем снимок экрана
Сейчас лень расписывать подробно, что и как тут работает. Если Вам надо - разберётесь.
Arigato на форуме Ответить с цитированием
Старый 13.12.2008, 00:59   #5
pecson
 
Регистрация: 10.12.2008
Сообщений: 4
По умолчанию

спасибо большое, но надо ещё организовать поиск области, совпадающей с эталоном...В принципе это была главная проблема
pecson вне форума Ответить с цитированием
Старый 13.12.2008, 07:25   #6
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Что там у вас? Bitmap-ы?
Попиксельно проверяйте.
Цыклом. Примерно так:
Код:
procedure getChangedPix;
var
x, y: cardinal;
begin
   { при условии, что есть 3 глобальные переменные, 
   curBmp, lastBmp: tBitmap; которые надо сравнить и deltaBmp: tBitmap в которую запишутся только не изменившиеся пикселы. Все 3 картинки равны в размерах. 
   Изменившиеся будут красными}
   for x := 0 to curBmp.width - 1 do
      for y := 0 to curBmp.height - 1 do
      begin
          if curBmp.pixels[x, y] = lastBmp.pixels[x, y] then
             deltaBmp[x, y] := curBmp.pixels[x, y]
          else 
             deltaBmp[x, y] := clRed;
Altera вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расширение экрана LAFUDR Помощь студентам 1 24.05.2008 15:12
Сканирование программой папки. Delphi DerSky Помощь студентам 2 21.05.2008 10:52
Пределы экрана Манжосов Денис :) Общие вопросы Delphi 6 01.05.2008 10:58
Разрешение экрана -=<[Evklidd]>=- Общие вопросы Delphi 1 20.02.2008 10:55
сканирование директорий и помещение их в listview А. Долматов Общие вопросы Delphi 4 27.09.2007 13:04