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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2017, 09:33   #1
Ice-Breaker
Новичок
Джуниор
 
Регистрация: 22.01.2009
Сообщений: 2
По умолчанию Обработка скриншота чужого окна.

Всем привет.

Такой вопрос.
Имеется функция, которая делает скриншот нужного мне окна (чужого), а я дальше уже с этим битмапом работаю отдельно.

Сама функция:
Код:
function CreateSnapshot ( WindowHD : HWND):HBitmap;
var
  rcSrc:Trect;
  hDC1:HDC;
  hSrcDC:HDC;
  hBmp:HBITMAP ;
begin
  GetWindowRect(WindowHD, rcSrc);
  hDC1:= GetDC(WindowHD);
  hSrcDC:=CreateCompatibleDC(hDC1);
  hBmp := CreateCompatibleBitmap(hDC1, rcSrc.right - rcSrc.left, rcSrc.bottom - rcSrc.top);
  SelectObject(hSrcDC, hBmp);
  PrintWindow(WindowHD, hSrcDC, 0);
  Result:=hBmp;
end;
И вот проблема, я не как не могу обойтись, без сохранения в файл этого скриншота.
Т.е. вот так не работает:

Код:
var wnd: hwnd;
    TempBitmap:TBitmap;
………………

TempBitmap.Handle:=CreateSnapshot(wnd);

// дальше обработка ну или как пример в имэйдж загрузить, НО ТУТ ничего не происходит

Form1.Image1.Picture.Graphic:=nil;
Form1.Image1.Picture.Bitmap:=TempBitmap;
А вот если добавить сохранение и выгрузку из файла, то всё работает

Код:
TempBitmap.Handle:=CreateSnapshot(wnd);
TempBitmap.SaveToFile('C:\1.bmp');
TempBitmap.LoadFromFile('C:\1.bmp');

// дальше обработка идёт нормально, как и задумывалось

Form1.Image1.Picture.Graphic:=nil;
Form1.Image1.Picture.Bitmap:=TempBitmap;
Как обойтись без сохранения в файл?

И вот ещё вопрос к этому всему.

Если в Windows 7, включить в «Персонализации» - «Классическую упрощённую схему», то скриншоты вообще перестают делаться, функция возвращает чёрный квадрат.
Можно от этого избавиться, а вернее есть какое-нибудь решение?
Ice-Breaker вне форума Ответить с цитированием
Старый 24.05.2017, 16:09   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию


8.png
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 25.05.2017, 09:11   #3
Ice-Breaker
Новичок
Джуниор
 
Регистрация: 22.01.2009
Сообщений: 2
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Спасибо.
Поставил себе этот компонент, всё заработало без каких-либо файлов.
Правда качество картинки немного изменилось, пришлось переделывать обработчик, но это не страшно.

А вот в классическом режиме, также имеются проблемы. Скрин получается, только если нужное мне окно нечем не закрыто, а иначе скринится та часть окна (под размер нужного), которая на переднем плане.
Ice-Breaker вне форума Ответить с цитированием
Старый 25.05.2017, 09:15   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от Ice-Breaker Посмотреть сообщение
а иначе скринится та часть окна (под размер нужного), которая на переднем плане
Ну на приведённом min@y™ скриншоте несколько функций ScreenShot, попробуйте другие использовать. Не ту, в которой выбирается область скрина, а где задаётся объект.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обновление чужого окна WorldMaster Win Api 7 06.04.2017 17:43
Заменить содержимое чужого окна jhonyxakep Win Api 1 10.05.2011 01:45
Сворачивание чужого окна artemavd Общие вопросы Delphi 2 27.04.2010 07:45
VirtualStringTree чужого окна akaTemporary Общие вопросы Delphi 0 29.01.2010 14:32
Запрет закрытия чужого окна DV-Karpov Общие вопросы Delphi 2 20.09.2009 10:26