Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с окном чужого процесса  (Прочитано 8817 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 09-12-2008 20:41 » 

Контекст обсуждения: WinAPI.

Вопрос первый. Можно ли как-нибудь прочитать содержимое окна чужого приложения как графическую картинку? Крайне желательно без эмуляции Alt+PrtSc и буфера обмена.

Вопрос второй. Если ответ на первый вопрос положительный, то как бы наладить процесс такого чтения в момент, когда чужому окну достаётся событие WM_PAINT, и оно завершает его обработку? С завершением обработки можно упростить, организовав чтение спустя, допустим, 100 мс после события - время, за которое наблюдаемое окно гарантированно успеет себя перерисовать. Так что остаётся ловля события, адресованного чужому окну.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 09-12-2008 20:53 » 

Как я вижу в одной из соседних тем, есть функция GetPixel(HDC, int, int). Правда, читать она умеет только видимую часть окна.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 09-12-2008 21:08 » 

Как я вижу в одной из соседних тем, есть функция GetPixel(HDC, int, int). Правда, читать она умеет только видимую часть окна.

попробуй
BOOL BringWindowToTop( HWND hWnd); (выбросит окно поверх всех окон, кроме тех, что SYSTEMMODAL , но можно временно это свойство приделать - WS_EX_TOPMOST )

затем
BOOL UpdateWindow(HWND hWnd ); - перерисовать (отсылает в оконную процедуру WM_PAINT)

потом достать картинку

« Последнее редактирование: 09-12-2008 21:12 от Алексей1153++ » Записан

zubr
Гость
« Ответ #3 : 09-12-2008 22:12 » 

1. Ставим глобальный хук на WM_PAINT
2. В процедуре обработки хука проверяем в каком процессе происходит действо. Если в интересующем нас, вызываем BitBlt с контекста интересующего нас окна.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 09-12-2008 23:40 » 

dimka, я давно давно уже где-то выкладывал у нас на форуме одну прогу с исходниками, на основе которой позже расплодилось великое множество програм для создания видео записи с участка или всего экрана. Они используются для видео уроков и тп. Помню только что начинается на cam. Я так думаю это как раз, то что тебе надо. Поищи, если не найдёшь, то буду поднимать архивы. Инет ресурс уже давно продали с потрохами. Осталась только память.

Как альтернатива - глянь исходники Мозилки, у неё есть такая фича - показывать затабенную страничку как картинку.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines