Как получить screen shot экран вместе с указателем мыша?

надо его вручную дорисовать

procedure GetScreenImage(bmp: TBitmap);

var

 CI: TCursorInfo;

 Icon: TIcon;

 II: TIconInfo;

 r: TRect;

begin

bmp.Width:= Screen.Width;

bmp.Height:= Screen.Height;

BitBlt(bmp.Canvas.Handle,0,0,Screen.Width,Screen.Height,

GetDC(GetDesktopWindow),0,0,SRCCopy);

//дорисуем курсор

Icon:=TIcon.Create;

r:=Rect(0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN));

CI.cbSize:=SizeOf(CI);

if (GetCursorInfo(CI)) and (CI.flags=CURSOR_SHOWING) then

 begin

 Icon.Handle:=CopyIcon(CI.hCursor);

 if GetIconInfo(Icon.Handle,II) then

 bmp.Canvas.Draw(ci.ptScreenPos.x - Integer(II.xHotspot) - r.Left, ci.ptScreenPos.y - Integer(II.yHotspot) - r., Icon);

 end;

end;

Автор P.O.D
Взято из http://forum.sources.ru

// 1. Get the handle to the current mouse-cursor and its position
function GetCursorInfo2: TCursorInfo;
 var
 hWindow: HWND;
 pt: TPoint;
 pIconInfo: TIconInfo;
 dwThreadID, dwCurrentThreadID: DWORD;
 begin
 Result.hCursor := 0;
 ZeroMemory(@Result, SizeOf(Result));
 // Find out which window owns the cursor
 if GetCursorPos(pt) then
 begin
  Result.ptScreenPos := pt;
  hWindow := WindowFromPoint(pt);
  if IsWindow(hWindow) then
  begin
  // Get the thread ID for the cursor owner.
  dwThreadID := GetWindowThreadProcessId(hWindow, nil);
  // Get the thread ID for the current thread
  dwCurrentThreadID := GetCurrentThreadId;
  // If the cursor owner is not us then we must attach to
  // the other thread in so that we can use GetCursor() to
  // return the correct hCursor
  if (dwCurrentThreadID <> dwThreadID) then
  begin
  if AttachThreadInput(dwCurrentThreadID, dwThreadID, True) then
  begin
  // Get the handle to the cursor
  Result.hCursor := GetCursor;
  AttachThreadInput(dwCurrentThreadID, dwThreadID, False);
  end;
  end
  else
  begin
  Result.hCursor := GetCursor;
  end;
  end;
 end;
 end;
 // 2. Capture the screen
function CaptureScreen: TBitmap;
 var
 DC: HDC;
 ABitmap: TBitmap;
 MyCursor: TIcon;
 CursorInfo: TCursorInfo;
 IconInfo: TIconInfo;
 begin
 // Capture the Desktop screen
 DC := GetDC(GetDesktopWindow);
 ABitmap := TBitmap.Create;
 try
  ABitmap.Width := GetDeviceCaps(DC, HORZRES);
  ABitmap.Height := GetDeviceCaps(DC, VERTRES);
  // BitBlt on our bitmap
  BitBlt(ABitmap.Canvas.Handle,
  0,
  0,
  ABitmap.Width,
  ABitmap.Height,
  DC,
  0,
  0,
  SRCCOPY);
  // Create temp. Icon
  MyCursor := TIcon.Create;
  try
  // Retrieve Cursor info
  CursorInfo := GetCursorInfo2;
  if CursorInfo.hCursor <> 0 then
  begin
  MyCursor.Handle := CursorInfo.hCursor;
  // Get Hotspot information
  GetIconInfo(CursorInfo.hCursor, IconInfo);
  // Draw the Cursor on our bitmap
  ABitmap.Canvas.Draw(CursorInfo.ptScreenPos.X - IconInfo.xHotspot,
  CursorInfo.ptScreenPos.Y - IconInfo.yHotspot, MyCursor);
  end;
  finally
  // Clean up
  MyCursor.ReleaseHandle;
  MyCursor.Free;
  end;
 finally
  ReleaseDC(GetDesktopWindow, DC);
 end;
 Result := ABitmap;
 end;
 // Example: Capture the screen and include the cursor.
// Show the Screenshot in Image1
procedure TForm1.Button1Click(Sender: TObject);
 begin
  Image1.Picture.Assign(CaptureScreen);
 end;
Взято с сайта: http://www.swissdelphicenter.ch

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...