Создание скриншотов с помощью C #

Введение

Если вам нужно сделать снимок экрана средствами C#, один из надёжных способов — использовать GDI-функции через Windows API. Такой подход обеспечивает доступ к системному устройству вывода и позволяет точно скопировать изображение с экрана.

Как работает код

Пример ниже использует WinAPI-функции GetDC, BitBlt, ReleaseDC, чтобы скопировать изображение экрана в Bitmap, используя возможности GDI.

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();
}

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();

        //Основной эскиз, копирует экран в растровое изображение
        //последнее число — константа копирования
        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;
    }
}

Особенности и преимущества

  • 📐 Поддерживает полный размер экрана (разрешение).
  • ⚙️ Использует GDI для высокой производительности.
  • 💾 Позволяет сохранить результат в файл (Bitmap.Save()).
  • 🧩 Легко интегрируется в WinForms-приложение.

аключение

Создание скриншотов в C# с использованием GDI — это простой и эффективный способ получить точную копию экрана. Подобный подход особенно полезен для создания утилит, тестирования интерфейсов или журналирования пользовательских действий.

По ссылке ниже вы можете скачать программу которая поможет вас сделать скриншот.

Скачать программа скриншот ScreenFly от nookery!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.