Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2013, 15:26   #1
ivt22
Пользователь
 
Регистрация: 23.07.2013
Сообщений: 81
По умолчанию Скрин активной программы

Здравствуйте еще раз подскажите плз.

Мне необходимо сделать скрин активного окна.

Я делаю примерно вот так, но у меня ничего не получается:
Получаю координаты активного окна
Код:

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');
Что я не так делаю? Скрины полный бред получаются, даже близко в окошки не попадают + к тому же на скрине откуда-то куча белого фона появляется сверху и слева
ivt22 вне форума Ответить с цитированием
Старый 27.09.2013, 16:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
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;
Вот я так работал раньше.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.09.2013, 16:22   #3
ivt22
Пользователь
 
Регистрация: 23.07.2013
Сообщений: 81
По умолчанию

Почему-то тоже самое получается. Идеальный скрин выходит, только если окошко находится в самом верхнем углу, если по другому, то бред какой-то получается(((
Не могу разобраться...

Суть такая моя программа таймером отслеживает все открывающиеся окошки, и если в имени окна она встречает символ /, то должна делать скрин этого окна. Если окно находится в левом верхнем углу, то все идеально скриншотит, если же в ниже, то какие-то непонятные скрины поучаются(((

Код:
  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;

Последний раз редактировалось Stilet; 27.09.2013 в 16:25.
ivt22 вне форума Ответить с цитированием
Старый 27.09.2013, 16:28   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Во-первых:
Код:
          bmp.Height := he;
          bmp.Width := we;
Во-вторых: Поставь бряк после определения координат и проверь правильные ли они.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скрин на видео. Alex Cones Общие вопросы Delphi 3 22.08.2013 08:50
Скрин экрана atihiy2010 Общие вопросы Delphi 14 05.05.2012 13:27
Скрин в 16 бит Mihanches Общие вопросы Delphi 0 11.10.2010 11:55
Путь активной программы Михаил Юрьевич Общие вопросы Delphi 6 22.01.2010 19:30
Сплэш-скрин Johnson Общие вопросы Delphi 2 21.11.2009 12:03