Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.16;
Скачать: CL | DM;

Вниз

Получить фото окна зная его HWND   Найти похожие ветки 

 
JanMihail ©   (2007-07-05 16:46) [0]

Как получить фото окна зная его Handle (HWND)
Желательно в TBitmap
Пробую так, не получается :((

h  : HWND;//Хэндл окнаcan: TCanvas;
...
can := TCanvas.Create;
can.Handle := GetDC(h);

BitBlt(Image1.Canvas.Handle, 0, 0, 700, 600, can.Handle, 0, 0, SRCCOPY);

<HR>
Подскажите пожалуйста как реализовать?


 
Cj ©   (2007-07-05 18:15) [1]

создай Bitmap и делай в него CopyRect


 
Игорь Шевченко ©   (2007-07-05 18:25) [2]

SendMessage (h, WM_PRINT, Image1.Canvas.Handle, PRF_CLIENT or PRF_NONCLIENT) ?


 
JanMihail ©   (2007-07-05 18:38) [3]


> Cj ©   (05.07.07 18:15) [1]


CopyRect не подходит. Т.к. поверх нужного окна может быть другое окно и CopyRect захватывает часть покрытого окна.


> Игорь Шевченко ©   (05.07.07 18:25) [2]


 Попробовал. Не выходит. Возвращает пустой белый Image


 
{RASkov} ©   (2007-07-05 19:42) [4]

> [0] JanMihail ©   (05.07.07 16:46)

Ну вообще-то получается... только без рамки (клиентская часть), и если сам калькулятор виден на экране:
var DC: HDC; H: THandle;
begin
 H:=FindWindow(nil, "Калькулятор");
 DC:=GetDC(H);
 BitBlt(Canvas.Handle, 0, 0, Width, Height, DC, 0, 0, SRCCOPY);
 ReleaseDC(H, DC);
end;

правда помимо калькулятора, рисуется еще и область правее и ниже его (если форма больше калькулятора:)) Но это отдельная тема...


 
JanMihail ©   (2007-07-05 20:25) [5]


> {RASkov} ©   (05.07.07 19:42) [4]


Я же говорю. Калькулятор может быть за другим окном. Или часть калькулятора будет за другим окном и уже не будет клиентская область. Будет кусок того окна.


 
{RASkov} ©   (2007-07-05 21:16) [6]

> [5] JanMihail ©   (05.07.07 20:25)

Посмотри вот здесь
http://delphimaster.net/view/4-1169652134/


 
{RASkov} ©   (2007-07-05 21:55) [7]

Вот так попробуй:

function PrintWindow(hwnd: HWND; hdcBlt: HDC; nFlags: UINT): BOOL; stdcall;

implementation
{$R *.dfm}
function PrintWindow; external user32 name "PrintWindow";
............
PrintWindow(FindWindow(nil, "Калькулятор"), Canvas.Handle, 0);


Только:
 Windows NT/2000/XP/Vista: Included in Windows XP and Windows Server 2003.
 Windows 95/98/Me: Unsupported.
 value="   Header: Declared in Winuser.h; include Windows.h.
 Library: Use User32.lib.

И если рисуемое окно свернуто, то рисуется его свернутое изо.


 
JanMihail ©   (2007-07-06 11:41) [8]


> {RASkov} ©   (05.07.07 21:55) [7]

Спасибо!!! То что нужно!!!



Страницы: 1 вся ветка

Текущий архив: 2007.09.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
15-1187423520
wl
2007-08-18 11:52
2007.09.16
темплейты (с++билдер 6)


15-1187089130
просто так
2007-08-14 14:58
2007.09.16
как запретить несанкционированное скачивание?


2-1187803320
rtm
2007-08-22 21:22
2007.09.16
Как реализовать в ShellExecute следующий вариант >>>


1-1183818645
Ricks
2007-07-07 18:30
2007.09.16
Разминка для мозгов


8-1165399331
Галинка
2006-12-06 13:02
2007.09.16
Метод Refresh и событие Paint