Если под «снятием скриншота» подразумевается «отправка PrtSc », то есть лучший способ, используя System.Drawing.Graphics.CopyFromScreen
:
using(Bitmap b = new Bitmap(this.ClientSize.Width, this.ClientSize.Height)) {
using(Graphics g = Graphics.FromImage(b)) {
g.CopyFromScreen(this.PointToClient(Point.Empty), Point.Empty, this.ClientSize);
}
// Your form is now rendered into b.
}
Если вы хотите включить границу, просто используйте Size
вместо ClientSize
и this.Location
вместо this.PointToClient(Point.Empty)
.
В качестве альтернативы вы можете использовать this.DrawToBitmap
:
using(Bitmap b = new Bitmap(this.Width, this.Height)) {
this.DrawToBitmap(b, new Rectangle(0, 0, this.Width, this.Height));
// Your form is now rendered into b.
}
Это будет работать, даже если ваша форма не имеет фокуса. Однако он будет рисовать границу и будет рисовать ее в стиле Windows Basic, если Aero активен.