Форум программистов «Весельчак У»
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
Начало
Наши сайты
Галерея
Весельчак У
Наша Вики
Хранилище
Проекты
Правила
Правила форума
Правила русского языка
Помощь
Поиск
Календарь
Почта
Войти
Регистрация
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
WinAPI & Visual C++
(Модератор:
Вад
) > Тема:
Как скопировать окно?
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Как скопировать окно? (Прочитано 9542 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
onic777
Интересующийся
Offline
Пол:
Как скопировать окно?
«
:
18-11-2016 18:33 »
Добрый день, Знатоки!
Имеется некоторое окно для которого известен HWND hWndSrc. На окне что-то рисуется...
Как создать точную копию окна и повторять в нем все, что рисуется в первом окне?
С Уважением,
Onic777
Записан
zubr
Гость
Re: Как скопировать окно?
«
Ответ #1 :
18-11-2016 21:55 »
1. Получить контекст окна source: GetDc(hWndSrc)
2. Получить контекст окна dest: GetDC(hWndDest)
3. Скопировать контекст окна source в контекст окна dest: BitBlt
Записан
onic777
Интересующийся
Offline
Пол:
Re: Как скопировать окно?
«
Ответ #2 :
19-11-2016 06:57 »
Спасибо!
Но это прокатит если окно-копия уже существует!
А в вопросе было "Как создать точную копию окна"!
1. Сздает ли окно-копию CreateCompatibleDC(hdcSrc); ?
Если да как его сделать видимым?
2. Если есть Bitmap с заданными размерами, как для него создать окно-копию и сделать его (окно) видимым?
3. Как вообще с помощью WinAPI создать видимое окно с заданными размерами (известен только hWndSrc окна-источника)
Спасибо за ответы начинающему!
Если можно по подробнее!
Onic777
Записан
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
Re: Как скопировать окно?
«
Ответ #3 :
19-11-2016 08:28 »
onic777
, в общем случае - примерную копию можно попробовать сделать, понадобятся функции, подобные перечисленным здесь (это для MFC, но они очень похожи, можно найти аналоги для винапи)
https://msdn.microsoft.com/en-us/library/1xb05f0h.aspx
забираешь класс окна, его стили и размеры, создаёшь такое же. Потом шуршишь по чайлдам и воссоздаёшь такое же дерево потомков. Но это будет только каркас, без функционала, который в окне-источнике, возможно, изменён.
Удачи и терпения
Записан
>FAQ ПО ПРОГР.
>ССЫЛКИ ПО ПРОГР.
>Правила"Неотложки"
zubr
Гость
Re: Как скопировать окно?
«
Ответ #4 :
20-11-2016 07:50 »
Алексей++
, ну там у топик стартера ключевая фраза - "что то рисуется в окне", то есть речь, как я понял, о динамике, а не только воссоздание статических элементов окон.
Простой вариант - конечно не реальная рабочая копия - в цикле периодически сохранять искомое окно в битмап (алгоритм сохранения в битмап описан в моем посте выше).
Ну а сложный вариант (как я предполагаю - речь о окне чужого процесса):
1. Копирование структуры статических элементов окна, то есть дочерних окон, как описал выше
Алексей++
.
2. Инжект в процесс копируемого окна, перехват функций создания окон (CreateWindow, CreateWindowEx), если в процессе работы копируемого окна создаются новые дочерние окна, перехват GDI-функций, если в окне что то рисуется или пишется. Возможно еще и сабклассинг функций копируемого окна и его дочерних окон, для эмуляции событий копируемого окна в своем окне.
По 2-му варианту цена вопроса достаточно высока, одних только функций GDI больше сотни наберется и каждую надо прописать в коде. Я уж не говорю про отладку, которая в чужом процессе проводится посредством отладочных сообщений, пишущихся в лог.
Лет 6 назад я для одной конторы писал PrintSniffer _http://searchinform.ru/products/kib/how-it-works/printsniffer/, вот там как раз и пришлось перехватывать GDI-функции, ушло на это 3 месяца (это только на модуль перехвата).
Записан
onic777
Интересующийся
Offline
Пол:
Re: Как скопировать окно?
«
Ответ #5 :
26-11-2016 11:48 »
Всем спасибо за ответы!
Проблема разрешилась!
Onic777
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Форум программистов «Весельчак У»
>
Программирование
>
C/C++
>
WinAPI & Visual C++
(Модератор:
Вад
) > Тема:
Как скопировать окно?
Загружается...