В итоге я выбрал другой маршрут.
Я разрешаю пользователю изменять размер моего окна формы, чтобы он в точности покрывал область, необходимую ему для скриншота, а затем, когда он нажимает кнопку, форма скрывается, принимаетскриншот области, которую он покрывал и появляется снова.Вопреки моему первоначальному плану, я считаю, что это будет более выгодно, поскольку мои целевые пользователи (друзья на форуме по разгону, в котором я участвую) редко делают снимки экрана только из одного окна.В основном им требуется пара окон (мониторинг температуры, контроль скорости, тест стабильности и т. Д.).
Спасибо за ответы, ребята.Они определенно заставили меня задуматься и заставили меня осознать, какие у меня были варианты.
Если кому-то еще это понадобится, то этот код я использую для кнопки, которая захватывает только часть экрана:
try
{
this.Hide();
Thread.Sleep(250);
bmpScreenshot = new Bitmap(this.Bounds.Width, this.Bounds.Height, PixelFormat.Format32bppArgb);
gfxScreenshot = Graphics.FromImage(bmpScreenshot);
gfxScreenshot.CopyFromScreen(this.Bounds.X, this.Bounds.Y, 0, 0, this.Bounds.Size, CopyPixelOperation.SourceCopy);
bmpScreenshot.Save(SaveLocation, ImageFormat.Png);
tbxStatus.AppendText(Environment.NewLine);
tbxStatus.AppendText(Environment.NewLine);
tbxStatus.AppendText("Screenshot saved at " + SaveLocation);
numSuffix++;
}
catch (Exception ex)
{
tbxStatus.AppendText(Environment.NewLine);
tbxStatus.AppendText(Environment.NewLine);
tbxStatus.AppendText("Unable to take screenshot. Exception: " + ex.ToString());
}
finally
{
this.Show();
}