![]() |
|
![]() ![]() ![]() |
|
ano360 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 22.5.2006 Где: Москва Репутация: нет Всего: нет |
Здравствуйте.
Каким образом можно получить в Bitmape снимок чужого, определенного окна? подходит любой из следующий вариантов: - получить снимок конкретного(чужого) окна сразу в битмап (может через директ икс как можно)?? - получить снимок конкретно окна в буфер обмена (как из буфера переправить в битмап умею) - получить снимок "рабочего стола"(т.е. всего что есть на экране) в битмап - каким либо образом получить эффект как при нажатии кнопки PrintScreen (просто симулировать нажатие этой кнопки у меня не получается т.к. не могу получить код этой клавиши...) -------------------- Жизнь есть. |
|||
|
||||
Comm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: 2 Всего: 1 |
-------------------- =))))) ![]() |
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 25 Всего: 372 |
WM_PRINT PrintWindow VK_SNAPSHOT |
|||
|
||||
ano360 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 22.5.2006 Где: Москва Репутация: нет Всего: нет |
_
Это сообщение отредактировал(а) ano360 - 28.1.2009, 16:28 -------------------- Жизнь есть. |
|||
|
||||
ano360 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 22.5.2006 Где: Москва Репутация: нет Всего: нет |
процедуру PrintWindow мой билдер почему то не знает, но это ладно
WM_PRINT запускаю вот так: WindowProc(CashWnd, WM_PRINT,(WPARAM)Image1->Canvas->Handle,NULL); Мне выдает ошибки: [C++ Warning] Unit1.cpp(60): W8029 Temporary used for parameter 'Message' [C++ Error] Unit1.cpp(60): E2034 Cannot convert 'void *' to 'TMessage' [C++ Error] Unit1.cpp(60): E2342 Type mismatch in parameter 'Message' (wanted 'TMessage &', got 'void *') [C++ Error] Unit1.cpp(60): E2226 Extra parameter in call пробую SendMessage(CashWnd, WM_PRINT,(WPARAM)Image1->Canvas->Handle,NULL); и Image1 заливается белым не подскажите что не так? Это сообщение отредактировал(а) ano360 - 29.1.2009, 19:02 -------------------- Жизнь есть. |
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 25 Всего: 372 |
ano360, импортируй PrintWindow из User32.dll. Описание есть, параметры все описаны
![]() Пример использования PrintWindow(правда Delphi): http://forum.sources.ru/index.php?showtopi...t&p=1765382 |
|||
|
||||
Rrader |
|
|||
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 13 Всего: 191 |
|
|||
|
||||
ano360 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 22.5.2006 Где: Москва Репутация: нет Всего: нет |
Rrader спасибо за кон он рабочий но только в том случае если окно ничем не закрыто.
для использования PrintWindow каким образом нужно подключить User32.dll -------------------- Жизнь есть. |
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 25 Всего: 372 |
С PrintWindow насколько я помню будет та же проблема. А 'подключить' можно например с помощью LoadLibrary, GetProcAddress...
Можно попробовать выдвинуть нужное окно на верх(SetForegroundWindow), a после двинуть обратно назад... Возможно, тогда поможет ![]() |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 57 Всего: 146 |
Нужно указать директивы WINVER и _WIN32_WINNT.
Функция PrintWindow присутствует, начиная с Windows XP. Это сообщение отредактировал(а) 586 - 31.1.2009, 14:29 |
|||
|
||||
ano360 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 22.5.2006 Где: Москва Репутация: нет Всего: нет |
этот самы простой и естественный способ я уже попробовал, окно просто не успевает перерисоваться и мы получаем тоже что и раньше, а если сначала поднять окно, потом чрез некоторое время по таймеру сделать его скрин и убрать то оно получается мигает на экране и необходимое время всегда разное. в зависимости от загруженности системы Добавлено через 14 минут и 10 секунд ВСЕМ УЧАВСТВОВАВШИМ ГИГАНТСКОЕ СПАСИБО!!!!!!!!!!!!! ПРОБЛЕМА РЕШЕНА!!!!!!!!!!!!!!!!!! ОСОБЕННО СПАСИБО 586 за PrintWindow и THandle за тоже самое. -------------------- Жизнь есть. |
|||
|
||||
ano360 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 22.5.2006 Где: Москва Репутация: нет Всего: нет |
проблема была решена вот так: не очень эстетично, но за то работоспособно:
SetWindowPos(CasinoHWnd,NULL,-800,-600,800,600,SWP_NOZORDER) ; //уносим окно за пределы экрана PrintWindow(CasinoHWnd, Form1->Canvas->Handle, 0); //прерисовываем его в нужнаю нам конву а дальше уже как хотите можно и вернуть его на место и оставить так на будующее -------------------- Жизнь есть. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |