|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
25.11.2009, 14:19 | #1 |
Пользователь
Регистрация: 08.10.2009
Сообщений: 16
|
Проблема с GetDC
делаю:
bmp:=TBitmap.Create; bmp.Height:=500; bmp.Width:=500; DC:=GetDC(findwindow('Notepad','fai l.info - Блокнот')); bitblt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height,DC, 0, 0, SRCCOPY); если окно развернуто,то захват изображения делает корректно,а если нет,то просто белое изображение.Как сделать чтобы изображение захватывалось по указанному хэндлу,даже если окно свернуто? Thanx. захват изображения активного окна прекрасно работает если GetDC(0),но мне нужно чтобы захват изображения происходил для другого окна(неактивного,а указанного хэндла) GetDC(findwindow('Notepad','1.txt - Блокнот')).вот. Последний раз редактировалось mihali4; 26.11.2009 в 22:26. |
25.11.2009, 17:12 | #2 | |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
Цитата:
Код:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation Последний раз редактировалось raxp; 25.11.2009 в 17:17. |
|
26.11.2009, 15:23 | #3 |
Пользователь
Регистрация: 08.10.2009
Сообщений: 16
|
Всем спасибо,вся инфа очень полезна
У меня остался один вопрос: Как сделать частичное копирование чужого окна? Если для активного окна работает такой код: bmp:=TBitmap.Create; bmp.Height:=500; bmp.Width:=500; DC:=GetDC(0); bitblt(bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height,DC, 350, 120, SRCCOPY); т.е. 350,120 дает мне смещение отсчета координат,то при копировании чужого окна такого не получается,уже все значения поменял,ну никак не смещается точка-начала копирования.... Вот код,который прекрасно работает с копированием чужого окна: var DC,hSrcDC: hDC; Rect : TRect; wX,wY: integer; b: tbitmap; h: hwnd; begin b:= tbitmap.Create; h:= findwindow(nil,'Сube Info'); GetWindowRect(h,Rect); wX:= Rect.Right - Rect.Left; wY:= Rect.Bottom - Rect.Top; DC:= GetWindowDC(h); b.Handle:= CreateCompatibleBitmap(dc,wX,wY); hSrcDC:= CreateCompatibleDC(0); SelectObject(hSrcDC, b.Handle); PrintWindow(h, hSrcDC, 0); BitBlt(b.Handle,0,0,wX,wY,DC,0,0,SR CCOPY); b.SaveToFile('C:\1.bmp'); ReleaseDC(h,DC); DeleteDC(hSrcDC); b.Free Как его модифицировать,чтобы копировалась часть чужого экрана? Последний раз редактировалось rekrow; 26.11.2009 в 15:43. |
26.11.2009, 16:41 | #4 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
есть help, очень полезная вещь... а если еще потратить время, то можно найти - copyrect:
Код:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
26.11.2009, 18:41 | #5 |
Пользователь
Регистрация: 08.10.2009
Сообщений: 16
|
Да,смысл мне понятен!Дело в том,что я уже пробовал через CopyRect,но он не вырезает ничего,просто создает пустой bmp.Вот код,который я пользовал:
var DC,hSrcDC: hDC; RRect : TRect; wX,wY: integer; b,b2: tbitmap; h: hwnd; begin b:= tbitmap.Create; b2:= tbitmap.Create; h:= findwindow(nil,'Сube Info'); GetWindowRect(h,RRect); wX:= RRect.Right - RRect.Left; wY:= RRect.Bottom - RRect.Top; DC:= GetWindowDC(h); b.Handle:= CreateCompatibleBitmap(dc,wX,wY); hSrcDC:= CreateCompatibleDC(0); SelectObject(hSrcDC, b.Handle); PrintWindow(h, hSrcDC, 0); BitBlt(b.Handle,0,0,wX,wY,DC,0,0,SR CCOPY); b.SaveToFile('C:\1.bmp'); b2.Canvas.CopyRect(Rect(0,0,860,635 ),b.canvas,Rect(10,10,10,10)); b2.SaveToFile('C:\2.bmp'); ReleaseDC(h,DC); DeleteDC(hSrcDC); b.Free; b2.Free; Bmp1 хранит нормально,чужое окошко прекрасно копируется,а вот из него уже ничего не вырезается,просто создается файл с невозможностью прочитать его.Может я НУБлю жестко?! |
26.11.2009, 22:13 | #6 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
ваш (этот) код мне знаком... у него есть еще недостаток, он не копирует полупрозрачные окна... используйте тот что дал и все будет ок.
...кроме того, при такой записи у вас Код:
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
27.11.2009, 09:38 | #7 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Ну либо через DISPLAY + CreateDC как было выше указано либо через BitBlt но SRC_COPY +
Код:
|
27.11.2009, 14:14 | #8 |
Пользователь
Регистрация: 08.10.2009
Сообщений: 16
|
Всем огромное спасибо.Маленько пришлось по-другому обмозговать код,но в целом работает как мне надо
P.S.:отдельное спасибо raxp,сопровождал все мои топики ценными советами!!! |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Аналог GetDC() | Василий | Win Api | 3 | 14.01.2009 09:32 |
Проблема с рамами/Проблема с ЖД | DRAGGER | Компьютерное железо | 6 | 04.01.2009 23:37 |