Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
// 1. Get the handle to the current mouse-cursor and its position functionGetCursorInfo2: 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
;