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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2014, 08:52   #1
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

В общем, ситуация такая.
К примеру, у меня на рабочем столе открыты: Браузер + Антивирус + Word
И я хочу, что бы моя программа, делала скриншот не всего монитора, а только скриншот определённой программы.
Я к примеру, хочу, что бы программа сделала скриншот Word. Но как это сделать?

У меня есть одно предположение, как это сделать...
1) Выбираем имя нужной нам программы
2) Узнаём её координаты
3) Делаем скриншот монитора, согласно полученным координатам

Если я рассуждаю верно, тогда что бы узнать координаты нужного мне окна, надо использовать функцию GetWindowsRect.
Не сталкивался, щас буду читать

Последний раз редактировалось Stilet; 29.04.2014 в 21:06.
Janger вне форума Ответить с цитированием
Старый 28.04.2014, 10:39   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

FindWindowEx+GetWindowRect+BitBlt = скриншот окна программы.

Только 1 хитрость есть:
1. Программа должна стать поверх всех окон.
2. Игровые D3D, OpenGL, DX таким способов вы снять не сможете. Надо идти через DIB.
Человек_Борща вне форума Ответить с цитированием
Старый 29.04.2014, 20:17   #3
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
FindWindowEx+GetWindowRect+BitBlt = скриншот окна программы.

Только 1 хитрость есть:
1. Программа должна стать поверх всех окон.
2. Игровые D3D, OpenGL, DX таким способов вы снять не сможете. Надо идти через DIB.
Я явно делаю, что то не так. Потому что, форма копируется нужных размеров, но картинка вся белая. Вообще ничего нету.
Janger вне форума Ответить с цитированием
Старый 29.04.2014, 20:47   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Окно которое вы хотите заснять должно быть видимым. Показывайте код, как делаете скрин.
Человек_Борща вне форума Ответить с цитированием
Старый 29.04.2014, 20:58   #5
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Окно которое вы хотите заснять должно быть видимым. Показывайте код, как делаете скрин.
1) Окно видимое
2) Вот код:
Код:
hell:=ComboBox2.Text;
h := findwindow(nil, PWideChar(WideString(hell)));
if h<>0 then
begin
  GetWindowRect(h, WindowRect);
  ShowMessage(Format('top=%d Left=%d Width=%d Height=%d',[WindowRect.Top, WindowRect.Left,
  WindowRect.Right-WindowRect.left, WindowRect.Bottom-WindowRect.Top]));

    bmp := TBitmap.Create;
    bmp.Width := WindowRect.Right-WindowRect.left;
    bmp.Height := WindowRect.Bottom-WindowRect.Top;  
    StretchBlt(bmp.Canvas.Handle,WindowRect.Top,WindowRect.Left,WindowRect.Right-WindowRect.left, WindowRect.Bottom-WindowRect.Top,
    bmp.Canvas.Handle,WindowRect.Top,WindowRect.Left,WindowRect.Right-WindowRect.left, WindowRect.Bottom-WindowRect.Top,SRCCOPY);

    bmp.SaveToFile('E:\Users\Tim\Desktop\1.bmp');
    bmp.Free;

end;
3) В ComboBox2 хранятся все "названия" активных приложений
Janger вне форума Ответить с цитированием
Старый 29.04.2014, 21:05   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Затупил. Deleted
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 29.04.2014 в 21:54.
Аватар вне форума Ответить с цитированием
Старый 29.04.2014, 21:39   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

У вас StrechBlt. а я писал про BitBlt
Человек_Борща вне форума Ответить с цитированием
Старый 30.04.2014, 00:07   #8
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
У вас StrechBlt. а я писал про BitBlt
Просто на одном сайте, я прочёл следующее:
=================================== =========
Две функции, которые очень важны для работы с изображениями – это BitBlt и StretchBlt. Обе они служат для копирования растровых изображений, а при помощи функции StretchBlt можно также изменять размер изображения.
=================================== =========
Janger вне форума Ответить с цитированием
Старый 30.04.2014, 00:09   #9
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Затупил. Deleted
простите, я вас не понял...
Janger вне форума Ответить с цитированием
Старый 30.04.2014, 00:18   #10
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Так надо ещё и своей головой думать Вам надо взять часть изображения, а не взять и обрезать/сжать. Последнее и делает StretchBlt.
Человек_Борща вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Блокирование получения WM_CONTEXTMENU сторонней программы. Smogg Win Api 0 24.06.2013 17:15
Экспорт информации из сторонней программы alkador Общие вопросы Delphi 5 26.05.2012 21:39
Данные из памяти сторонней программы epileptick Общие вопросы C/C++ 8 01.01.2011 19:19
Определение завершения сторонней программы Хамяг Общие вопросы Delphi 3 26.11.2008 18:12
Как определить момент запуска сторонней программы? NioTo Win Api 2 17.12.2007 16:40