![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить изобр. окна, найдя его handle с помощью FindWindow? [D6, WinXP]
Volf_555 © (2006-01-27 02:33:00)Как получить изображение (как при нажатие Alt+PrintScreen) окна, найдя его handle с помощью FindWindow?
Volf_555 (2006-01-27 21:37:00) [1]Написал следующее:
procedure TForm1.Button1Click(Sender: TObject);
var
Wnd: HWND;
DC: HDC;
R: TRect;
B: TBitmap;
begin
Wnd := FindWindow(nil, 'Статистика Онлайн');
if Wnd <> 0 then begin
DC := GetWindowDC(Wnd);
ReleaseDc(Wnd,DC);
if DC <> 0 then begin
GetWindowRect(Wnd, R);
B := TBitmap.Create;
B.Width := R.Right - R.Left;
B.Height := R.Bottom - R.Top;
BitBlt(B.Canvas.Handle, 0, 0, B.Width, B.Height, DC, 0, 0, SRCCOPY);
Image1.Picture.Assign(B);
end;
B.Free;
end;
end;
Результат тот же - белое окно. По нажатии на кнопку форма становилась скрытой, запускался таймер, по таймеру происходило нажатие на кнопку на Button1, показывалась форма с результатом. Результат - белое окно....
PKT (2006-01-27 04:22:00) [2]Прошу пардону,
конечно же B.Free и ReleaseDC
PKT (2006-01-27 04:13:00) [3]
var
Wnd: HWND;
DC: HDC;
R: TRect;
B: TBitmap;
begin
Wnd := FindWindow(nil, 'Статистика Онлайн');
if Wnd <> 0 then begin
DC := GetWindowDC(Wnd);
if DC <> 0 then begin
GetWindowRect(Wnd, R);
B := TBitmap.Create;
B.Width := R.Right - R.Left;
B.Height := R.Bottom - R.Top;
BitBlt(B.Canvas.Handle, 0, 0, B.Width, B.Height, DC, 0, 0, SRCCOPY);
Image1.Picture.Assign(B);
end;
end;
end;
Если, конечно, 'Статистика Онлайн' не перекрыта другими окнами.
Volf_555 (2006-01-27 02:58:00) [4]Пробывал следующий код:
procedure TForm1.Button1Click(Sender: TObject);
var
s:Integer;
a:TBitMap;
begin
a:=TBitMap.Create;
s:=FindWindow(nil,'Статистика Онлайн');
if s<>0 then
begin
ShowMessage('!!!');
BitBlt(GetDC(s),0,0,screen.Width,screen.Height,image1.Canvas.Handle,0,0,1);
end;
end;
В результатеImage1заливается чисто белым цветом
Volf_555 (2006-01-27 02:50:00) [5]Пробывал следующим образом - окно находит, но изображение не получает:
procedure TForm1.Button1Click(Sender: TObject);
var
s:Integer;
a:TBitMap;
begin
a:=TBitMap.Create;
s:=FindWindow(nil,'Статистика Онлайн');
if s<>0 then
begin
ShowMessage('!!!');
GetWindowDC(s);
a.Canvas.Handle:=s;
Image1.Picture.Bitmap.Assign(a);
end;
end;
Джо (2006-01-27 02:34:00) [6]Get[Window]Dc, BitBlt.