Сегодня мы создадим программу, которая будет делать скриншоты экрана на C#.
Для этого нам понадобятся две формы. В первой мы разместим две кнопки Button:
Затем создаём вторую форму. Для этого правой кнопкой мыши нажимаем на наш проект, затем выбираем вкладку «Добавить», а далее «Создать элемент».
В открывшемся окне выбираем пункт «Форма Windows Forms» и называем её (у нас она называется ScreenShot), нажимаем «Добавить».
Во второй форме создаём две кнопки: «Сохранить» и «Закрыть», а также PictureBox.
Вторая форма должна быть большая, так как именно в ней мы и будем наблюдать скриншот, который мы сделаем.
Итак, переходим к коду.
В первой форме сразу в теле public partial class Form1 : Form мы инициализируем переменную типа Bitmap, которую в итоге будем передавать во вторую форму:
1 |
public static Bitmap BM = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); |
Теперь мы создадим обработчик события нажатия на кнопку «Сделать скриншот», для этого дважды нажимаем на этот Button:
1 2 3 4 5 6 7 8 9 |
private void button1_Click(object sender, EventArgs e) { Graphics GH = Graphics.FromImage(BM as Image); GH.CopyFromScreen(0, 0, 0, 0, BM.Size); ScreenShot SI = new ScreenShot(); SI.ShowDialog(); } |
Сначала мы создаём объект класса Graphics из рисунка BM.
Далее «скриншотим» экран, передавая все данные с экрана на поверхность объекта Graphics. Четыре нуля — это отступы по границам экрана: левая граница экрана, верхняя граница экрана, правая граница экрана, нижняя граница экрана. У нас эти значения равны нулю, значит отступов у нас не будет, если хочется как-либо ограничить область создания скриншота, то надо менять значения в этом участке кода (ограничение ведётся по пикселям). BM.Size передаёт размер изображения в PictureBox, который мы подключим позже во второй форме
ScreenShot, как мы помним — это имя нашей второй формы. Мы создаём этот объект в первой форме для того, чтобы связать обе формы.
Затем мы при помощи ShowDialog открываем нашу вторую форму с уже переданными в неё данными о скриншоте.
Однако, прежде чем мы перейдём к коду второй формы, нам стоит закончить работу с первой.
Для этого дважды кликаем на кнопку «Выйти» и пишем простую команду, которая закроет нашу программу:
1 |
Application.Exit(); |
Теперь переходим ко второй форме. Пока что наше изображение не выводится на ней. И это естественно, так как мы не указали, куда нам выводить наше изображение. Для этого мы в теле кода инициализации второй формы пишем следующее:
1 2 3 4 5 6 7 |
public ScreenShot() { InitializeComponent(); pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage; pictureBox1.Image = Form1.BM; } |
В PictureBox мы передаём информацию о том, каким образом будет отображаться изображение. Благодаря свойству StretchImage, изображение будет сужаться или расширяться, подстраиваясь под размер PictureBox’a.
В последней же строке мы передаём обработанный скриншот BM из первой формы в PictureBox второй формы.
Теперь наша программа работает, скриншоты создаются. Нам осталось написать код для сохранения изображения и для закрытия второй формы, когда она уже не нужна.
Закрытие формы по нажатии на кнопку «Закрыть» пишется в одну строку, практически как и закрытие всего приложения:
1 2 3 4 |
private void button2_Click(object sender, EventArgs e) { this.Close(); } |
С сохранением же немного посложнее:
1 2 3 4 5 6 7 8 9 |
private void button1_Click(object sender, EventArgs e) { SaveFileDialog SFD = new SaveFileDialog(); SFD.Filter = "PNG|*.png|JPEG|*.jpg|GIF|*.gif|BMP|*.bmp"; if (SFD.ShowDialog() == DialogResult.OK) { Form1.BM.Save(SFD.FileName); } } |
Итак ,сначала мы создаём новый SaveFileDialog. Это то окно, которое всплывает у нас, когда мы хотим сохранить тот или иной файл:
Затем мы накладываем фильтр (Filter) по типам файлов, которые пользователь сможет выбрать. У нас это четыре формата изображений: .png, .jpeg, gif, и bmp.
Выглядеть эта вариация в SaveFileDialog’e будет вот так:
Затем у нас идёт условие: если в SaveFileDialog’e будет нажата кнопка «ОК», то объект BM из первой формы будет сохранен под именем, которое ему даст пользователь в SaveFileDialog’e.
Программа готова:
Исходник программы на языке C# ниже:
Скачать исходник
Поделиться в соц. сетях:
Спасибо большое! Так же, если по нажатию кнопки «Сделать скриншот» установить у Form1 непрозрачность на 0 а после скрина вернуть на 100, то окно не будет мешаться на готовой картинке.
Спасибо за такие уроки! Удивительно практические. Куча полезных приемов.
Спасибо. Урок здорово помог.