السلام عليكم
لدي سؤال بسيط عن كيفية التقاط صورة لسطح المكتب مثل زر (Print Screen) لكن مع إظهار مؤشر الماوس في الصورة
السلام عليكم
لدي سؤال بسيط عن كيفية التقاط صورة لسطح المكتب مثل زر (Print Screen) لكن مع إظهار مؤشر الماوس في الصورة
http://www.swissdelphicenter.ch/torry/showcode.php?id=1396
// 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;
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…