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

التقاط صورة للشاشة برمجيا

بدأه Mohammad Elsheimy في 8 يوليو 2009 · 2 رد · 832 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع
قمت بكتابة هذا الدرس سابقا في موقعي
.

المقدمة

درسنا في هذا اليوم ليس يتكلم عن طريقة التقاط الشاشة! لكن، درسنا اليوم يتكلم عن طريقة محاكاة الضغط على أزرار لوحة المفاتيح وسوف نستخدم كمثال محاكاة الضغط على أزرار التقاط صورة للشاشة.

توفر لك بيئة الدوت نت طريقة لمحاكاة الضغط على أزرار لوحة المفاتيح عن طريق الكلاس System.Windows.Forms.SendKeys والذي بالطبع موجود في المكتبة System.Windows.Forms.dll.

توفر لك الكلاس SendKeys دالتين لمحاكاة الضغط على الأزرار وهما SendWait() و Send(). تقوم SendWait() بإرسال الأزرار التي تقوم بتحديدها والانتظار حتى تنفذ. فعلى سبيل المثال لو قمنا بمحاكاة الضغط على الأزرار Ctrl+Alt+Delete سوف تقوم هذه الدالة بإرسال الأمر والانتظار حتى يتم فتح برنامج Task Manager. وعلى العكس من ذلك، فدالة Send() تقوم بإرسال أمر المحاكاة ولا تقوم بالانتظار حتى يتم تنفيذها.

كلتا الدالتين SendWait() و Send() تأخذ مدخلا واحدا وهو نصيا وهو keys. لمحاكاة الضغط على أزرار معينة تقوم بإدخال النص المساوي لهذه الأزرار في هذه الدالة أو هذه حسب اختيارك. فعلى سبيل المثال زر تصوير الشاشة وهو Print Screen له نص مميز له وهو {PrtSc}. ولهذا لإرسال أمر محاكاة الضغط على زر تصوير الشاشة سوف تقوم بالنداء على الدالة المناسبة وتوفير المدخلات لها وهي {PrtSc} وهكذا. قم بزيارة هذه الصفحة لتعرف كل أزرار لوحة المفاتيح وكل نص مميز لكل زر.

التطبيق

في هذا المثال سوف نقوم بمحاكاة زر Print Screen لتصوير الشاشة كلها أو زري Alt+Print Screen لتصوير النافذة المفتوحة فقط. لاحظ أنه زر Alt يساوي علامة % عند إسناده إلى الدالة SendWait() أو Send().

افتح مشروع Windows Application جديد. من نافذة الكود الخاص بالفورمة أضف دالتنا التالية:

// C# Code
   public static Image TakeScreenSnapshot
	   (bool activeWindowOnly)
   {
	   // PrtSc = Print Screen key
	   string keys = "{PrtSc}";

	   // التأكد من أن المستخدم يريد تصوير
// الشاشة كلها أو النافذة المفتوحة فقط
	   if (activeWindowOnly)
		   keys = "%" + keys; // % = Alt

	   // إرسال الأمر
	   SendKeys.SendWait(keys);

	   // استرجاع الأمر من الذاكرة
	   return Clipboard.GetImage();
   }

   ' VB.NET Code
   Public Shared Function TakeScreenSnapshot _
	   (activeWindowOnly As Boolean) As Image
	   ' PrtSc = Print Screen key
	   Dim keys As String = "{PrtSc}"

	   ' التأكد من أن المستخدم يريد تصوير
	   ' الشاشة كلها أو النافذة المفتوحة فقط
	   ' % = Alt
	   If (activeWindowOnly) Then
		   keys = "%" & keys
	   End If

	   ' إرسال الأمر
	   SendKeys.SendWait(keys)

	   ' استرجاع الأمر من الذاكرة
	   Return Clipboard.GetImage()
   End Function

لاحظ في الكود السابق استخدام الدالة GetImage الموجودة في الكلاس Clipboard لاسترجاع الصورة من ذاكرة النظام Clipboard.

الآن قم بإضافة الكود الخاص بالنداء إلى الفورمة عن طريق مثلا إضافة زر Button لالتقاط الشاشة وإضافة الكود المناسب بداخله. يمكنك أيضا إضافة مربع Check Box للسماح للمستخدم باختيار إذا كان يريد التقاط صورة للنافذة كلها أو للشاشة المنشطة فقط.

خاتمة

تعلمنا في هذا الدرس كيفية محاكاة الضغط على أزرار لوحة المفاتيح وتطرقنا لمثال يقوم بمحاكاة أزرار التقاط صورة للشاشة. وإلى لقاء آخر بإذن الله تعالى....

#2

السلام عليكــم ورحمـة الله وبركاتــه ،،

برنامج لأخذ صورة للشاشة

#3

شكرا لك أخي جزاك الله خيرا

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