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

This article is available in English too, check it out here.

المقدمة

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

توفر لك بيئة الدوت نت طريقة لمحاكاة الضغط على أزرار لوحة المفاتيح عن طريق الكلاس 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 للسماح للمستخدم باختيار إذا كان يريد التقاط صورة للنافذة كلها أو للشاشة المنشطة فقط.

خاتمة

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

رأيان حول “التقاط صورة للشاشة برمجيا

اترك تعليقا