0 / 0 / 0
Регистрация: 11.11.2015
Сообщений: 16
1

Захват изображения окна программы

13.11.2015, 00:59. Показов 2373. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
по клику на батоне захватываю изображение окна программы. далее вставляю в имедж.
пытаюсь все это проделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//создаю конву
  TCanvas* tCanvas = new TCanvas;
  //размеры областей от куда и куда
 TRect tRectFrom;
 TRect tRectTo;
 
    // получаю дискриптор окна пихаю в переменну Window
   HDC hdc; // пришлось создать hdc без него ReleaseDC(Window,hdc) не шел 
   HWND Window;
   Window = FindWindow("Notepad", "Безымянный - Блокнот");
   // Проверяю открыто ли окно
   if(!Window) ShowMessage("Блокнот не открыт");//знаю тут надо завершить
 
   //делаем снимок окна приложения
   //используем ранее полученный дискриптор
 tCanvas->Handle = GetWindowDC(Window);
   
//устанавливаем размеры TBitmap
   //соответствующие размеру окна
   // тут получаем размер нашего окна
   WINDOWINFO pwi;
   pwi.cbSize = sizeof(WINDOWINFO);
   GetWindowInfo(Window,&pwi);
 Image1->Picture->Bitmap->Width = pwi.rcWindow.right - pwi.rcWindow.left;
 Image1->Picture->Bitmap->Height = pwi.rcWindow.bottom - pwi.rcWindow.top;
 
// размеры источника
 tRectFrom.Left=0;
 tRectFrom.Top=0;
 tRectFrom.Right=pwi.rcWindow.right - pwi.rcWindow.left;
 tRectFrom.Bottom=pwi.rcWindow.bottom - pwi.rcWindow.top;
   
//размеры получателя
    tRectTo.Left=0;
   tRectTo.Top=0;
   tRectTo.Right=320;
   tRectTo.Bottom=200;
 
 //копируем изображение TBitmap с одной конвы на другую
 Image1->Picture->Bitmap->Canvas->CopyRect(tRectTo,tCanvas,tRectFrom);
  
//масштабируем изображение (сие мне непонятно)
 Image1->Stretch=true;
 
//Освобождаем ресурсы
 delete tCanvas;
 ReleaseDC(Window,hdc);// без hdc компиль ругался
}
Прошу посмотреть код. Где ошибки?
Вопросы:
1. Что-то не так делаю с размерами источника и приемника. При изменении размеров окна блокнота
меньше чем размер приемника происходит увеличение и наоборот окно блокнота больше, а на имедже оно уменьшается. Хотелось бы что-бы оно было раскрыто полностью на весь имедж, независимо от размеров.
(как-то надо еще и пропорции источника(окна блокнота) сохранить, чтоб коряво небыло).
Изменение размеров формы отключил в ее свойствах.
2. Canvas->CopyMode=cmSrcCopy; пробывал использовать перед копированием конвы, не помогает.
3. Пытался достать скрин функцией GetDC(Windows), но получается без верха окна (отсутствует заголовок и меню).
4. ReleaseDC(Window,hdc); без hdc компиль ругался на отсутствие параметра, пришлось его создать. Нужна ли эта строка? Нужно ли освобождать от созданного Window?

Добавлено через 13 минут
С размерами на весь приемник разобрался.
Поправил тут:
C++
26
27
Image1->Picture->Bitmap->Width = 320;  //вместо pwi.rcWindow.right - pwi.rcWindow.left;
 Image1->Picture->Bitmap->Height = 200; //вместо  pwi.rcWindow.bottom - pwi.rcWindow.top;
надо докурить пропорциональное изменение размеров приемника в зависимости от передатчика.
надо пересчитывать и менять видимо.
Но код прошу посмотреть, может что интересное подскажите. Пожалуйста гляньте.
0
13.11.2015, 00:59
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.11.2015, 00:59
Ответы с готовыми решениями:

Захват изображения со второго монитора
Как захватить изображение со ВТОРОГО монитора в системе? Код ниже захватывает изображение всегда с первого hDC = GetDC (0); ...

Захват изображения с одного монитора и копирование его на второй, подключенные к одному и тому же компьютеру
Друзья, подскажите пожалуйста. Имеется два монитора, подключенных к одному компьютеру. Нужно реализовать захват экрана одного монитора, для...

Захват окна другой программы
Как можно из моей программы управлять окном, которое создано другим приложением (нажать в нём кнопку открыть закрыть)?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.11.2015, 00:59
Помогаю со студенческими работами здесь

При изменении размера окна программы меняется и размер изображения
Здравствуйте. Как сделать так, чтобы при изменении размера окна программы менялся и размер изображения ? Фигуры строил с помощью...

Захват изображения
Нужен софт для захвата изображения. Случай такой: захожу на один сайт с помощью браузера, там есть изображение, на странице сайта есть...

Захват окна
Я еще новичек в програмиировании, пожалуста подскажите подробно как реализовать захват другого окна. Пример: моя программа должна захватить...

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

Захват изображения с камеры
Есть некая камера со своим SDK. Пишу простенькое приложение для захвата с неё изображения. Ниже пробный код, который по нажатию кнопки...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Опции темы

Новые блоги и статьи
Использование кэша Laravel - полный гайд
bytestream 18.02.2025
Кэширование - один из наиболее эффективных способов повышения производительности веб-приложений. В современном мире, где скорость загрузки страниц напрямую влияет на удержание пользователей и. . .
Создаем REST API в Laravel с аутентификацией через Passport
bytestream 18.02.2025
Разработка современных веб-приложений все чаще требует создания надежного и хорошо структурированного API. REST API стал стандартом де-факто для построения взаимодействия между клиентской и серверной. . .
Пайплайны в Laravel - полный гайд
bytestream 18.02.2025
Разработка современных веб-приложений часто требует обработки сложных процессов, состоящих из множества последовательных шагов. Например, при создании системы комментариев может потребоваться. . .
Как правильно использовать @required в Symfony
bytestream 18.02.2025
При разработке приложений на Symfony мы часто сталкиваемся с необходимостью внедрения зависимостей. Фреймворк предоставляет несколько способов управления этим процессом, и одним из таких инструментов. . .
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru