Главная » Delphi » Графика » Как снять скриншот ?

Как снять скриншот ?

08:57
Скрин (13.07.05 3:39)
Мне дали одну функцию, как это делать. Но она глючит. Часто вылетает какая то ошибка "неверный параметр". Не знаю, что это такое. Может у кого есть безглючный вариант ?

Просто Джо © (13.07.05 4:09) [2]
Вот, держив "самопал" из одного проекта.
При необходимости, накладывает даже изображение курсора.


unit ScrUtil;
 
interface
uses Windows, SysUtils, Graphics;
 
procedure MakeScreenshot (Bmp: TBitmap; CaptureCursor: Boolean = True);
 
implementation
uses Controls, Forms;
 
procedure MakeScreenshot (Bmp: TBitmap; CaptureCursor: Boolean = True);
var
 DC: HDC;
 ACursor: HICON;
 Pt: TPoint;
 CurInfo: tagCURSORINFO;
 IcoInfo: _ICONINFO;
begin
 Bmp.Width := Screen.Width;
 Bmp.Height := Screen.Height;
 
 DC := GetDC (GetDesktopWindow);
 try
   BitBlt (
     Bmp.Canvas.Handle,
     0,0,Bmp.Width,Bmp.Height,
     DC,
     0,0,
     SRCCOPY);
 
   // -- курсор
   if CaptureCursor then
   begin
 
     CurInfo.cbSize := SizeOf(CurInfo);
     GetCursorInfo(CurInfo);
 
     ACursor := CurInfo.hCursor;
     Pt := CurInfo.ptScreenPos;
 
     GetIconInfo (ACursor,IcoInfo);
 
     DrawIcon(
       Bmp.Canvas.Handle,
       Pt.X-IcoInfo.xHotspot,
       Pt.Y-IcoInfo.yHotspot,
       ACursor
     )
   end;
 
 finally
   ReleaseDC (GetDesktopWindow,DC);
 end;
end;
 
end.



Пример использования:

procedure TScrnShtFrm.Button5Click(Sender: TObject);
var
 Bmp: TBitmap;
begin
 Bmp := TBitmap.Create;
 try
   // снимаем изображение экрана с курсором
   MakeScreenshot(Bmp,True);
   // и сохраняем его в файл директории программы
   Bmp.SaveToFile(ExtractFilePath(ParamStr(0))+'screen.bmp');
 finally
   Bmp.Free;
 end;
end;


http://www.delphimaster.ru/cgi-bin/forum.pl?id=1121211557&n=0