حسین احمدی
بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

آموزش گرفتن عکس از صفحه نمایش در سی شارپ

در این نکته قصد دارم تا نحوه گرفتن عکس از صفحه نمایش بوسیله کد سی شارپ را خدمت دوستان آموزش بدم. در حقیقت این مطلب یک نمونه کد آماده است که بوسیله PInvoke و استفاده از توابع Windows به شما امکان تهیه عکس از صفحه نمایش را می دهد. برای اینکار ابتدا کلاسی به صورت زیر تعریف می کنیم:

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
public class API
{
    [DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
    public static extern IntPtr GetDC(IntPtr hWnd);

    [DllImport("user32.dll", ExactSpelling = true)]
    public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC);

    [DllImport("gdi32.dll", ExactSpelling = true)]
    public static extern IntPtr BitBlt(IntPtr hDestDC, int x, int y, int nWidth, int nHeight, IntPtr hSrcDC, int xSrc, int ySrc, int dwRop);

    [DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]
    public static extern IntPtr GetDesktopWindow();
}

کاری که کلاس بالا انجام می دهد Import کردن یکسری API ها از فایل های user32.dll و gdi32.dll است که برای گرفتن عکس از صفحه نمایش به آن ها نیاز داریم.

برای یادگیری و آموزش سی شارپ ( آموزش زبان برنامه نویسی سی شارپ ) رایگان به این لینک بروید

در ادامه کلاس زیر را تعریف می کنیم که یک متد static با نام Take در آن تعریف شده. این متد از صفحه نمایش یک تصویر گرفته و به صورت شئ ای از نوع Bitmap بر میگرداند:

internal class ScreenShot
{
    public static Bitmap Take()
    {
        int screenWidth = Screen.PrimaryScreen.Bounds.Width;
        int screenHeight = Screen.PrimaryScreen.Bounds.Height;

        Bitmap screenBmp = new Bitmap(screenWidth, screenHeight);
        Graphics g = Graphics.FromImage(screenBmp);

        IntPtr dc1 = API.GetDC(API.GetDesktopWindow());
        IntPtr dc2 = g.GetHdc();

        //Main drawing, copies the screen to the bitmap
        //last number is the copy constant
        API.BitBlt(dc2, 0, 0, screenWidth, screenHeight, dc1, 0, 0, 13369376);

        //Clean up
        API.ReleaseDC(API.GetDesktopWindow(), dc1);
        g.ReleaseHdc(dc2);
        g.Dispose();

        return screenBmp;
    }
}

در نهایت به صورت زیر می توان از صفحه نمایش عکس گرفت و در یک فایل ذخیره کرد:

var shot = ScreenShot.Take();
shot.Save("D:\\scshot.bmp");

کد بالا یک تصویر از صفحه نمایش ایجاد کرده و با نام scshot.bmp ذخیره می کند. دقت کنید که فضاهای نام System.Drawing و System.Runtime.InteropServices و System.Windows.Forms در کد بالا استفاده شده اند. امیدوارم که این مطلب مورد توجه شما قرار گرفته باشد.


حسین احمدی
حسین احمدی

بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ...

نظرات