Как я могу сделать снимок экрана под моим собственным окном, исключая мое собственное окно - PullRequest
6 голосов
/ 27 июня 2011

Если я хочу запрограммировать лупу, как я могу захватить содержимое экрана, исключая мое собственное окно? Я знаю, как сделать снимок экрана с помощью собственного окна с помощью BitBlt и рабочего стола DC.

И чтобы было понятнее: я хочу показать увеличенное содержимое в моем окне.

Редактировать: Кажется, что нет другого решения, кроме как спрятать мое окно (или клиентскую область) тем или иным образом, прежде чем я смогу захватить содержимое экрана под моим окном. Очевидно, это заставляет мое окно мерцать, что делает этот сценарий довольно бесполезным.

Ответы [ 4 ]

2 голосов
/ 27 июня 2011

Во время процесса захвата установите для свойства AlphaBlend формы значение true, а для AlphaBlendValue - 0. Имейте в виду, что это сделает вашу форму полностью невидимой.

1 голос
/ 27 июня 2011

Вам нужно сделать снимок экрана из DC рабочего стола в растровое изображение в памяти.

procedure CaptureScreenShot(acapture: TBitMap);
 var c: TCanvas;
     r: TRect;
 begin
  c:= TCanvas.Create;
  c.Handle:= GetWindowDC (GetDesktopWindow);
  try
    r:= Rect(0,0,screen.width,screen.height);
    acapture.Width:=screen.Width;
    acapture.Height:=screen.Height;
    acapture.Canvas.CopyRect(r, c, r);
  finally
    ReleaseDC(0, c.handle);
    c.Free;
  end;
end;

Добавьте к этому ответу Уве, чтобы сделать вашу форму невидимой, и вы получите ....

FCapturedScreenShot:TBitmap;
....
FCapturedScreenShot:=TBitmap.Create;
....
AlphaBlend:=true;
AlphaBlendValue:=0; 
CaptureScreenshot(FCapturedScreenShot);
AlphaBlendValue:=False; 

используйте захваченный скриншот для любых целей, вы можете назначить его поверх растрового изображения в другой форме или сохранить его в массиве захваченных экранов ...

1 голос
/ 27 июня 2011

Для этого вы используете PrintWindow (), но он не быстрый и работает не для всех приложений.

0 голосов
/ 28 июня 2011

Попытайтесь свернуть или скрыть форму до захвата экрана и восстановить или показать форму после захвата экрана

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...