Но по какой-то причине я получаю сообщение об ошибке: «Название« Экран »не существует в текущем контексте»
Причина этого заключается в том, что класс Screen
принадлежит сборке System.Windows.Forms
, на которую по умолчанию нет ссылки в консольном приложении.
Чтобы решить эту проблему, добавьте ссылку на сборку в свой проект, а затем добавьте using System.Windows.Forms
в начало вашего файла кода.
Чтобы добавить ссылку:
- Щелкните правой кнопкой мыши свой проект в обозревателе решений и выберите «Добавить ссылку ...»
- В открывшемся окне Reference Manager перейдите к
Assemblies -> Framework
слева - Прокрутите вниз среднее окно и установите флажок рядом с
System.Windows.Forms
- Нажмите "OK" "
Затем добавьте оператор using
в ваш файл кода, аналогично этому примеру на основе вашего кода:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace Tests
{
public class Program
{
public static Bitmap TakeScreenshot(string filePath = null)
{
var bounds = Screen.PrimaryScreen.Bounds;
var bmp = new Bitmap(bounds.Width, bounds.Height);
using (var g = Graphics.FromImage(bmp))
{
g.CopyFromScreen(0, 0, 0, 0, bounds.Size);
}
if (filePath != null) bmp.Save(filePath);
return bmp;
}
public static void Main()
{
Console.WriteLine("Taking a screenshot now...");
TakeScreenshot("screenshot.bmp");
Console.WriteLine("\nDone! Press any key to exit...");
Console.ReadKey();
}
}
}
Примечание: В наши дни многие пользователи имеют более одного монитора, поэтому, если вы хотите сделать снимок экрана, на котором * 103 5 * все экранов, вы можете создать прямоугольник, который охватывает все экраны:
public static Bitmap TakeScreenshot(string filePath = null)
{
var rect = new Rectangle();
// Take a screenshot that includes all screens by
// creating a rectangle that captures all monitors
foreach (var screen in Screen.AllScreens)
{
var bounds = screen.Bounds;
var width = bounds.X + bounds.Width;
var height = bounds.Y + bounds.Height;
if (width > rect.Width) rect.Width = width;
if (height > rect.Height) rect.Height = height;
}
var bmp = new Bitmap(rect.Width, rect.Height);
using (var g = Graphics.FromImage(bmp))
{
g.CopyFromScreen(0, 0, 0, 0, rect.Size);
}
if (filePath != null) bmp.Save(filePath);
return bmp;
}