Введение
Если вам нужно сделать снимок экрана средствами 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 — это простой и эффективный способ получить точную копию экрана. Подобный подход особенно полезен для создания утилит, тестирования интерфейсов или журналирования пользовательских действий.
По ссылке ниже вы можете скачать программу которая поможет вас сделать скриншот.