Скрин активной программы

Здравствуйте еще раз подскажите плз.Мне необходимо сделать скрин активного окна.Я делаю примерно вот так, но у меня ничего не получается: Получаю координаты активного окна
H: THandle; //Дескриптор
WindowRect: TRect; // Область окна
begin H := GetForegroundWindow; //Получаем дескриптори на активное окно itop := WindowRect.Top; ileft := WindowRect.Left; iheight := WindowRect.Right-WindowRect.left; iwidth := WindowRect.Bottom-WindowRect.Top;
var BM: Graphics.TBitmap; DC1: HDC; Image: TImage;
begin
// Скрин экрана BM := Graphics.TBitmap.Create; BM.Width := Unit1.iwidth; BM.Height := Unit1.iheight; DC1 := GETDC(0); bitblt(BM.Canvas.Handle, ileft, itop, iWidth, iHeight, DC1, 0, 0, SRCCOPY); BM.IgnorePalette := true; Image1.Width := BM.Width; Image1.Height := BM.Height; Image1.Picture.Assign(BM); Bm.SaveToFile('D:/1.bmp');
Что я не так делаю? Скрины полный бред получаются, даже близко в окошки не попадают + к тому же на скрине откуда-то куча белого фона появляется сверху и слева
3 ответа

H := GetForegroundWindow; //Получаем дескриптори на активное окно
Ну а где само получение гизмо окошка?
var wp:WINDOWPLACEMENT;
... GetWindowPlacement(GetForegroundWindow,wp); x:=wp.rcNormalPosition.Left; y:=wp.rcNormalPosition.Top; w:=wp.rcNormalPosition.Right-x; h:=wp.rcNormalPosition.Bottom-y;
Вот я так работал раньше.


Почему-то тоже самое получается. Идеальный скрин выходит, только если окошко находится в самом верхнем углу, если по другому, то бред какой-то получается((( Не могу разобраться...Суть такая моя программа таймером отслеживает все открывающиеся окошки, и если в имени окна она встречает символ /, то должна делать скрин этого окна. Если окно находится в левом верхнем углу, то все идеально скриншотит, если же в ниже, то какие-то непонятные скрины поучаются(((
DeskTop: TCanvas; H: THandle; DC : HDC; bmp : TBitmap; wp:WINDOWPLACEMENT; x,y,we,he: integer;
begin Edit1.Text := memo1.Lines.Strings[0]; Label1.Caption := Memo1.Lines.Strings[0]; if pos('/', edit1.Text) <> 0 then begin GetWindowPlacement(GetForegroundWindow,wp); x:=wp.rcNormalPosition.Left; y:=wp.rcNormalPosition.Top; we:=wp.rcNormalPosition.Right-x; he:=wp.rcNormalPosition.Bottom-y; bmp := TBitmap.Create; bmp.Height := Screen.Height; bmp.Width := Screen.Width; DC := GetDC(0); bitblt(bmp.Canvas.Handle, y, x, we, he, DC, 0, 0, SRCCOPY); ReleaseDC(0, DC); bmp.SaveToFile('D:/' + IntToStr(i) + '.bmp'); i := i + 1; bmp.Free; end;
end;


Во-первых:
bmp.Height := he; bmp.Width := we;
Во-вторых: Поставь бряк после определения координат и проверь правильные ли они.