在 c# 中使用 control.drawtobitmap 失败后,我的第二个选择是截取桌面的屏幕截图并裁剪出所需的部分。一旦我切换用户帐户,我的打嗝就会出现,虽然程序不会崩溃,但一旦用户切换,程序只会生成纯黑色图像。
我使用此代码作为参考: WebBrowser.DrawToBitmap() 或其他方法?
我想这在逻辑上是有道理的,因为这将有助于 Windows 节省资源。
在我的情况下,我有哪些选择/解决方案?
编辑 1 对测试代码进行了修改:
int c = 0;
while (true)
{
try
{
c++;
Rectangle formBounds = this.Bounds;
Bitmap bmp = new Bitmap(formBounds.Width, formBounds.Height);
using (Graphics g = Graphics.FromImage(bmp))
g.CopyFromScreen(formBounds.Location, Point.Empty, formBounds.Size);
bmp.Save("picture" + c.ToString() + ".jpg");
Thread.Sleep(5000);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
这在用户帐户上运行良好,但是一旦我切换用户,它就会返回异常:句柄无效。
有任何想法吗?
编辑2:
DrawToBitmap 中的错误不是完全随机的...如果我使用您提供的代码:
Bitmap bmp = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height);
this.DrawToBitmap(bmp, this.ClientRectangle);
bmp.Save(".\\picture.jpg");
Run Code Online (Sandbox Code Playgroud)
它完美地工作,例如:http : //oi61.tinypic.com/1z23ynp.jpg
但是,当我右键单击 Web 浏览器控件时,DrawToBitmap 将返回一个空白图像。
示例: …