الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

سؤال عن كيفية التقاط صورة لسطح المكتب مع إظهار مؤشر الماوس

مغلق
بدأه M.Jawad في 13 يناير 2008 · 1 رد · 830 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي سؤال بسيط عن كيفية التقاط صورة لسطح المكتب مثل زر (Print Screen) لكن مع إظهار مؤشر الماوس في الصورة

#2

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;
d4baa0.gif

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…