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

Здравствуйте еще раз подскажите плз.Мне необходимо сделать скрин активного окна.Я делаю примерно вот так, но у меня ничего не получается: Получаю координаты активного окна
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;
Во-вторых: Поставь бряк после определения координат и проверь правильные ли они.