【发布时间】:2014-08-11 10:22:44
【问题描述】:
在 c# 中使用 control.drawtobitmap 失败后,我的第二个选择是截取桌面截图并裁剪出所需的部分。 一旦我切换用户帐户,我的打嗝就会出现,虽然程序不会崩溃,但一旦用户切换,程序只会生成纯黑色图像。
我将此代码用作参考: WebBrowser.DrawToBitmap() or other methods?
我想从逻辑上讲这是有道理的,因为这将有助于 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());
}
}
这在用户帐户上工作得很好,但是一旦我切换用户,它就会返回异常:句柄无效。
有什么想法吗?
编辑 2:
DrawToBitmap 中的错误并非完全随机... 如果我使用了您提供的代码:
Bitmap bmp = new Bitmap(this.ClientRectangle.Width, this.ClientRectangle.Height);
this.DrawToBitmap(bmp, this.ClientRectangle);
bmp.Save(".\\picture.jpg");
完美运行,例如:http://oi61.tinypic.com/1z23ynp.jpg
但是,当我右键单击网络浏览器控件时,DrawToBitmap 将返回一个空白图像。
示例:http://oi60.tinypic.com/9ay0yc.jpg
所以我可以通过添加轻松克服这个错误
((Control)webbrowser1).Enabled = false;
这使得在网络浏览器上的任何点击都是不可能的,但不幸的是,禁用它会使我的项目无用,因为它的主要功能是模拟鼠标在网络浏览器控件上的点击。 虽然如果窗口被隐藏,这也可能是一个问题。
目前我正在查看这篇文章,其中提供了代码来为您提供窗口句柄。
Simulate click into a hidden window 看来它可能有一些价值……看看吧。
【问题讨论】:
标签: c# windows-7 bitmap browser screenshot